[{"data":1,"prerenderedAt":1131},["ShallowReactive",2],{"navigation_docs":3,"-docs-wallet-adapter-overview":352,"-docs-wallet-adapter-overview-surround":1126},[4,22,35,60,81,137,223,254,282,306,327],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[9,13,17],{"title":10,"path":11,"stem":12},"Overview","\u002Fdocs\u002Fgetting-started\u002Foverview","docs\u002F1.getting-started\u002F1.overview",{"title":14,"path":15,"stem":16},"Integration checklist","\u002Fdocs\u002Fgetting-started\u002Fintegration-checklist","docs\u002F1.getting-started\u002F2.integration-checklist",{"title":18,"path":19,"stem":20},"Environments and base URLs","\u002Fdocs\u002Fgetting-started\u002Fenvironments-and-base-urls","docs\u002F1.getting-started\u002F3.environments-and-base-urls",false,{"title":23,"path":24,"stem":25,"children":26,"page":21},"Troubleshooting","\u002Fdocs\u002Ftroubleshooting","docs\u002F10.troubleshooting",[27,31],{"title":28,"path":29,"stem":30},"Common errors","\u002Fdocs\u002Ftroubleshooting\u002Fcommon-errors","docs\u002F10.troubleshooting\u002F1.common-errors",{"title":32,"path":33,"stem":34},"Support escalation","\u002Fdocs\u002Ftroubleshooting\u002Fsupport-escalation","docs\u002F10.troubleshooting\u002F2.support-escalation",{"title":36,"path":37,"stem":38,"children":39,"page":21},"Polyflight","\u002Fdocs\u002Fpolyflight","docs\u002F11.polyflight",[40,44,48,52,56],{"title":41,"path":42,"stem":43},"Polyflight overview and launch","\u002Fdocs\u002Fpolyflight\u002Foverview-and-launch","docs\u002F11.polyflight\u002F1.overview-and-launch",{"title":45,"path":46,"stem":47},"Native wallet contract","\u002Fdocs\u002Fpolyflight\u002Fnative-wallet-contract","docs\u002F11.polyflight\u002F2.native-wallet-contract",{"title":49,"path":50,"stem":51},"API, events, and proof","\u002Fdocs\u002Fpolyflight\u002Fapi-events-and-proof","docs\u002F11.polyflight\u002F3.api-events-and-proof",{"title":53,"path":54,"stem":55},"Terms, statements, and settlement","\u002Fdocs\u002Fpolyflight\u002Fterms-statements-and-settlement","docs\u002F11.polyflight\u002F4.terms-statements-and-settlement",{"title":57,"path":58,"stem":59},"Operations, reconciliation, and rollback","\u002Fdocs\u002Fpolyflight\u002Foperations-reconciliation-and-rollback","docs\u002F11.polyflight\u002F5.operations-reconciliation-and-rollback",{"title":61,"path":62,"stem":63,"children":64,"page":21},"Integration Flow","\u002Fdocs\u002Fintegration-flow","docs\u002F2.integration-flow",[65,69,73,77],{"title":66,"path":67,"stem":68},"Architecture","\u002Fdocs\u002Fintegration-flow\u002Farchitecture","docs\u002F2.integration-flow\u002F1.architecture",{"title":70,"path":71,"stem":72},"Launch session model","\u002Fdocs\u002Fintegration-flow\u002Flaunch-session-model","docs\u002F2.integration-flow\u002F2.launch-session-model",{"title":74,"path":75,"stem":76},"Order and wallet saga","\u002Fdocs\u002Fintegration-flow\u002Forder-and-wallet-saga","docs\u002F2.integration-flow\u002F3.order-and-wallet-saga",{"title":78,"path":79,"stem":80},"FX fees and rounding","\u002Fdocs\u002Fintegration-flow\u002Ffx-fees-and-rounding","docs\u002F2.integration-flow\u002F4.fx-fees-and-rounding",{"title":82,"path":83,"stem":84,"children":85,"page":21},"Dashboard","\u002Fdocs\u002Fdashboard","docs\u002F3.dashboard",[86,89,93,97,101,105,109,113,117,121,125,129,133],{"title":10,"path":87,"stem":88},"\u002Fdocs\u002Fdashboard\u002Foverview","docs\u002F3.dashboard\u002F1.overview",{"title":90,"path":91,"stem":92},"Webhook Deliveries","\u002Fdocs\u002Fdashboard\u002Fwebhook-deliveries","docs\u002F3.dashboard\u002F10.webhook-deliveries",{"title":94,"path":95,"stem":96},"Staffs","\u002Fdocs\u002Fdashboard\u002Fstaffs","docs\u002F3.dashboard\u002F11.staffs",{"title":98,"path":99,"stem":100},"Simulator","\u002Fdocs\u002Fdashboard\u002Fsimulator","docs\u002F3.dashboard\u002F12.simulator",{"title":102,"path":103,"stem":104},"API Playground","\u002Fdocs\u002Fdashboard\u002Fapi-playground","docs\u002F3.dashboard\u002F13.api-playground",{"title":106,"path":107,"stem":108},"API keys","\u002Fdocs\u002Fdashboard\u002Fapi-keys","docs\u002F3.dashboard\u002F2.api-keys",{"title":110,"path":111,"stem":112},"Wallet adapter settings","\u002Fdocs\u002Fdashboard\u002Fwallet-adapter-settings","docs\u002F3.dashboard\u002F3.wallet-adapter-settings",{"title":114,"path":115,"stem":116},"Webhook endpoints","\u002Fdocs\u002Fdashboard\u002Fwebhook-endpoints","docs\u002F3.dashboard\u002F4.webhook-endpoints",{"title":118,"path":119,"stem":120},"Markets and visibility","\u002Fdocs\u002Fdashboard\u002Fmarket-visibility","docs\u002F3.dashboard\u002F5.market-visibility",{"title":122,"path":123,"stem":124},"Users","\u002Fdocs\u002Fdashboard\u002Fusers","docs\u002F3.dashboard\u002F6.users",{"title":126,"path":127,"stem":128},"Trades","\u002Fdocs\u002Fdashboard\u002Ftrades","docs\u002F3.dashboard\u002F7.trades",{"title":130,"path":131,"stem":132},"Resolutions","\u002Fdocs\u002Fdashboard\u002Fresolutions","docs\u002F3.dashboard\u002F8.resolutions",{"title":134,"path":135,"stem":136},"Balance Operations","\u002Fdocs\u002Fdashboard\u002Fbalance-operations","docs\u002F3.dashboard\u002F9.balance-operations",{"title":138,"path":139,"stem":140,"children":141,"page":21},"Operator Api","\u002Fdocs\u002Foperator-api","docs\u002F4.operator-api",[142,146,149,153,156,160,163,167,171,175,179,183,186,190,194,198,202,206,209,213,216,219],{"title":143,"path":144,"stem":145},"Authentication","\u002Fdocs\u002Foperator-api\u002Fauthentication","docs\u002F4.operator-api\u002F1.authentication",{"title":114,"path":147,"stem":148},"\u002Fdocs\u002Foperator-api\u002Fwebhook-endpoints","docs\u002F4.operator-api\u002F10.webhook-endpoints",{"title":150,"path":151,"stem":152},"Webhook deliveries","\u002Fdocs\u002Foperator-api\u002Fwebhook-deliveries","docs\u002F4.operator-api\u002F11.webhook-deliveries",{"title":98,"path":154,"stem":155},"\u002Fdocs\u002Foperator-api\u002Fsimulator","docs\u002F4.operator-api\u002F12.simulator",{"title":157,"path":158,"stem":159},"Wallet adapter","\u002Fdocs\u002Foperator-api\u002Fwallet-adapter","docs\u002F4.operator-api\u002F13.wallet-adapter",{"title":94,"path":161,"stem":162},"\u002Fdocs\u002Foperator-api\u002Fstaffs","docs\u002F4.operator-api\u002F14.staffs",{"title":164,"path":165,"stem":166},"Error codes","\u002Fdocs\u002Foperator-api\u002Ferror-codes","docs\u002F4.operator-api\u002F15.error-codes",{"title":168,"path":169,"stem":170},"Redemptions","\u002Fdocs\u002Foperator-api\u002Fredemptions","docs\u002F4.operator-api\u002F16.redemptions",{"title":172,"path":173,"stem":174},"Polyflight overview","\u002Fdocs\u002Foperator-api\u002Fpolyflight","docs\u002F4.operator-api\u002F17.polyflight",{"title":176,"path":177,"stem":178},"Polyflight flights","\u002Fdocs\u002Foperator-api\u002Fpolyflight-flights","docs\u002F4.operator-api\u002F18.polyflight-flights",{"title":180,"path":181,"stem":182},"Polyflight tickets","\u002Fdocs\u002Foperator-api\u002Fpolyflight-tickets","docs\u002F4.operator-api\u002F19.polyflight-tickets",{"title":106,"path":184,"stem":185},"\u002Fdocs\u002Foperator-api\u002Fapi-keys","docs\u002F4.operator-api\u002F2.api-keys",{"title":187,"path":188,"stem":189},"Polyflight balance operations","\u002Fdocs\u002Foperator-api\u002Fpolyflight-balance-operations","docs\u002F4.operator-api\u002F20.polyflight-balance-operations",{"title":191,"path":192,"stem":193},"Polyflight terms","\u002Fdocs\u002Foperator-api\u002Fpolyflight-terms","docs\u002F4.operator-api\u002F21.polyflight-terms",{"title":195,"path":196,"stem":197},"Polyflight settlement reports","\u002Fdocs\u002Foperator-api\u002Fpolyflight-settlement-reports","docs\u002F4.operator-api\u002F22.polyflight-settlement-reports",{"title":199,"path":200,"stem":201},"Session","\u002Fdocs\u002Foperator-api\u002Fsession","docs\u002F4.operator-api\u002F3.session",{"title":203,"path":204,"stem":205},"Launch","\u002Fdocs\u002Foperator-api\u002Flaunch","docs\u002F4.operator-api\u002F4.launch",{"title":122,"path":207,"stem":208},"\u002Fdocs\u002Foperator-api\u002Fusers","docs\u002F4.operator-api\u002F5.users",{"title":210,"path":211,"stem":212},"Markets","\u002Fdocs\u002Foperator-api\u002Fmarkets","docs\u002F4.operator-api\u002F6.markets",{"title":126,"path":214,"stem":215},"\u002Fdocs\u002Foperator-api\u002Ftrades","docs\u002F4.operator-api\u002F7.trades",{"title":130,"path":217,"stem":218},"\u002Fdocs\u002Foperator-api\u002Fresolutions","docs\u002F4.operator-api\u002F8.resolutions",{"title":220,"path":221,"stem":222},"Balance operations","\u002Fdocs\u002Foperator-api\u002Fbalance-operations","docs\u002F4.operator-api\u002F9.balance-operations",{"title":224,"path":225,"stem":226,"children":227,"page":21},"Wallet Adapter","\u002Fdocs\u002Fwallet-adapter","docs\u002F5.wallet-adapter",[228,231,234,238,242,246,250],{"title":10,"path":229,"stem":230},"\u002Fdocs\u002Fwallet-adapter\u002Foverview","docs\u002F5.wallet-adapter\u002F1.overview",{"title":143,"path":232,"stem":233},"\u002Fdocs\u002Fwallet-adapter\u002Fauthentication","docs\u002F5.wallet-adapter\u002F2.authentication",{"title":235,"path":236,"stem":237},"Balance","\u002Fdocs\u002Fwallet-adapter\u002Fbalance","docs\u002F5.wallet-adapter\u002F3.balance",{"title":239,"path":240,"stem":241},"Debit","\u002Fdocs\u002Fwallet-adapter\u002Fdebit","docs\u002F5.wallet-adapter\u002F4.debit",{"title":243,"path":244,"stem":245},"Credit","\u002Fdocs\u002Fwallet-adapter\u002Fcredit","docs\u002F5.wallet-adapter\u002F5.credit",{"title":247,"path":248,"stem":249},"Debit reversal","\u002Fdocs\u002Fwallet-adapter\u002Fdebit-reversal","docs\u002F5.wallet-adapter\u002F6.debit-reversal",{"title":251,"path":252,"stem":253},"Idempotency","\u002Fdocs\u002Fwallet-adapter\u002Fidempotency","docs\u002F5.wallet-adapter\u002F7.idempotency",{"title":255,"path":256,"stem":257,"children":258,"page":21},"Webhooks","\u002Fdocs\u002Fwebhooks","docs\u002F6.webhooks",[259,262,266,270,274,278],{"title":10,"path":260,"stem":261},"\u002Fdocs\u002Fwebhooks\u002Foverview","docs\u002F6.webhooks\u002F1.overview",{"title":263,"path":264,"stem":265},"Signatures","\u002Fdocs\u002Fwebhooks\u002Fsignatures","docs\u002F6.webhooks\u002F2.signatures",{"title":267,"path":268,"stem":269},"Event envelope","\u002Fdocs\u002Fwebhooks\u002Fevent-envelope","docs\u002F6.webhooks\u002F3.event-envelope",{"title":271,"path":272,"stem":273},"Event types","\u002Fdocs\u002Fwebhooks\u002Fevent-types","docs\u002F6.webhooks\u002F4.event-types",{"title":275,"path":276,"stem":277},"Retry and replay","\u002Fdocs\u002Fwebhooks\u002Fretry-and-replay","docs\u002F6.webhooks\u002F5.retry-and-replay",{"title":279,"path":280,"stem":281},"Receiver examples","\u002Fdocs\u002Fwebhooks\u002Freceiver-examples","docs\u002F6.webhooks\u002F6.receiver-examples",{"title":283,"path":284,"stem":285,"children":286,"page":21},"Testing And Staging","\u002Fdocs\u002Ftesting-and-staging","docs\u002F7.testing-and-staging",[287,291,294,298,302],{"title":288,"path":289,"stem":290},"Staging overview","\u002Fdocs\u002Ftesting-and-staging\u002Fstaging-overview","docs\u002F7.testing-and-staging\u002F1.staging-overview",{"title":98,"path":292,"stem":293},"\u002Fdocs\u002Ftesting-and-staging\u002Fsimulator","docs\u002F7.testing-and-staging\u002F2.simulator",{"title":295,"path":296,"stem":297},"Wallet failure drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwallet-failure-drills","docs\u002F7.testing-and-staging\u002F3.wallet-failure-drills",{"title":299,"path":300,"stem":301},"Webhook drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwebhook-drills","docs\u002F7.testing-and-staging\u002F4.webhook-drills",{"title":303,"path":304,"stem":305},"Production cutover rehearsal","\u002Fdocs\u002Ftesting-and-staging\u002Fproduction-cutover-rehearsal","docs\u002F7.testing-and-staging\u002F5.production-cutover-rehearsal",{"title":307,"path":308,"stem":309,"children":310,"page":21},"Production Readiness","\u002Fdocs\u002Fproduction-readiness","docs\u002F8.production-readiness",[311,315,319,323],{"title":312,"path":313,"stem":314},"Checklist","\u002Fdocs\u002Fproduction-readiness\u002Fchecklist","docs\u002F8.production-readiness\u002F1.checklist",{"title":316,"path":317,"stem":318},"Operational runbook","\u002Fdocs\u002Fproduction-readiness\u002Foperational-runbook","docs\u002F8.production-readiness\u002F2.operational-runbook",{"title":320,"path":321,"stem":322},"Security","\u002Fdocs\u002Fproduction-readiness\u002Fsecurity","docs\u002F8.production-readiness\u002F3.security",{"title":324,"path":325,"stem":326},"Rollback","\u002Fdocs\u002Fproduction-readiness\u002Frollback","docs\u002F8.production-readiness\u002F4.rollback",{"title":328,"path":329,"stem":330,"children":331,"page":21},"Reference","\u002Fdocs\u002Freference","docs\u002F9.reference",[332,336,340,344,348],{"title":333,"path":334,"stem":335},"Statuses","\u002Fdocs\u002Freference\u002Fstatuses","docs\u002F9.reference\u002F1.statuses",{"title":337,"path":338,"stem":339},"Scopes","\u002Fdocs\u002Freference\u002Fscopes","docs\u002F9.reference\u002F2.scopes",{"title":341,"path":342,"stem":343},"Units and money","\u002Fdocs\u002Freference\u002Funits-and-money","docs\u002F9.reference\u002F3.units-and-money",{"title":345,"path":346,"stem":347},"Changelog","\u002Fdocs\u002Freference\u002Fchangelog","docs\u002F9.reference\u002F4.changelog",{"title":349,"path":350,"stem":351},"Virtual AMM","\u002Fdocs\u002Freference\u002Fvirtual-amm","docs\u002F9.reference\u002F5.virtual-amm",{"id":353,"title":10,"body":354,"description":1119,"extension":1120,"links":1121,"meta":1122,"navigation":1123,"path":229,"seo":1124,"stem":230,"__hash__":1125},"docs\u002Fdocs\u002F5.wallet-adapter\u002F1.overview.md",{"type":355,"value":356,"toc":1108},"minimark",[357,361,365,370,373,398,402,425,432,443,447,450,598,601,728,733,738,741,951,955,1010,1014,1036,1042,1046,1052,1055,1069,1072,1076,1079,1097,1104],[358,359,10],"h1",{"id":360},"overview",[362,363,364],"p",{},"Wallet adapter is operator-owned server-to-server API used by OpenPoly to read balances and execute wallet mutations.",[366,367,369],"h2",{"id":368},"ownership-split","Ownership split",[362,371,372],{},"OpenPoly owns:",[374,375,376,380,383,386,389,392,395],"ul",{},[377,378,379],"li",{},"Opinion quote, order, and redemption pipeline",[377,381,382],{},"Polyflight native-IDR ticket and payment state",[377,384,385],{},"signed webhook dispatch\nOperator owns:",[377,387,388],{},"wallet balances",[377,390,391],{},"debit and credit execution",[377,393,394],{},"wallet auth secret",[377,396,397],{},"wallet operation observability",[366,399,401],{"id":400},"required-contract-paths","Required contract paths",[374,403,404,410,415,420],{},[377,405,406],{},[407,408,409],"code",{},"GET \u002Fbalance",[377,411,412],{},[407,413,414],{},"POST \u002Fdebit",[377,416,417],{},[407,418,419],{},"POST \u002Fcredit",[377,421,422],{},[407,423,424],{},"POST \u002Fdebit-reversal",[362,426,427,428,431],{},"REST v1 has path-based mutation direction. OpenPoly selects the endpoint from the operation type; the JSON request body does not include a ",[407,429,430],{},"direction"," field.",[362,433,434,435,438,439,442],{},"The shared adapter config also has a ",[407,436,437],{},"credit_reversal_path"," field for compatibility with the internal direction enum, but the current Mini App trade\u002Fredemption processor does not call ",[407,440,441],{},"POST \u002Fcredit-reversal"," in production flows.",[366,444,446],{"id":445},"mutation-request-body","Mutation request body",[362,448,449],{},"All mutation endpoints use the same JSON body shape:",[451,452,457],"pre",{"className":453,"code":454,"language":455,"meta":456,"style":456},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"external_user_id\": \"operator-user-123\",\n  \"amount_minor\": 10000,\n  \"currency_code\": \"IDR\",\n  \"idempotency_key\": \"mini_app_order:1:debit\",\n  \"reason\": \"mini_app_buy_order\",\n  \"metadata\": {}\n}\n","json","",[407,458,459,468,496,514,535,556,577,592],{"__ignoreMap":456},[460,461,464],"span",{"class":462,"line":463},"line",1,[460,465,467],{"class":466},"sMK4o","{\n",[460,469,471,474,478,481,484,487,491,493],{"class":462,"line":470},2,[460,472,473],{"class":466},"  \"",[460,475,477],{"class":476},"spNyl","external_user_id",[460,479,480],{"class":466},"\"",[460,482,483],{"class":466},":",[460,485,486],{"class":466}," \"",[460,488,490],{"class":489},"sfazB","operator-user-123",[460,492,480],{"class":466},[460,494,495],{"class":466},",\n",[460,497,499,501,504,506,508,512],{"class":462,"line":498},3,[460,500,473],{"class":466},[460,502,503],{"class":476},"amount_minor",[460,505,480],{"class":466},[460,507,483],{"class":466},[460,509,511],{"class":510},"sbssI"," 10000",[460,513,495],{"class":466},[460,515,517,519,522,524,526,528,531,533],{"class":462,"line":516},4,[460,518,473],{"class":466},[460,520,521],{"class":476},"currency_code",[460,523,480],{"class":466},[460,525,483],{"class":466},[460,527,486],{"class":466},[460,529,530],{"class":489},"IDR",[460,532,480],{"class":466},[460,534,495],{"class":466},[460,536,538,540,543,545,547,549,552,554],{"class":462,"line":537},5,[460,539,473],{"class":466},[460,541,542],{"class":476},"idempotency_key",[460,544,480],{"class":466},[460,546,483],{"class":466},[460,548,486],{"class":466},[460,550,551],{"class":489},"mini_app_order:1:debit",[460,553,480],{"class":466},[460,555,495],{"class":466},[460,557,559,561,564,566,568,570,573,575],{"class":462,"line":558},6,[460,560,473],{"class":466},[460,562,563],{"class":476},"reason",[460,565,480],{"class":466},[460,567,483],{"class":466},[460,569,486],{"class":466},[460,571,572],{"class":489},"mini_app_buy_order",[460,574,480],{"class":466},[460,576,495],{"class":466},[460,578,580,582,585,587,589],{"class":462,"line":579},7,[460,581,473],{"class":466},[460,583,584],{"class":476},"metadata",[460,586,480],{"class":466},[460,588,483],{"class":466},[460,590,591],{"class":466}," {}\n",[460,593,595],{"class":462,"line":594},8,[460,596,597],{"class":466},"}\n",[362,599,600],{},"OpenPoly sends every field below on every mutation request.",[602,603,604,623],"table",{},[605,606,607],"thead",{},[608,609,610,614,617,620],"tr",{},[611,612,613],"th",{},"Field",[611,615,616],{},"Type",[611,618,619],{},"Requirement",[611,621,622],{},"Notes",[624,625,626,645,661,682,697,712],"tbody",{},[608,627,628,633,636,642],{},[629,630,631],"td",{},[407,632,477],{},[629,634,635],{},"string",[629,637,638],{},[639,640,641],"strong",{},"Required",[629,643,644],{},"Stable operator-side user ID.",[608,646,647,651,654,658],{},[629,648,649],{},[407,650,503],{},[629,652,653],{},"integer",[629,655,656],{},[639,657,641],{},[629,659,660],{},"Amount in the currency's minor unit. Current REST v1 operators use IDR.",[608,662,663,667,669,673],{},[629,664,665],{},[407,666,521],{},[629,668,635],{},[629,670,671],{},[639,672,641],{},[629,674,675,676,678,679,681],{},"Current REST v1 value: ",[407,677,530],{},"; Polyflight requires ",[407,680,530],{},".",[608,683,684,688,690,694],{},[629,685,686],{},[407,687,542],{},[629,689,635],{},[629,691,692],{},[639,693,641],{},[629,695,696],{},"Durable deduplication key.",[608,698,699,703,705,709],{},[629,700,701],{},[407,702,563],{},[629,704,635],{},[629,706,707],{},[639,708,641],{},[629,710,711],{},"Business reason from the Opinion or Polyflight reason catalogue below.",[608,713,714,718,721,725],{},[629,715,716],{},[407,717,584],{},[629,719,720],{},"object",[629,722,723],{},[639,724,641],{},[629,726,727],{},"Always sent; may be empty. Fields vary by flow and must be treated as additive.",[362,729,730,732],{},[407,731,477],{}," is required for debit, credit, and reversal paths. OpenPoly resolves it from the Mini App launch\u002Fsession user and sends it again on each wallet mutation.",[734,735,737],"h3",{"id":736},"required-metadata-by-flow","Required metadata by flow",[362,739,740],{},"Metadata is part of the production contract. Operators must accept additional fields without rejecting the request.",[602,742,743,759],{},[605,744,745],{},[608,746,747,750,753,756],{},[611,748,749],{},"Flow",[611,751,752],{},"Reason",[611,754,755],{},"Required metadata",[611,757,758],{},"Optional additive metadata",[624,760,761,784,805,825,845,870,885,904,921,936],{},[608,762,763,766,770,779],{},[629,764,765],{},"Opinion buy debit",[629,767,768],{},[407,769,572],{},[629,771,772,775,776],{},[407,773,774],{},"orderId",", ",[407,777,778],{},"marketId",[629,780,781],{},[407,782,783],{},"outcome",[608,785,786,789,794,800],{},[629,787,788],{},"Opinion buy compensation",[629,790,791],{},[407,792,793],{},"mini_app_buy_compensation",[629,795,796,775,798],{},[407,797,774],{},[407,799,778],{},[629,801,802],{},[407,803,804],{},"balanceOperationId",[608,806,807,810,815,821],{},[629,808,809],{},"Opinion sell credit",[629,811,812],{},[407,813,814],{},"mini_app_sell_order",[629,816,817,775,819],{},[407,818,774],{},[407,820,778],{},[629,822,823],{},[407,824,783],{},[608,826,827,830,835,842],{},[629,828,829],{},"Opinion redemption credit",[629,831,832],{},[407,833,834],{},"mini_app_redemption",[629,836,837,775,840],{},[407,838,839],{},"redemptionItemId",[407,841,778],{},[629,843,844],{},"None currently",[608,846,847,850,855,867],{},[629,848,849],{},"Polyflight purchase debit",[629,851,852],{},[407,853,854],{},"mini_app_polyflight_purchase",[629,856,857,775,860,775,863,866],{},[407,858,859],{},"product",[407,861,862],{},"operation",[407,864,865],{},"purchaseRequestId",", flight\u002Fchoice\u002Fnative quote\u002Ftiming\u002Feconomy fields",[629,868,869],{},"Additive correlation fields",[608,871,872,875,880,883],{},[629,873,874],{},"Polyflight purchase compensation",[629,876,877],{},[407,878,879],{},"mini_app_polyflight_purchase_compensation",[629,881,882],{},"Purchase fields plus original debit reference",[629,884,869],{},[608,886,887,890,895,902],{},[629,888,889],{},"Polyflight win credit",[629,891,892],{},[407,893,894],{},"mini_app_polyflight_win",[629,896,897,898,901],{},"Common fields plus ",[407,899,900],{},"ticketId"," and original ticket quote",[629,903,869],{},[608,905,906,909,914,919],{},[629,907,908],{},"Polyflight cancelled-ticket refund",[629,910,911],{},[407,912,913],{},"mini_app_polyflight_refund",[629,915,897,916,918],{},[407,917,900],{}," and original debit reference",[629,920,869],{},[608,922,923,930,932,934],{},[629,924,925,926,929],{},"The full-contract adapter test uses ",[407,927,928],{},"mini_app_wallet_adapter_test"," with test-only metadata. It is not a market trade or redemption and is exempt from this production matrix.",[629,931],{},[629,933],{},[629,935],{},[608,937,938,945,947,949],{},[629,939,940,941,944],{},"See ",[942,943,45],"a",{"href":46}," for exact Polyflight keys, amounts, and metadata names. Polyflight purchase and payout amounts are already native IDR and do not use an Opinion FX snapshot.",[629,946],{},[629,948],{},[629,950],{},[366,952,954],{"id":953},"core-rules","Core rules",[374,956,957,960,978,995,998,1001,1004,1007],{},[377,958,959],{},"Every mutation must be idempotent.",[377,961,962,963,966,967,775,970,973,974,977],{},"Direct mutation response ",[407,964,965],{},"status"," is required and must be ",[407,968,969],{},"succeeded",[407,971,972],{},"failed",", or ",[407,975,976],{},"pending",". Other response fields are optional unless an endpoint page says otherwise.",[377,979,980,981,983,984,983,987,990,991,994],{},"A timeout, network failure, ",[407,982,976],{},", HTTP ",[407,985,986],{},"408",[407,988,989],{},"429",", or HTTP ",[407,992,993],{},"5xx"," leaves the primary mutation outcome ambiguous and sends the order to manual review.",[377,996,997],{},"Do not retry an ambiguous primary debit or credit automatically. An operator may already have applied it.",[377,999,1000],{},"Buy compensation may retry with its original idempotency key because the repeated request must return the original effective result.",[377,1002,1003],{},"Unknown wallet state must not be reported as success.",[377,1005,1006],{},"OpenPoly order state and wallet state are not one atomic transaction.",[377,1008,1009],{},"Manual review may be required when remote wallet result is unknown.",[366,1011,1013],{"id":1012},"recommended-headers","Recommended headers",[451,1015,1019],{"className":1016,"code":1017,"language":1018,"meta":456,"style":456},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Authorization: Bearer {opera...ken}\nX-Polynion-Request-Id: req_...\nX-Polynion-Timestamp: 2026-06-18T00:00:00.000Z\n","http",[407,1020,1021,1026,1031],{"__ignoreMap":456},[460,1022,1023],{"class":462,"line":463},[460,1024,1025],{},"Authorization: Bearer {opera...ken}\n",[460,1027,1028],{"class":462,"line":470},[460,1029,1030],{},"X-Polynion-Request-Id: req_...\n",[460,1032,1033],{"class":462,"line":498},[460,1034,1035],{},"X-Polynion-Timestamp: 2026-06-18T00:00:00.000Z\n",[362,1037,1038,1039,681],{},"Optional request signing may also be enabled with ",[407,1040,1041],{},"X-Polynion-Signature",[366,1043,1045],{"id":1044},"dashboard-setup","Dashboard setup",[362,1047,1048,1049,681],{},"Operator admins configure the adapter in ",[639,1050,1051],{},"Operator Dashboard → Integrations → Wallet Adapter",[362,1053,1054],{},"The dashboard stores:",[374,1056,1057,1060,1063,1066],{},[377,1058,1059],{},"base URL;",[377,1061,1062],{},"bearer token;",[377,1064,1065],{},"optional signing secret;",[377,1067,1068],{},"timeout and path overrides.",[362,1070,1071],{},"Bearer and signing secrets are encrypted before storage. After saving, OpenPoly only shows whether a secret is configured; plaintext and encrypted payloads are never returned by the API.",[366,1073,1075],{"id":1074},"validation-tests","Validation tests",[362,1077,1078],{},"The dashboard exposes two validation modes:",[1080,1081,1082,1091],"ol",{},[377,1083,1084,1087,1088,1090],{},[639,1085,1086],{},"Connection test"," — calls only ",[407,1089,409],{}," for a supplied external user ID. It does not mutate wallet state.",[377,1092,1093,1096],{},[639,1094,1095],{},"Full contract test"," — performs real wallet mutations against a dedicated test user and small amount. It validates balance, debit, debit reversal, credit, a second debit, and final balance. The final balance must equal the initial balance.",[362,1098,1099,1100,1103],{},"Full contract tests require explicit confirmation because compensation can fail or become unknown. If a compensation step fails, OpenPoly reports ",[407,1101,1102],{},"requires_manual_review"," so the operator can inspect and reconcile the remote wallet manually.",[1105,1106,1107],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":456,"searchDepth":470,"depth":470,"links":1109},[1110,1111,1112,1115,1116,1117,1118],{"id":368,"depth":470,"text":369},{"id":400,"depth":470,"text":401},{"id":445,"depth":470,"text":446,"children":1113},[1114],{"id":736,"depth":498,"text":737},{"id":953,"depth":470,"text":954},{"id":1012,"depth":470,"text":1013},{"id":1044,"depth":470,"text":1045},{"id":1074,"depth":470,"text":1075},"Overview of the operator wallet adapter contract.","md",null,{},true,{"title":10,"description":1119},"GZeeLZrlMgmAgDUTuTkvy1aJKerF_l35b2MRkUxALL8",[1127,1129],{"title":220,"path":221,"stem":222,"description":1128,"children":-1},"Inspect operator wallet mutation records.",{"title":143,"path":232,"stem":233,"description":1130,"children":-1},"Authentication and optional signing for wallet adapter requests.",1789570128203]