[{"data":1,"prerenderedAt":981},["ShallowReactive",2],{"navigation_docs":3,"-docs-polyflight-overview-and-launch":356,"-docs-polyflight-overview-and-launch-surround":976},[4,22,35,64,85,141,227,258,286,310,331],{"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,60],{"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},"Player experience","\u002Fdocs\u002Fpolyflight\u002Fplayer-experience","docs\u002F11.polyflight\u002F6.player-experience",{"title":65,"path":66,"stem":67,"children":68,"page":21},"Integration Flow","\u002Fdocs\u002Fintegration-flow","docs\u002F2.integration-flow",[69,73,77,81],{"title":70,"path":71,"stem":72},"Architecture","\u002Fdocs\u002Fintegration-flow\u002Farchitecture","docs\u002F2.integration-flow\u002F1.architecture",{"title":74,"path":75,"stem":76},"Launch session model","\u002Fdocs\u002Fintegration-flow\u002Flaunch-session-model","docs\u002F2.integration-flow\u002F2.launch-session-model",{"title":78,"path":79,"stem":80},"Order and wallet saga","\u002Fdocs\u002Fintegration-flow\u002Forder-and-wallet-saga","docs\u002F2.integration-flow\u002F3.order-and-wallet-saga",{"title":82,"path":83,"stem":84},"FX fees and rounding","\u002Fdocs\u002Fintegration-flow\u002Ffx-fees-and-rounding","docs\u002F2.integration-flow\u002F4.fx-fees-and-rounding",{"title":86,"path":87,"stem":88,"children":89,"page":21},"Dashboard","\u002Fdocs\u002Fdashboard","docs\u002F3.dashboard",[90,93,97,101,105,109,113,117,121,125,129,133,137],{"title":10,"path":91,"stem":92},"\u002Fdocs\u002Fdashboard\u002Foverview","docs\u002F3.dashboard\u002F1.overview",{"title":94,"path":95,"stem":96},"Webhook Deliveries","\u002Fdocs\u002Fdashboard\u002Fwebhook-deliveries","docs\u002F3.dashboard\u002F10.webhook-deliveries",{"title":98,"path":99,"stem":100},"Staffs","\u002Fdocs\u002Fdashboard\u002Fstaffs","docs\u002F3.dashboard\u002F11.staffs",{"title":102,"path":103,"stem":104},"Simulator","\u002Fdocs\u002Fdashboard\u002Fsimulator","docs\u002F3.dashboard\u002F12.simulator",{"title":106,"path":107,"stem":108},"API Playground","\u002Fdocs\u002Fdashboard\u002Fapi-playground","docs\u002F3.dashboard\u002F13.api-playground",{"title":110,"path":111,"stem":112},"API keys","\u002Fdocs\u002Fdashboard\u002Fapi-keys","docs\u002F3.dashboard\u002F2.api-keys",{"title":114,"path":115,"stem":116},"Wallet adapter settings","\u002Fdocs\u002Fdashboard\u002Fwallet-adapter-settings","docs\u002F3.dashboard\u002F3.wallet-adapter-settings",{"title":118,"path":119,"stem":120},"Webhook endpoints","\u002Fdocs\u002Fdashboard\u002Fwebhook-endpoints","docs\u002F3.dashboard\u002F4.webhook-endpoints",{"title":122,"path":123,"stem":124},"Markets and visibility","\u002Fdocs\u002Fdashboard\u002Fmarket-visibility","docs\u002F3.dashboard\u002F5.market-visibility",{"title":126,"path":127,"stem":128},"Users","\u002Fdocs\u002Fdashboard\u002Fusers","docs\u002F3.dashboard\u002F6.users",{"title":130,"path":131,"stem":132},"Trades","\u002Fdocs\u002Fdashboard\u002Ftrades","docs\u002F3.dashboard\u002F7.trades",{"title":134,"path":135,"stem":136},"Resolutions","\u002Fdocs\u002Fdashboard\u002Fresolutions","docs\u002F3.dashboard\u002F8.resolutions",{"title":138,"path":139,"stem":140},"Balance Operations","\u002Fdocs\u002Fdashboard\u002Fbalance-operations","docs\u002F3.dashboard\u002F9.balance-operations",{"title":142,"path":143,"stem":144,"children":145,"page":21},"Operator Api","\u002Fdocs\u002Foperator-api","docs\u002F4.operator-api",[146,150,153,157,160,164,167,171,175,179,183,187,190,194,198,202,206,210,213,217,220,223],{"title":147,"path":148,"stem":149},"Authentication","\u002Fdocs\u002Foperator-api\u002Fauthentication","docs\u002F4.operator-api\u002F1.authentication",{"title":118,"path":151,"stem":152},"\u002Fdocs\u002Foperator-api\u002Fwebhook-endpoints","docs\u002F4.operator-api\u002F10.webhook-endpoints",{"title":154,"path":155,"stem":156},"Webhook deliveries","\u002Fdocs\u002Foperator-api\u002Fwebhook-deliveries","docs\u002F4.operator-api\u002F11.webhook-deliveries",{"title":102,"path":158,"stem":159},"\u002Fdocs\u002Foperator-api\u002Fsimulator","docs\u002F4.operator-api\u002F12.simulator",{"title":161,"path":162,"stem":163},"Wallet adapter","\u002Fdocs\u002Foperator-api\u002Fwallet-adapter","docs\u002F4.operator-api\u002F13.wallet-adapter",{"title":98,"path":165,"stem":166},"\u002Fdocs\u002Foperator-api\u002Fstaffs","docs\u002F4.operator-api\u002F14.staffs",{"title":168,"path":169,"stem":170},"Error codes","\u002Fdocs\u002Foperator-api\u002Ferror-codes","docs\u002F4.operator-api\u002F15.error-codes",{"title":172,"path":173,"stem":174},"Redemptions","\u002Fdocs\u002Foperator-api\u002Fredemptions","docs\u002F4.operator-api\u002F16.redemptions",{"title":176,"path":177,"stem":178},"Polyflight overview","\u002Fdocs\u002Foperator-api\u002Fpolyflight","docs\u002F4.operator-api\u002F17.polyflight",{"title":180,"path":181,"stem":182},"Polyflight flights","\u002Fdocs\u002Foperator-api\u002Fpolyflight-flights","docs\u002F4.operator-api\u002F18.polyflight-flights",{"title":184,"path":185,"stem":186},"Polyflight tickets","\u002Fdocs\u002Foperator-api\u002Fpolyflight-tickets","docs\u002F4.operator-api\u002F19.polyflight-tickets",{"title":110,"path":188,"stem":189},"\u002Fdocs\u002Foperator-api\u002Fapi-keys","docs\u002F4.operator-api\u002F2.api-keys",{"title":191,"path":192,"stem":193},"Polyflight balance operations","\u002Fdocs\u002Foperator-api\u002Fpolyflight-balance-operations","docs\u002F4.operator-api\u002F20.polyflight-balance-operations",{"title":195,"path":196,"stem":197},"Polyflight terms","\u002Fdocs\u002Foperator-api\u002Fpolyflight-terms","docs\u002F4.operator-api\u002F21.polyflight-terms",{"title":199,"path":200,"stem":201},"Polyflight settlement reports","\u002Fdocs\u002Foperator-api\u002Fpolyflight-settlement-reports","docs\u002F4.operator-api\u002F22.polyflight-settlement-reports",{"title":203,"path":204,"stem":205},"Session","\u002Fdocs\u002Foperator-api\u002Fsession","docs\u002F4.operator-api\u002F3.session",{"title":207,"path":208,"stem":209},"Launch","\u002Fdocs\u002Foperator-api\u002Flaunch","docs\u002F4.operator-api\u002F4.launch",{"title":126,"path":211,"stem":212},"\u002Fdocs\u002Foperator-api\u002Fusers","docs\u002F4.operator-api\u002F5.users",{"title":214,"path":215,"stem":216},"Markets","\u002Fdocs\u002Foperator-api\u002Fmarkets","docs\u002F4.operator-api\u002F6.markets",{"title":130,"path":218,"stem":219},"\u002Fdocs\u002Foperator-api\u002Ftrades","docs\u002F4.operator-api\u002F7.trades",{"title":134,"path":221,"stem":222},"\u002Fdocs\u002Foperator-api\u002Fresolutions","docs\u002F4.operator-api\u002F8.resolutions",{"title":224,"path":225,"stem":226},"Balance operations","\u002Fdocs\u002Foperator-api\u002Fbalance-operations","docs\u002F4.operator-api\u002F9.balance-operations",{"title":228,"path":229,"stem":230,"children":231,"page":21},"Wallet Adapter","\u002Fdocs\u002Fwallet-adapter","docs\u002F5.wallet-adapter",[232,235,238,242,246,250,254],{"title":10,"path":233,"stem":234},"\u002Fdocs\u002Fwallet-adapter\u002Foverview","docs\u002F5.wallet-adapter\u002F1.overview",{"title":147,"path":236,"stem":237},"\u002Fdocs\u002Fwallet-adapter\u002Fauthentication","docs\u002F5.wallet-adapter\u002F2.authentication",{"title":239,"path":240,"stem":241},"Balance","\u002Fdocs\u002Fwallet-adapter\u002Fbalance","docs\u002F5.wallet-adapter\u002F3.balance",{"title":243,"path":244,"stem":245},"Debit","\u002Fdocs\u002Fwallet-adapter\u002Fdebit","docs\u002F5.wallet-adapter\u002F4.debit",{"title":247,"path":248,"stem":249},"Credit","\u002Fdocs\u002Fwallet-adapter\u002Fcredit","docs\u002F5.wallet-adapter\u002F5.credit",{"title":251,"path":252,"stem":253},"Debit reversal","\u002Fdocs\u002Fwallet-adapter\u002Fdebit-reversal","docs\u002F5.wallet-adapter\u002F6.debit-reversal",{"title":255,"path":256,"stem":257},"Idempotency","\u002Fdocs\u002Fwallet-adapter\u002Fidempotency","docs\u002F5.wallet-adapter\u002F7.idempotency",{"title":259,"path":260,"stem":261,"children":262,"page":21},"Webhooks","\u002Fdocs\u002Fwebhooks","docs\u002F6.webhooks",[263,266,270,274,278,282],{"title":10,"path":264,"stem":265},"\u002Fdocs\u002Fwebhooks\u002Foverview","docs\u002F6.webhooks\u002F1.overview",{"title":267,"path":268,"stem":269},"Signatures","\u002Fdocs\u002Fwebhooks\u002Fsignatures","docs\u002F6.webhooks\u002F2.signatures",{"title":271,"path":272,"stem":273},"Event envelope","\u002Fdocs\u002Fwebhooks\u002Fevent-envelope","docs\u002F6.webhooks\u002F3.event-envelope",{"title":275,"path":276,"stem":277},"Event types","\u002Fdocs\u002Fwebhooks\u002Fevent-types","docs\u002F6.webhooks\u002F4.event-types",{"title":279,"path":280,"stem":281},"Retry and replay","\u002Fdocs\u002Fwebhooks\u002Fretry-and-replay","docs\u002F6.webhooks\u002F5.retry-and-replay",{"title":283,"path":284,"stem":285},"Receiver examples","\u002Fdocs\u002Fwebhooks\u002Freceiver-examples","docs\u002F6.webhooks\u002F6.receiver-examples",{"title":287,"path":288,"stem":289,"children":290,"page":21},"Testing And Staging","\u002Fdocs\u002Ftesting-and-staging","docs\u002F7.testing-and-staging",[291,295,298,302,306],{"title":292,"path":293,"stem":294},"Staging overview","\u002Fdocs\u002Ftesting-and-staging\u002Fstaging-overview","docs\u002F7.testing-and-staging\u002F1.staging-overview",{"title":102,"path":296,"stem":297},"\u002Fdocs\u002Ftesting-and-staging\u002Fsimulator","docs\u002F7.testing-and-staging\u002F2.simulator",{"title":299,"path":300,"stem":301},"Wallet failure drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwallet-failure-drills","docs\u002F7.testing-and-staging\u002F3.wallet-failure-drills",{"title":303,"path":304,"stem":305},"Webhook drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwebhook-drills","docs\u002F7.testing-and-staging\u002F4.webhook-drills",{"title":307,"path":308,"stem":309},"Production cutover rehearsal","\u002Fdocs\u002Ftesting-and-staging\u002Fproduction-cutover-rehearsal","docs\u002F7.testing-and-staging\u002F5.production-cutover-rehearsal",{"title":311,"path":312,"stem":313,"children":314,"page":21},"Production Readiness","\u002Fdocs\u002Fproduction-readiness","docs\u002F8.production-readiness",[315,319,323,327],{"title":316,"path":317,"stem":318},"Checklist","\u002Fdocs\u002Fproduction-readiness\u002Fchecklist","docs\u002F8.production-readiness\u002F1.checklist",{"title":320,"path":321,"stem":322},"Operational runbook","\u002Fdocs\u002Fproduction-readiness\u002Foperational-runbook","docs\u002F8.production-readiness\u002F2.operational-runbook",{"title":324,"path":325,"stem":326},"Security","\u002Fdocs\u002Fproduction-readiness\u002Fsecurity","docs\u002F8.production-readiness\u002F3.security",{"title":328,"path":329,"stem":330},"Rollback","\u002Fdocs\u002Fproduction-readiness\u002Frollback","docs\u002F8.production-readiness\u002F4.rollback",{"title":332,"path":333,"stem":334,"children":335,"page":21},"Reference","\u002Fdocs\u002Freference","docs\u002F9.reference",[336,340,344,348,352],{"title":337,"path":338,"stem":339},"Statuses","\u002Fdocs\u002Freference\u002Fstatuses","docs\u002F9.reference\u002F1.statuses",{"title":341,"path":342,"stem":343},"Scopes","\u002Fdocs\u002Freference\u002Fscopes","docs\u002F9.reference\u002F2.scopes",{"title":345,"path":346,"stem":347},"Units and money","\u002Fdocs\u002Freference\u002Funits-and-money","docs\u002F9.reference\u002F3.units-and-money",{"title":349,"path":350,"stem":351},"Changelog","\u002Fdocs\u002Freference\u002Fchangelog","docs\u002F9.reference\u002F4.changelog",{"title":353,"path":354,"stem":355},"Virtual AMM","\u002Fdocs\u002Freference\u002Fvirtual-amm","docs\u002F9.reference\u002F5.virtual-amm",{"id":357,"title":41,"body":358,"description":969,"extension":970,"links":971,"meta":972,"navigation":973,"path":42,"seo":974,"stem":43,"__hash__":975},"docs\u002Fdocs\u002F11.polyflight\u002F1.overview-and-launch.md",{"type":359,"value":360,"toc":961},"minimark",[361,365,374,377,384,389,392,492,495,499,502,522,525,529,532,548,554,560,684,700,715,727,756,760,763,788,798,802,874,877,885,888,903,907,954,957],[362,363,41],"h1",{"id":364},"polyflight-overview-and-launch",[366,367,368,369,373],"p",{},"Polyflight is a separate product inside the existing OpenPoly Mini App platform. It reuses the same operator identity, launch\u002Fsession security, wallet adapter, webhook delivery, and dashboard. It does ",[370,371,372],"strong",{},"not"," use Opinion markets, shares, order pricing, or settlement formulas.",[366,375,376],{},"All participants join the same global flights. First-party Polynion users fund tickets with Credits; enabled Mini App users fund tickets directly in IDR through their operator wallet. A flight has one shared board, lock, result, and public proof.",[366,378,379,380,383],{},"For the player screens and a worked ticket example, see ",[381,382,61],"a",{"href":62},".",[385,386,388],"h2",{"id":387},"adding-polyflight-to-an-existing-opinion-integration","Adding Polyflight to an existing Opinion integration",[366,390,391],{},"Keep your existing launch endpoint, operator user IDs, Wallet Adapter URL and credentials, and signed webhook receiver. Add only the product-specific handling:",[393,394,395,408],"table",{},[396,397,398],"thead",{},[399,400,401,405],"tr",{},[402,403,404],"th",{},"Area",[402,406,407],{},"What to add",[409,410,411,420,436,452,467,480],"tbody",{},[399,412,413,417],{},[414,415,416],"td",{},"Onboarding",[414,418,419],{},"Ask Polynion to enable Polyflight for your IDR operator and confirm the settlement timezone and terms.",[399,421,422,424],{},[414,423,207],{},[414,425,426,427,431,432,435],{},"Send ",[428,429,430],"code",{},"product: \"polyflight\""," from your backend. Omitted ",[428,433,434],{},"product"," still launches Opinion.",[399,437,438,441],{},[414,439,440],{},"Wallet",[414,442,443,444,447,448,451],{},"Accept the five ",[381,445,446],{"href":46},"Polyflight reasons and native metadata"," on the existing debit, credit, and debit-reversal paths, including exactly zero ",[428,449,450],{},"\u002Fcredit"," for loss acknowledgement.",[399,453,454,456],{},[414,455,259],{},[414,457,458,459,463,464,383],{},"Subscribe to the eight ",[381,460,462],{"href":461},"\u002Fdocs\u002Fpolyflight\u002Fapi-events-and-proof#webhook-catalogue","Polyflight event types","; continue deduplicating by ",[428,465,466],{},"event_id",[399,468,469,472],{},[414,470,471],{},"Staff and API keys",[414,473,474,475,479],{},"Assign the required ",[381,476,478],{"href":477},"\u002Fdocs\u002Fpolyflight\u002Fapi-events-and-proof#scopes","Polyflight read scopes",". Existing restricted access is not automatically expanded.",[399,481,482,485],{},[414,483,484],{},"Reconciliation",[414,486,487,488,491],{},"Keep native-IDR tickets, liabilities, and ",[381,489,490],{"href":54},"Polyflight statements"," separate from Opinion reporting.",[366,493,494],{},"Do not create a second player balance, convert the stake to Credits, or apply Opinion trading fees to a Polyflight purchase.",[385,496,498],{"id":497},"enablement-boundary","Enablement boundary",[366,500,501],{},"Polyflight must be enabled for the operator before it can be launched. Enablement records:",[503,504,505,513,516,519],"ul",{},[506,507,508,509,512],"li",{},"native currency ",[428,510,511],{},"IDR",";",[506,514,515],{},"a fixed Polyflight settlement timezone;",[506,517,518],{},"the initial fee-share and position-share terms;",[506,520,521],{},"the enabling administrator, reason, and time.",[366,523,524],{},"Only Polynion administrators can enable the product or schedule commercial-term changes. Operator staff and API keys have read-only access to terms and their history.",[385,526,528],{"id":527},"launch-request","Launch request",[366,530,531],{},"Use the existing endpoint:",[533,534,539],"pre",{"className":535,"code":536,"language":537,"meta":538,"style":538},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","POST \u002Fapi\u002Foperator\u002Flaunch\n","http","",[428,540,541],{"__ignoreMap":538},[542,543,546],"span",{"class":544,"line":545},"line",1,[542,547,536],{},[366,549,550,551,383],{},"Required scope: ",[428,552,553],{},"launch:write",[366,555,556,557,559],{},"Select Polyflight with the additive ",[428,558,434],{}," field:",[533,561,565],{"className":562,"code":563,"language":564,"meta":538,"style":538},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"external_user_id\": \"operator-user-123\",\n  \"display_name\": \"Rina\",\n  \"locale\": \"id\",\n  \"product\": \"polyflight\",\n  \"metadata\": {}\n}\n","json",[428,566,567,573,601,622,643,663,678],{"__ignoreMap":538},[542,568,569],{"class":544,"line":545},[542,570,572],{"class":571},"sMK4o","{\n",[542,574,576,579,583,586,589,592,596,598],{"class":544,"line":575},2,[542,577,578],{"class":571},"  \"",[542,580,582],{"class":581},"spNyl","external_user_id",[542,584,585],{"class":571},"\"",[542,587,588],{"class":571},":",[542,590,591],{"class":571}," \"",[542,593,595],{"class":594},"sfazB","operator-user-123",[542,597,585],{"class":571},[542,599,600],{"class":571},",\n",[542,602,604,606,609,611,613,615,618,620],{"class":544,"line":603},3,[542,605,578],{"class":571},[542,607,608],{"class":581},"display_name",[542,610,585],{"class":571},[542,612,588],{"class":571},[542,614,591],{"class":571},[542,616,617],{"class":594},"Rina",[542,619,585],{"class":571},[542,621,600],{"class":571},[542,623,625,627,630,632,634,636,639,641],{"class":544,"line":624},4,[542,626,578],{"class":571},[542,628,629],{"class":581},"locale",[542,631,585],{"class":571},[542,633,588],{"class":571},[542,635,591],{"class":571},[542,637,638],{"class":594},"id",[542,640,585],{"class":571},[542,642,600],{"class":571},[542,644,646,648,650,652,654,656,659,661],{"class":544,"line":645},5,[542,647,578],{"class":571},[542,649,434],{"class":581},[542,651,585],{"class":571},[542,653,588],{"class":571},[542,655,591],{"class":571},[542,657,658],{"class":594},"polyflight",[542,660,585],{"class":571},[542,662,600],{"class":571},[542,664,666,668,671,673,675],{"class":544,"line":665},6,[542,667,578],{"class":571},[542,669,670],{"class":581},"metadata",[542,672,585],{"class":571},[542,674,588],{"class":571},[542,676,677],{"class":571}," {}\n",[542,679,681],{"class":544,"line":680},7,[542,682,683],{"class":571},"}\n",[366,685,686,687,690,691,693,694,696,697,699],{},"Allowed values are ",[428,688,689],{},"opinion"," and ",[428,692,658],{},". Omitting ",[428,695,434],{}," preserves the existing ",[428,698,689],{}," default. A Polyflight launch is rejected when the product is not enabled for the authenticated operator; it never silently falls back to Opinion.",[366,701,702,703,706,707,710,711,714],{},"The response remains the existing launch response with a short-lived, single-use ",[428,704,705],{},"launch_url",", ",[428,708,709],{},"expires_at",", and the linked ",[428,712,713],{},"operator_user",". The launch token is redeemed by the assigned Mini App host and creates the same host-bound, CSRF-protected session used by Opinion.",[366,716,717,718,721,722,726],{},"The URL first opens ",[428,719,720],{},"\u002Flaunch?token=...&redirect=%2Fpolyflight","; it does not bypass token redemption. Pass it to the player unchanged. See ",[381,723,725],{"href":724},"\u002Fdocs\u002Foperator-api\u002Flaunch#backend-request-example","Launch API"," for a backend request example.",[366,728,729,730,732,733,736,737,740,741,744,745,748,749,752,753,755],{},"Product-aware launch and redeem\u002Fbootstrap responses expose validated ",[428,731,434],{},", operator ",[428,734,735],{},"enabled_products",", and server-selected ",[428,738,739],{},"redirect_path",". Polyflight is always ",[428,742,743],{},"\u002Fpolyflight",". Opinion defaults to ",[428,746,747],{},"\u002F","; only server-generated legacy portfolio Trade links may preserve ",[428,750,751],{},"\u002Fmarkets\u002F{encoded-slug}",". Missing, invalid, or absolute redirect metadata falls back to ",[428,754,747],{},". Follow the returned path and never derive a destination from caller-controlled metadata.",[385,757,759],{"id":758},"product-switching","Product switching",[366,761,762],{},"An authenticated Mini App session may switch between enabled products without a new operator login. Product-specific routes keep wallet and ticket state separate:",[503,764,765,768,785],{},[506,766,767],{},"Opinion remains the default experience and keeps its existing behavior.",[506,769,770,771,773,774,777,778,781,782,383],{},"Polyflight uses ",[428,772,743],{}," for the live board and ticket panel, ",[428,775,776],{},"\u002Fpolyflight\u002F{flightCode}"," for details, ",[428,779,780],{},"\u002Fpolyflight\u002Fhistory",", and ",[428,783,784],{},"\u002Fpolyflight\u002Fblack-box\u002F{flightCode}",[506,786,787],{},"A Polyflight ticket never creates an Opinion order or market position.",[366,789,790,791,794,795,797],{},"The interface uses the saved locale cookie first, then the operator's ",[428,792,793],{},"default_locale",", then the Mini App's runtime language (English by default). The launch request's ",[428,796,629],{}," is stored as user metadata; it does not override the interface's saved-language precedence.",[385,799,801],{"id":800},"native-idr-ticket-contract","Native-IDR ticket contract",[393,803,804,815],{},[396,805,806],{},[399,807,808,811],{},[402,809,810],{},"Rule",[402,812,814],{"align":813},"right","Value",[409,816,817,827,835,842,850,858,866],{},[399,818,819,822],{},[414,820,821],{},"Currency",[414,823,824,826],{"align":813},[428,825,511],{}," only",[399,828,829,832],{},[414,830,831],{},"Minimum stake",[414,833,834],{"align":813},"1,000 IDR",[399,836,837,840],{},[414,838,839],{},"Stake step",[414,841,834],{"align":813},[399,843,844,847],{},[414,845,846],{},"Technical maximum per ticket",[414,848,849],{"align":813},"565,127,000 IDR",[399,851,852,855],{},[414,853,854],{},"Ticket fee",[414,856,857],{"align":813},"500 BPS (5%) included in the stake",[399,859,860,863],{},[414,861,862],{},"Winning payout",[414,864,865],{"align":813},"4 × net stake",[399,867,868,871],{},[414,869,870],{},"Cancelled-flight refund",[414,872,873],{"align":813},"Full original debit, including fee",[366,875,876],{},"For stake $S$:",[533,878,883],{"className":879,"code":881,"language":882,"meta":538},[880],"language-text","fee = 5% × S\nnet stake = S - fee\nwinning payout = 4 × net stake\n","text",[428,884,881],{"__ignoreMap":538},[366,886,887],{},"A 10,000 IDR ticket therefore has a 500 IDR fee, 9,500 IDR net stake, and 38,000 IDR potential payout. The potential payout is the total winning credit, not 38,000 plus return of stake.",[366,889,890,891,894,895,898,899,383],{},"No purchase or payout conversion occurs. Polyflight does not apply the Opinion ",[428,892,893],{},"fx_fee_bps",", buy\u002Fsell premiums, or ",[428,896,897],{},"operator_fee_bps"," to the user's ticket. The separately frozen Indodax rate is used only to compare IDR and Credits activity inside the shared flight; see ",[381,900,902],{"href":901},"\u002Fdocs\u002Fpolyflight\u002Fapi-events-and-proof#comparison-only-fx","Mixed-money proof and comparison",[385,904,906],{"id":905},"operator-launch-checklist","Operator launch checklist",[908,909,910,916,919,922,931,944,951],"ol",{},[506,911,912,913,383],{},"Confirm Polynion has enabled Polyflight and the current terms are visible under ",[370,914,915],{},"Polyflight → Terms",[506,917,918],{},"Assign only the required read scopes to reporting integrations.",[506,920,921],{},"Confirm the existing wallet adapter accepts all Polyflight reasons and additive metadata.",[506,923,924,925,928,929,383],{},"Confirm the webhook receiver accepts all ",[428,926,927],{},"mini_app.polyflight.*"," events and deduplicates by ",[428,930,466],{},[506,932,933,934,937,938,940,941,943],{},"In staging, use ",[370,935,936],{},"Simulator → Users"," to create or select a dedicated simulator user, then ",[370,939,102],{}," to launch ",[428,942,658],{}," through the real launch URL.",[506,945,946,947,950],{},"Do not change the operator-wide ",[428,948,949],{},"rest_v1"," adapter to simulator mode. Simulation is user-scoped.",[506,952,953],{},"Treat simulator acceptance and real external-wallet certification as separate evidence.",[366,955,956],{},"Production enablement, production wallet activity, and production deployment require separate explicit authorization. A successful staging launch is not production approval.",[958,959,960],"style",{},"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);}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}",{"title":538,"searchDepth":575,"depth":575,"links":962},[963,964,965,966,967,968],{"id":387,"depth":575,"text":388},{"id":497,"depth":575,"text":498},{"id":527,"depth":575,"text":528},{"id":758,"depth":575,"text":759},{"id":800,"depth":575,"text":801},{"id":905,"depth":575,"text":906},"Enable and launch the native-IDR Polyflight product without changing the existing Opinion default.","md",null,{},true,{"title":41,"description":969},"6UGOPW0YE994xsilmFXwQr_K4t1WgF5Wiw_YgAEyX1s",[977,979],{"title":32,"path":33,"stem":34,"description":978,"children":-1},"What to collect before escalating an integration issue.",{"title":45,"path":46,"stem":47,"description":980,"children":-1},"Polyflight debit, payout, zero-amount loss delivery, refund, and compensation requests on the existing REST v1 adapter.",1791200237289]