[{"data":1,"prerenderedAt":514},["ShallowReactive",2],{"navigation_docs":3,"-docs-integration-flow-fx-fees-and-rounding":268,"-docs-integration-flow-fx-fees-and-rounding-surround":509},[4,22,35,56,80,135,170,198,222,243],{"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},"Integration Flow","\u002Fdocs\u002Fintegration-flow","docs\u002F2.integration-flow",[40,44,48,52],{"title":41,"path":42,"stem":43},"Architecture","\u002Fdocs\u002Fintegration-flow\u002Farchitecture","docs\u002F2.integration-flow\u002F1.architecture",{"title":45,"path":46,"stem":47},"Launch session model","\u002Fdocs\u002Fintegration-flow\u002Flaunch-session-model","docs\u002F2.integration-flow\u002F2.launch-session-model",{"title":49,"path":50,"stem":51},"Order and wallet saga","\u002Fdocs\u002Fintegration-flow\u002Forder-and-wallet-saga","docs\u002F2.integration-flow\u002F3.order-and-wallet-saga",{"title":53,"path":54,"stem":55},"FX fees and rounding","\u002Fdocs\u002Fintegration-flow\u002Ffx-fees-and-rounding","docs\u002F2.integration-flow\u002F4.fx-fees-and-rounding",{"title":57,"path":58,"stem":59,"children":60,"page":21},"Dashboard","\u002Fdocs\u002Fdashboard","docs\u002F3.dashboard",[61,64,68,72,76],{"title":10,"path":62,"stem":63},"\u002Fdocs\u002Fdashboard\u002Foverview","docs\u002F3.dashboard\u002F1.overview",{"title":65,"path":66,"stem":67},"API keys","\u002Fdocs\u002Fdashboard\u002Fapi-keys","docs\u002F3.dashboard\u002F2.api-keys",{"title":69,"path":70,"stem":71},"Wallet adapter settings","\u002Fdocs\u002Fdashboard\u002Fwallet-adapter-settings","docs\u002F3.dashboard\u002F3.wallet-adapter-settings",{"title":73,"path":74,"stem":75},"Webhook endpoints","\u002Fdocs\u002Fdashboard\u002Fwebhook-endpoints","docs\u002F3.dashboard\u002F4.webhook-endpoints",{"title":77,"path":78,"stem":79},"Market visibility","\u002Fdocs\u002Fdashboard\u002Fmarket-visibility","docs\u002F3.dashboard\u002F5.market-visibility",{"title":81,"path":82,"stem":83,"children":84,"page":21},"Operator Api","\u002Fdocs\u002Foperator-api","docs\u002F4.operator-api",[85,89,92,96,100,104,107,111,115,119,123,127,131],{"title":86,"path":87,"stem":88},"Authentication","\u002Fdocs\u002Foperator-api\u002Fauthentication","docs\u002F4.operator-api\u002F1.authentication",{"title":73,"path":90,"stem":91},"\u002Fdocs\u002Foperator-api\u002Fwebhook-endpoints","docs\u002F4.operator-api\u002F10.webhook-endpoints",{"title":93,"path":94,"stem":95},"Webhook deliveries","\u002Fdocs\u002Foperator-api\u002Fwebhook-deliveries","docs\u002F4.operator-api\u002F11.webhook-deliveries",{"title":97,"path":98,"stem":99},"Simulator","\u002Fdocs\u002Foperator-api\u002Fsimulator","docs\u002F4.operator-api\u002F12.simulator",{"title":101,"path":102,"stem":103},"Error codes","\u002Fdocs\u002Foperator-api\u002Ferror-codes","docs\u002F4.operator-api\u002F13.error-codes",{"title":65,"path":105,"stem":106},"\u002Fdocs\u002Foperator-api\u002Fapi-keys","docs\u002F4.operator-api\u002F2.api-keys",{"title":108,"path":109,"stem":110},"Session","\u002Fdocs\u002Foperator-api\u002Fsession","docs\u002F4.operator-api\u002F3.session",{"title":112,"path":113,"stem":114},"Launch","\u002Fdocs\u002Foperator-api\u002Flaunch","docs\u002F4.operator-api\u002F4.launch",{"title":116,"path":117,"stem":118},"Users","\u002Fdocs\u002Foperator-api\u002Fusers","docs\u002F4.operator-api\u002F5.users",{"title":120,"path":121,"stem":122},"Markets","\u002Fdocs\u002Foperator-api\u002Fmarkets","docs\u002F4.operator-api\u002F6.markets",{"title":124,"path":125,"stem":126},"Trades","\u002Fdocs\u002Foperator-api\u002Ftrades","docs\u002F4.operator-api\u002F7.trades",{"title":128,"path":129,"stem":130},"Redemptions","\u002Fdocs\u002Foperator-api\u002Fredemptions","docs\u002F4.operator-api\u002F8.redemptions",{"title":132,"path":133,"stem":134},"Balance operations","\u002Fdocs\u002Foperator-api\u002Fbalance-operations","docs\u002F4.operator-api\u002F9.balance-operations",{"title":136,"path":137,"stem":138,"children":139,"page":21},"Wallet Adapter","\u002Fdocs\u002Fwallet-adapter","docs\u002F5.wallet-adapter",[140,143,146,150,154,158,162,166],{"title":10,"path":141,"stem":142},"\u002Fdocs\u002Fwallet-adapter\u002Foverview","docs\u002F5.wallet-adapter\u002F1.overview",{"title":86,"path":144,"stem":145},"\u002Fdocs\u002Fwallet-adapter\u002Fauthentication","docs\u002F5.wallet-adapter\u002F2.authentication",{"title":147,"path":148,"stem":149},"Balance","\u002Fdocs\u002Fwallet-adapter\u002Fbalance","docs\u002F5.wallet-adapter\u002F3.balance",{"title":151,"path":152,"stem":153},"Debit","\u002Fdocs\u002Fwallet-adapter\u002Fdebit","docs\u002F5.wallet-adapter\u002F4.debit",{"title":155,"path":156,"stem":157},"Credit","\u002Fdocs\u002Fwallet-adapter\u002Fcredit","docs\u002F5.wallet-adapter\u002F5.credit",{"title":159,"path":160,"stem":161},"Debit reversal","\u002Fdocs\u002Fwallet-adapter\u002Fdebit-reversal","docs\u002F5.wallet-adapter\u002F6.debit-reversal",{"title":163,"path":164,"stem":165},"Operation lookup","\u002Fdocs\u002Fwallet-adapter\u002Foperation-lookup","docs\u002F5.wallet-adapter\u002F7.operation-lookup",{"title":167,"path":168,"stem":169},"Idempotency","\u002Fdocs\u002Fwallet-adapter\u002Fidempotency","docs\u002F5.wallet-adapter\u002F8.idempotency",{"title":171,"path":172,"stem":173,"children":174,"page":21},"Webhooks","\u002Fdocs\u002Fwebhooks","docs\u002F6.webhooks",[175,178,182,186,190,194],{"title":10,"path":176,"stem":177},"\u002Fdocs\u002Fwebhooks\u002Foverview","docs\u002F6.webhooks\u002F1.overview",{"title":179,"path":180,"stem":181},"Signatures","\u002Fdocs\u002Fwebhooks\u002Fsignatures","docs\u002F6.webhooks\u002F2.signatures",{"title":183,"path":184,"stem":185},"Event envelope","\u002Fdocs\u002Fwebhooks\u002Fevent-envelope","docs\u002F6.webhooks\u002F3.event-envelope",{"title":187,"path":188,"stem":189},"Event types","\u002Fdocs\u002Fwebhooks\u002Fevent-types","docs\u002F6.webhooks\u002F4.event-types",{"title":191,"path":192,"stem":193},"Retry and replay","\u002Fdocs\u002Fwebhooks\u002Fretry-and-replay","docs\u002F6.webhooks\u002F5.retry-and-replay",{"title":195,"path":196,"stem":197},"Receiver examples","\u002Fdocs\u002Fwebhooks\u002Freceiver-examples","docs\u002F6.webhooks\u002F6.receiver-examples",{"title":199,"path":200,"stem":201,"children":202,"page":21},"Testing And Staging","\u002Fdocs\u002Ftesting-and-staging","docs\u002F7.testing-and-staging",[203,207,210,214,218],{"title":204,"path":205,"stem":206},"Staging overview","\u002Fdocs\u002Ftesting-and-staging\u002Fstaging-overview","docs\u002F7.testing-and-staging\u002F1.staging-overview",{"title":97,"path":208,"stem":209},"\u002Fdocs\u002Ftesting-and-staging\u002Fsimulator","docs\u002F7.testing-and-staging\u002F2.simulator",{"title":211,"path":212,"stem":213},"Wallet failure drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwallet-failure-drills","docs\u002F7.testing-and-staging\u002F3.wallet-failure-drills",{"title":215,"path":216,"stem":217},"Webhook drills","\u002Fdocs\u002Ftesting-and-staging\u002Fwebhook-drills","docs\u002F7.testing-and-staging\u002F4.webhook-drills",{"title":219,"path":220,"stem":221},"Production cutover rehearsal","\u002Fdocs\u002Ftesting-and-staging\u002Fproduction-cutover-rehearsal","docs\u002F7.testing-and-staging\u002F5.production-cutover-rehearsal",{"title":223,"path":224,"stem":225,"children":226,"page":21},"Production Readiness","\u002Fdocs\u002Fproduction-readiness","docs\u002F8.production-readiness",[227,231,235,239],{"title":228,"path":229,"stem":230},"Checklist","\u002Fdocs\u002Fproduction-readiness\u002Fchecklist","docs\u002F8.production-readiness\u002F1.checklist",{"title":232,"path":233,"stem":234},"Operational runbook","\u002Fdocs\u002Fproduction-readiness\u002Foperational-runbook","docs\u002F8.production-readiness\u002F2.operational-runbook",{"title":236,"path":237,"stem":238},"Security","\u002Fdocs\u002Fproduction-readiness\u002Fsecurity","docs\u002F8.production-readiness\u002F3.security",{"title":240,"path":241,"stem":242},"Rollback","\u002Fdocs\u002Fproduction-readiness\u002Frollback","docs\u002F8.production-readiness\u002F4.rollback",{"title":244,"path":245,"stem":246,"children":247,"page":21},"Reference","\u002Fdocs\u002Freference","docs\u002F9.reference",[248,252,256,260,264],{"title":249,"path":250,"stem":251},"Statuses","\u002Fdocs\u002Freference\u002Fstatuses","docs\u002F9.reference\u002F1.statuses",{"title":253,"path":254,"stem":255},"Scopes","\u002Fdocs\u002Freference\u002Fscopes","docs\u002F9.reference\u002F2.scopes",{"title":257,"path":258,"stem":259},"Units and money","\u002Fdocs\u002Freference\u002Funits-and-money","docs\u002F9.reference\u002F3.units-and-money",{"title":261,"path":262,"stem":263},"Changelog","\u002Fdocs\u002Freference\u002Fchangelog","docs\u002F9.reference\u002F4.changelog",{"title":265,"path":266,"stem":267},"Virtual AMM","\u002Fdocs\u002Freference\u002Fvirtual-amm","docs\u002F9.reference\u002F5.virtual-amm",{"id":269,"title":53,"body":270,"description":502,"extension":503,"links":504,"meta":505,"navigation":506,"path":54,"seo":507,"stem":55,"__hash__":508},"docs\u002Fdocs\u002F2.integration-flow\u002F4.fx-fees-and-rounding.md",{"type":271,"value":272,"toc":490},"minimark",[273,277,281,286,321,324,328,346,350,367,370,387,391,394,411,421,427,431,434,440,444,450,454,457,461,464,475,479],[274,275,53],"h1",{"id":276},"fx-fees-and-rounding",[278,279,280],"p",{},"OpenPoly settles with integer units only.",[282,283,285],"h2",{"id":284},"units","Units",[287,288,289,297,303,309,315],"ul",{},[290,291,292,293],"li",{},"credits-equivalent: integer, ",[294,295,296],"code",{},"10000 = 1 USDT",[290,298,299,300],{},"shares: integer micro-shares, ",[294,301,302],{},"1000000 = 1 share",[290,304,305,306],{},"IDR: integer minor unit, exponent ",[294,307,308],{},"0",[290,310,311,312],{},"FX rate: IDR per ",[294,313,314],{},"1 USDT",[290,316,317,318],{},"BPS denominator: ",[294,319,320],{},"10000",[278,322,323],{},"No floating settlement values are persisted.",[282,325,327],{"id":326},"fx-freshness","FX freshness",[287,329,330,337,343],{},[290,331,332,333,336],{},"target freshness: ",[294,334,335],{},"\u003C= 30"," seconds",[290,338,339,340,336],{},"hard stale threshold: ",[294,341,342],{},"120",[290,344,345],{},"stale FX beyond hard threshold -> execution fails before wallet mutation",[282,347,349],{"id":348},"fee-model","Fee model",[287,351,352,357,362],{},[290,353,354],{},[294,355,356],{},"fx_fee_bps",[290,358,359],{},[294,360,361],{},"operator_fee_bps",[290,363,364],{},[294,365,366],{},"total_fee_bps = fx_fee_bps + operator_fee_bps",[278,368,369],{},"Rules:",[287,371,372,375,381,384],{},[290,373,374],{},"fee values are non-negative integers",[290,376,377,378],{},"total fee must stay ",[294,379,380],{},"\u003C 10000",[290,382,383],{},"buy applies fee before AMM quote",[290,385,386],{},"sell and redemption apply fee after credits-equivalent proceeds known",[282,388,390],{"id":389},"buy-formula","Buy formula",[278,392,393],{},"Given:",[287,395,396,401,406],{},[290,397,398],{},[294,399,400],{},"amount_minor",[290,402,403],{},[294,404,405],{},"idr_per_usdt",[290,407,408],{},[294,409,410],{},"total_fee_bps",[412,413,419],"pre",{"className":414,"code":416,"language":417,"meta":418},[415],"language-text","net_bps = 10000 - total_fee_bps\ncredits_equivalent = floor(amount_minor * net_bps * 10000 \u002F (10000 * idr_per_usdt))\n","text","",[294,420,416],{"__ignoreMap":418},[278,422,423,424,426],{},"Debit amount remains original ",[294,425,400],{},".",[282,428,430],{"id":429},"sell-formula","Sell formula",[278,432,433],{},"Given AMM credits-equivalent proceeds:",[412,435,438],{"className":436,"code":437,"language":417,"meta":418},[415],"net_bps = 10000 - total_fee_bps\nexternal_amount_minor = floor(credits * idr_per_usdt * net_bps \u002F (10000 * 10000))\n",[294,439,437],{"__ignoreMap":418},[282,441,443],{"id":442},"redemption-formula","Redemption formula",[412,445,448],{"className":446,"code":447,"language":417,"meta":418},[415],"credits_equivalent = floor(shares_micro * 10000 \u002F 1000000)\nnet_bps = 10000 - total_fee_bps\nexternal_amount_minor = floor(credits_equivalent * idr_per_usdt * net_bps \u002F (10000 * 10000))\n",[294,449,447],{"__ignoreMap":418},[282,451,453],{"id":452},"rounding-rule","Rounding rule",[278,455,456],{},"Always floor final integer conversion. Never round up payout or buying power.",[282,458,460],{"id":459},"quote-safety","Quote safety",[278,462,463],{},"Execution rejects when:",[287,465,466,469,472],{},[290,467,468],{},"quote ID missing or changed",[290,470,471],{},"FX snapshot stale beyond hard threshold",[290,473,474],{},"final execution worse than accepted slippage",[282,476,478],{"id":477},"why-this-matters-for-operators","Why this matters for operators",[287,480,481,484,487],{},[290,482,483],{},"wallet side always sees integer IDR minor amounts",[290,485,486],{},"webhook and reporting APIs expose already-rounded final values",[290,488,489],{},"operator reconciliation should compare integer amounts only",{"title":418,"searchDepth":491,"depth":491,"links":492},2,[493,494,495,496,497,498,499,500,501],{"id":284,"depth":491,"text":285},{"id":326,"depth":491,"text":327},{"id":348,"depth":491,"text":349},{"id":389,"depth":491,"text":390},{"id":429,"depth":491,"text":430},{"id":442,"depth":491,"text":443},{"id":452,"depth":491,"text":453},{"id":459,"depth":491,"text":460},{"id":477,"depth":491,"text":478},"FX snapshots, fee application, unit conversions, and flooring rules.","md",null,{},true,{"title":53,"description":502},"CGnc4-U_-dzPyVgWEJQPHvS3XYTHlNpfncgEpM6L8Pw",[510,512],{"title":49,"path":50,"stem":51,"description":511,"children":-1},"Buy, sell, and redemption state transitions across OpenPoly and operator systems.",{"title":10,"path":62,"stem":63,"description":513,"children":-1},"Operator dashboard surfaces and their purpose.",1781957290954]