Polyflight overview and launch
Polyflight overview and launch
Polyflight is a separate product inside the existing OpenPoly Mini App platform. It reuses the same operator identity, launch/session security, wallet adapter, webhook delivery, and dashboard. It does not use Opinion markets, shares, order pricing, or settlement formulas.
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.
Enablement boundary
Polyflight must be enabled for the operator before it can be launched. Enablement records:
- native currency
IDR; - a fixed Polyflight settlement timezone;
- the initial fee-share and position-share terms;
- the enabling administrator, reason, and time.
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.
Launch request
Use the existing endpoint:
POST /api/operator/launch
Required scope: launch:write.
Select Polyflight with the additive product field:
{
"external_user_id": "operator-user-123",
"display_name": "Rina",
"locale": "id",
"product": "polyflight",
"metadata": {}
}
Allowed values are opinion and polyflight. Omitting product preserves the existing opinion default. A Polyflight launch is rejected when the product is not enabled for the authenticated operator; it never silently falls back to Opinion.
The response remains the existing launch response with a short-lived, single-use launch_url, expires_at, and the linked 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.
Product-aware launch and redeem/bootstrap responses expose validated product, operator enabled_products, and server-selected redirect_path. Polyflight is always /polyflight. Opinion defaults to /; only server-generated legacy portfolio Trade links may preserve /markets/{encoded-slug}. Missing, invalid, or absolute redirect metadata falls back to /. Follow the returned path and never derive a destination from caller-controlled metadata.
Product switching
An authenticated Mini App session may switch between enabled products without a new operator login. Product-specific routes keep wallet and ticket state separate:
- Opinion remains the default experience and keeps its existing behavior.
- Polyflight uses
/polyflight,/polyflight/tickets,/polyflight/history, and/polyflight/black-box/{flightCode}. - A Polyflight ticket never creates an Opinion order or market position.
Native-IDR ticket contract
| Rule | Value |
|---|---|
| Currency | IDR only |
| Minimum stake | 1,000 IDR |
| Stake step | 1,000 IDR |
| Technical maximum per ticket | 565,127,000 IDR |
| Ticket fee | 500 BPS (5%) included in the stake |
| Winning payout | 4 × net stake |
| Cancelled-flight refund | Full original debit, including fee |
For stake $S$:
fee = 5% × S
net stake = S - fee
winning payout = 4 × net stake
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.
No purchase or payout conversion occurs. Polyflight does not apply the Opinion fx_fee_bps, buy/sell premiums, or 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 Mixed-money proof and comparison.
Operator launch checklist
- Confirm Polynion has enabled Polyflight and the current terms are visible under Polyflight → Terms.
- Assign only the required read scopes to reporting integrations.
- Confirm the existing wallet adapter accepts all Polyflight reasons and additive metadata.
- Confirm the webhook receiver accepts all
mini_app.polyflight.*events and deduplicates byevent_id. - In staging, use Simulator → Users to create or select a dedicated simulator user, then Simulator to launch
polyflightthrough the real launch URL. - Do not change the operator-wide
rest_v1adapter to simulator mode. Simulation is user-scoped. - Treat simulator acceptance and real external-wallet certification as separate evidence.
Production enablement, production wallet activity, and production deployment require separate explicit authorization. A successful staging launch is not production approval.
