{"openapi":"3.1.0","info":{"title":"Ripster Backend","description":"Ripster backend API. The double-entry ledger is the financial source of truth. Consumer endpoints live under `/v1` and use the standard response envelope (`data` / `meta` / `error`). Admin endpoints are tagged `admin` and are excluded from the public client spec.\n\n**Full Swagger:** [/docs](/docs) · **ReDoc:** [/redoc](/redoc)","version":"0.1.0"},"paths":{"/v1/catalog/categories":{"get":{"tags":["public"],"summary":"List Categories","operationId":"listCategories","parameters":[{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"enum":["collection","tier"],"type":"string"},{"type":"null"}],"description":"Filter by category kind (collection = IP, tier = pricing rung).","title":"Kind"},"description":"Filter by category kind (collection = IP, tier = pricing rung)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PublicCategory__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/catalog/packs":{"get":{"tags":["public"],"summary":"List Published Packs","operationId":"listPublishedPacks","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter packs by name (case-insensitive substring match).","title":"Name"},"description":"Filter packs by name (case-insensitive substring match)."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search pack name or slug (case-insensitive).","title":"Search"},"description":"Search pack name or slug (case-insensitive)."},{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact pack slug match.","title":"Slug"},"description":"Exact pack slug match."},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category slug.","title":"Category"},"description":"Filter by category slug."},{"name":"collection","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by collection (IP) category slug.","title":"Collection"},"description":"Filter by collection (IP) category slug."},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tier (pricing rung) category slug.","title":"Tier"},"description":"Filter by tier (pricing rung) category slug."},{"name":"volatility","in":"query","required":false,"schema":{"anyOf":[{"enum":["low","normal","high"],"type":"string"},{"type":"null"}],"description":"Filter by volatility variant label.","title":"Volatility"},"description":"Filter by volatility variant label."},{"name":"sort","in":"query","required":false,"schema":{"enum":["name","price"],"type":"string","description":"Sort key: pack name or rip price.","default":"name","title":"Sort"},"description":"Sort key: pack name or rip price."},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction. Default is ascending (A-Z, lowest price first).","default":"asc","title":"Order"},"description":"Sort direction. Default is ascending (A-Z, lowest price first)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum packs to return. The default is above the current catalogue size, so existing clients see no change; paginate with offset if the catalogue grows past it.","default":200,"title":"Limit"},"description":"Maximum packs to return. The default is above the current catalogue size, so existing clients see no change; paginate with offset if the catalogue grows past it."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Packs to skip, for paging.","default":0,"title":"Offset"},"description":"Packs to skip, for paging."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PublicPackSummary__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/catalog/packs/{pack_version_id}":{"get":{"tags":["public"],"summary":"Get Public Pack Version","operationId":"getPublicPackVersion","parameters":[{"name":"pack_version_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pack Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PublicPackDetail_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/catalog/items/{item_id}/facts":{"get":{"tags":["public"],"summary":"Get Item Facts","description":"Canonical card detail by item id: name, art, set line, advertised value\nand honest catalogue facts. ``display_value_usd_cents`` is the latest\ncatalog display valuation (``display_value_source=catalog``). Band packs\nhave no per-card frozen pack figure — for vault card detail use the\ninventory item's win-time ``display_value_usd_cents``. ``pack_version_id``\nis accepted for compatibility and ignored.","operationId":"getItemFacts","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"pack_version_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PublicItemFacts_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/session/bootstrap":{"get":{"tags":["public"],"summary":"Get Session Bootstrap","description":"Auth optional: anonymous callers get the public config subset\n(feature flags, assets, rates, media_base_url) with user fields null.","operationId":"getSessionBootstrap","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SessionBootstrap_"}}}}},"security":[{},{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/wallet":{"get":{"tags":["public"],"summary":"Get Wallet Summary","operationId":"getWalletSummary","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WalletSummary_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/wallet/transactions":{"get":{"tags":["public"],"summary":"List Wallet Transactions","operationId":"listWalletTransactions","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"include_entries","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Entries"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/preferences":{"get":{"tags":["public"],"summary":"Get Preferences","operationId":"getPreferences","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PreferencesRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"patch":{"tags":["public"],"summary":"Update Preferences","operationId":"updatePreferences","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferencesUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PreferencesRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/compliance-status":{"get":{"tags":["public"],"summary":"Get Compliance Status","operationId":"getComplianceStatus","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ComplianceStatusRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/self-exclusion":{"post":{"tags":["public"],"summary":"Self Exclude","description":"Self-exclude, effective immediately: blocks deposits, pack opens, withdrawals and shipping; sellback stays available so funds and cards are never trapped. `ends_at` null = indefinite. There is deliberately no API to lift a self-exclusion — that is a support action. Returns the fresh compliance status; re-render gates from its capability booleans and `reasons[]`.","operationId":"selfExclude","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicSelfExclusionRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ComplianceStatusRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/cool-off":{"post":{"tags":["public"],"summary":"Start Cool Off","description":"Take a break: blocks deposits and pack opens until `until`, then expires on its own (withdrawals, sellback and shipping stay available). An active cool-off can be extended but never shortened. Returns the fresh compliance status.","operationId":"startCoolOff","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoolOffRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ComplianceStatusRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rg-limits":{"put":{"tags":["public"],"summary":"Set Rg Limits","description":"Set personal responsible-gaming caps (USD cents). `0` clears a field; omitted fields are left unchanged. Weekly must be ≥ daily when both are set. Cool-off is `startCoolOff`, not this endpoint. Returns the fresh compliance status including the stored limits.","operationId":"setRgLimits","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRgLimitsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ComplianceStatusRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/account-deletion":{"get":{"tags":["public"],"summary":"Get Account Deletion","description":"Current account-deletion state and any blockers. `status=none` when nothing is pending — `blockers[]` is still filled so the confirm screen can warn before POST. `handling=on_behalf` completes automatically once blockers are gone. `handling=self` stays pending until they POST confirm again. Poll this or bootstrap; deletion is not on the SSE stream.","operationId":"getAccountDeletion","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_AccountDeletionRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"post":{"tags":["public"],"summary":"Request Account Deletion","description":"Request account deletion. Body `{ confirm: true, handling?, reason? }`. `handling` is `self` (user drains leftover cash/cards) or `on_behalf` (we sell remaining cards at current sellback and pay leftover cash to the default payout method, then close). Defaults to `self`. Clerk JWT is the identity check. Play freezes immediately (no deposits or opens). `handling=self`: leftover cash/cards stay with the user; after they drain, they POST again with confirm to close (GET does not close). `handling=on_behalf`: we unwind then close when clear. Completes in this call when nothing is in the way; otherwise returns `pending` with display-ready `blockers[]`. 409 if already pending with blockers.","operationId":"requestAccountDeletion","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeletionRequestBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_AccountDeletionRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"delete":{"tags":["public"],"summary":"Cancel Account Deletion","description":"Cancel a pending deletion. Play unfreezes. 409 if already completed; 409 INVALID_STATE if nothing is pending.","operationId":"cancelAccountDeletion","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_AccountDeletionRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/kyc":{"get":{"tags":["public"],"summary":"Get Kyc Status","description":"Identity-verification state. `submitted=false` with `kyc_status=pending` means the user has not started verification yet — render the start flow. While a hosted verification is outstanding, `verification_link` carries a fresh short-lived URL to resume it (pass `redirect_url` so the user is returned to your app afterwards). Approval unblocks both withdrawals and physical shipping claims.","operationId":"getKycStatus","parameters":[{"name":"redirect_url","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"description":"Where the hosted verification flow returns the user. http(s) only. In production the origin must match CLERK_AUTHORIZED_PARTIES.","title":"Redirect Url"},"description":"Where the hosted verification flow returns the user. http(s) only. In production the origin must match CLERK_AUTHORIZED_PARTIES."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_KycStatusRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"post":{"tags":["public"],"summary":"Start Kyc","description":"Start (or retry) identity verification. US residents submit the full identity set and can be approved instantly; when the instant check is inconclusive — and always for non-US residents — the response carries a `verification_link` where the user completes verification in the provider's hosted UI (selfie / document upload) and is then redirected to `redirect_url`. Identity fields are relayed to the verification provider and never stored by Ripster. Rate limited to 3 attempts per minute per user (shared across API machines).","operationId":"startKyc","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KycStartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_KycStatusRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/profile":{"patch":{"tags":["public"],"summary":"Update Profile","operationId":"updateProfile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_BootstrapUser_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/inventory":{"get":{"tags":["public"],"summary":"List User Items","operationId":"listUserItems","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/UserItemStatus"},{"type":"null"}],"description":"Filter by item status.","title":"Status"},"description":"Filter by item status."},{"name":"sort","in":"query","required":false,"schema":{"enum":["created_at","value"],"type":"string","description":"Sort key: won time or sellback value.","default":"created_at","title":"Sort"},"description":"Sort key: won time or sellback value."},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction.","default":"desc","title":"Order"},"description":"Sort direction."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PublicUserInventoryItem__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/stats":{"get":{"tags":["public"],"summary":"Get My Stats","description":"Account-home stat tiles — server-computed so the client never sums\ninventory itself (agency #484). Redis-cached ~10s per user.","operationId":"getMyStats","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_MeStatsRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/items/sellback-all":{"post":{"tags":["public"],"summary":"Sell Back All User Items","description":"Sell the listed held items in one request (e.g. every card from this rip).\n\nCounts as a single rate-limit increment. Does **not** dump the rest of\nthe vault — pass the ``user_item_id``s from the open. Unknown or already-\nsold ids are ``skipped``.","operationId":"sellBackAllUserItems","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellbackAllRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SellbackAllResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/items/{user_item_id}/sellback":{"post":{"tags":["public"],"summary":"Sell Back User Item","operationId":"sellBackUserItem","parameters":[{"name":"user_item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Item Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SellbackResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/addresses":{"get":{"tags":["public"],"summary":"List Shipping Addresses","operationId":"listShippingAddresses","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_ShippingAddressRead__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"post":{"tags":["public"],"summary":"Create Shipping Address","operationId":"createShippingAddress","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingAddressCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShippingAddressRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/addresses/{address_id}":{"patch":{"tags":["public"],"summary":"Update Shipping Address","operationId":"updateShippingAddress","parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingAddressUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShippingAddressRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"delete":{"tags":["public"],"summary":"Delete Shipping Address","operationId":"deleteShippingAddress","parameters":[{"name":"address_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Address Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_dict_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/shipping/config":{"get":{"tags":["public"],"summary":"Get Shipping Config","operationId":"getShippingConfig","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShippingConfigRead_"}}}}}}},"/v1/shipping/quotes":{"post":{"tags":["public"],"summary":"Create Shipping Quote","description":"Price shipping for one or more held items to one address. Returns the service options the user may pick from (multiple items travel together — shipping two cards costs about the same as one) plus the current cash balance so the client can offer a top-up before confirming. Quotes are free, expire after the configured TTL, and charge nothing.","operationId":"createShippingQuote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShipmentQuoteRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/shipments":{"get":{"tags":["public"],"summary":"List My Shipments","operationId":"listMyShipments","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_ShipmentRead__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"post":{"tags":["public"],"summary":"Create Shipment","description":"Confirm a quote: charges the selected option's price from the CASH balance (never bonus) and requests the physical claim on every item in the quote, atomically. 409 INSUFFICIENT_FUNDS with the shortfall in details when the balance cannot cover it; 409 CONFLICT when the quote expired or was already used.","operationId":"createShipment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShipmentCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShipmentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/shipments/{shipment_id}":{"get":{"tags":["public"],"summary":"Get My Shipment","operationId":"getMyShipment","parameters":[{"name":"shipment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Shipment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShipmentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/shipments/{shipment_id}/cancel":{"post":{"tags":["public"],"summary":"Cancel My Shipment","description":"Cancel before it ships: the full shipping fee returns to the cash balance and every item goes back to the inventory as held (auto-sell re-arms with a fresh window).","operationId":"cancelMyShipment","parameters":[{"name":"shipment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Shipment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShipmentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/payment-methods":{"get":{"tags":["public"],"summary":"List Payment Methods","operationId":"listPaymentMethods","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PaymentMethodRead__"}}}}}}},"/v1/wallet/deposit-config":{"get":{"tags":["public"],"summary":"Get Deposit Config","description":"Deposit rules as currently configured in the backoffice: limits, suggested amounts, which rails the hosted checkout will offer, and the currencies a payer may be charged in. Read this before rendering a deposit screen rather than hardcoding limits — staff change them without a client release.","operationId":"getDepositConfig","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_DepositConfigRead_"}}}}}}},"/v1/wallet/deposit-intents":{"post":{"tags":["public"],"summary":"Create Deposit Intent","operationId":"createDepositIntent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositIntentCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_DepositIntentCreated_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposit-intents/{deposit_id}/mock-confirm":{"post":{"tags":["public"],"summary":"Mock Confirm Deposit Intent","description":"DEV/STAGING ONLY — instantly settles a deposit intent created against the mock provider (the stand-in for the provider checkout step). Returns 404 in production and for non-owned intents; 409 for non-mock intents. Against Coinflow, open `client_params.checkout_url` instead: the credit then arrives on the provider webhook. Use `/testing/faucet` when you only need a test balance.","operationId":"mockConfirmDepositIntent","parameters":[{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deposit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PaymentIntentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposit-intents/{deposit_id}/card-charge":{"post":{"tags":["public"],"summary":"Charge Deposit Card","description":"Charge a `method_type=card` intent with a Coinflow hosted-form card token. Amount is taken from the intent, never from this body. Do not send PAN/CVV. 200 returns the intent (`pending`, or `confirmed` on the mock provider). 402 `CARD_DECLINED` leaves the intent `created` — re-tokenize and retry. 428 `THREE_DS_CHALLENGE_REQUIRED` includes `details.transaction_id`, `acs_url`, and `creq`; after the challenge, POST `.../card-charge/complete`. Reuse `idempotency_key` on a network retry (replays the first outcome).","operationId":"chargeDepositCard","parameters":[{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deposit Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardChargeCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PaymentIntentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposit-intents/{deposit_id}/card-charge/complete":{"post":{"tags":["public"],"summary":"Complete Deposit Card Charge","description":"Finish a 3-D Secure challenge from `chargeDepositCard`. Body is only `three_ds_transaction_id` — do not resend the card token. Same 200/402/428 contract as the charge call. 409 `INTENT_NOT_CHARGEABLE` if the 5-minute challenge cache expired or the id does not match.","operationId":"completeDepositCardCharge","parameters":[{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deposit Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardChargeComplete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PaymentIntentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/testing/faucet":{"post":{"tags":["public"],"summary":"Faucet Credit","description":"DEV/STAGING ONLY — credit your own cash balance for integration testing. Returns 404 in production. Capped per request and per rolling 24h; the credit goes through the same audited manual-credit ledger operation an admin top-up uses. Reuse `idempotency_key` on a network retry.","operationId":"faucetCredit","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaucetRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_FaucetResult_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposits":{"get":{"tags":["public"],"summary":"List Deposits","operationId":"listDeposits","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PaymentIntentRead__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/withdrawal-config":{"get":{"tags":["public"],"summary":"Get Withdraw Config","description":"Withdrawal rules as currently configured in the backoffice: limits, the payout speeds on offer, and whether payouts need a manual review. Read this before rendering a withdrawal screen rather than hardcoding limits — staff change them without a client release.","operationId":"getWithdrawalConfig","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WithdrawalConfigRead_"}}}}},"security":[{},{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/payout-methods":{"get":{"tags":["public"],"summary":"List Payout Methods Public","description":"Linked payout destinations (bank accounts and debit cards) under Ripster ids — provider tokens never appear in the API. Empty until the user has completed identity verification and linked an account via the hosted flow from `POST /v1/wallet/payout-methods/session`.","operationId":"listPayoutMethods","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PayoutMethodRead__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/payout-methods/session":{"post":{"tags":["public"],"summary":"Create Payout Link Session","description":"Open a hosted bank/card linking session. Load `client_params.hosted_url` in an iframe or new tab: the page handles bank authentication (Plaid) and debit-card tokenization, emits an `accountLinked` postMessage on success, and then redirects to `redirect_url`. Requires approved identity verification. The URL embeds a ~30-minute session key — request it when the user is ready, not in advance.","operationId":"createPayoutLinkSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayoutLinkSessionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PayoutLinkSessionRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/payout-methods/{destination_id}":{"delete":{"tags":["public"],"summary":"Delete Payout Method","description":"Unlink a payout destination by its id. Returns the remaining destinations.","operationId":"deletePayoutMethod","parameters":[{"name":"destination_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Destination Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PayoutMethodRead__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/withdrawal-quotes":{"post":{"tags":["public"],"summary":"Create Withdrawal Quote","description":"Price a prospective withdrawal: per-speed fees, what would arrive, and ETAs for one destination. Advisory — no quote id, no reservation, no expiry. Pass the chosen option's fee as `expected_fee_base_units` on `requestWithdrawal`; the server re-prices and answers 409 `quote_changed` if the fee moved.","operationId":"createWithdrawalQuote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalQuoteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WithdrawalQuoteRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/withdrawals":{"get":{"tags":["public"],"summary":"List Withdrawals","operationId":"listWithdrawals","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_WithdrawalRead__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"post":{"tags":["public"],"summary":"Request Withdrawal","description":"Request a withdrawal. The amount is frozen out of the cash balance immediately. Branch customer copy on `awaiting_review`: true means the row is in our review queue (`requested`); false means it was already sent (`processing`, or `paid` against the mock provider). Clean KYC'd withdrawals at or below `withdrawal-config.auto_approve_max_base_units` skip the queue unless the account is payment-risk flagged (unsettled deposit or open chargeback). Cap 0 (the default) queues everyone. After a send the provider moves it `processing` → `paid`/`failed`; a failure returns the funds to cash. One provider payout may be in flight at a time (409 `withdrawal_pending` otherwise). Requires approved identity verification (`getKycStatus`).","operationId":"requestWithdrawal","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WithdrawalRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposits/{deposit_id}":{"get":{"tags":["public"],"summary":"Get Deposit","operationId":"getDeposit","parameters":[{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deposit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PaymentIntentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/deposit-intents/{deposit_id}":{"delete":{"tags":["public"],"summary":"Cancel Deposit Intent","operationId":"cancelDepositIntent","parameters":[{"name":"deposit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deposit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PaymentIntentRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/wallet/withdrawals/{withdrawal_id}":{"get":{"tags":["public"],"summary":"Get Withdrawal","operationId":"getWithdrawal","parameters":[{"name":"withdrawal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Withdrawal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WithdrawalRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/items/{user_item_id}":{"get":{"tags":["public"],"summary":"Get User Item","operationId":"getUserItem","parameters":[{"name":"user_item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PublicUserInventoryItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rounds":{"get":{"tags":["public"],"summary":"List My Rounds","operationId":"listMyRounds","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PublicGameRound__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rounds/{game_round_id}":{"get":{"tags":["public"],"summary":"Get My Round","operationId":"getMyRound","parameters":[{"name":"game_round_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Game Round Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PublicGameRound_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rounds/{game_round_id}/verify":{"get":{"tags":["public"],"summary":"Verify My Round","operationId":"verifyMyRound","parameters":[{"name":"game_round_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Game Round Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_RngVerification_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rng/seed":{"get":{"tags":["public"],"summary":"Get My Rng Seed","description":"Return the active commit-reveal seed pair (creates one if missing).","operationId":"getMyRngSeed","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ActiveSeedPairRead_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]},"patch":{"tags":["public"],"summary":"Update My Rng Client Seed","description":"Update the client seed (takes effect on the next draw).","operationId":"updateMyRngClientSeed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientSeedUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ActiveSeedPairRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rng/seed/rotate":{"post":{"tags":["public"],"summary":"Rotate My Rng Seed","description":"Reveal the active server seed and activate a fresh committed pair.","operationId":"rotateMyRngSeed","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_RotateSeedResult_"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/rng/seeds/revealed":{"get":{"tags":["public"],"summary":"List My Revealed Rng Seeds","operationId":"listMyRevealedRngSeeds","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_RevealedSeedPairRead__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/bonuses":{"get":{"tags":["public"],"summary":"List My Bonuses","operationId":"listMyBonuses","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_PublicBonusGrant__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/me/transactions":{"get":{"tags":["public"],"summary":"List My Transactions","operationId":"listMyTransactions","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"transaction_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/TransactionType"},{"type":"null"}],"description":"Filter by ledger transaction type.","title":"Transaction Type"},"description":"Filter by ledger transaction type."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_TransactionRead__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/games/single-pack-open":{"post":{"tags":["public"],"summary":"Open Single Pack","description":"Paid single pack open. Rate limited to 60 requests per minute per user (shared with multi-pack and free-pull opens).","operationId":"openSinglePack","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SinglePackOpenBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_GameOpenResultRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/games/multi-pack-open":{"post":{"tags":["public"],"summary":"Open Multi Pack","description":"Paid multi pack open (1-20 packs, one debit). Rate limited to 60 requests per minute per user (shared with single-pack and free-pull).","operationId":"openMultiPack","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiPackOpenBody"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_MultiOpenResultRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/free-pulls/{entitlement_id}/open":{"post":{"tags":["public"],"summary":"Open Free Pull","description":"Open a free-pull entitlement for a real reward.\n\nDraws a live card the same way a paid open does, but with no purchase leg —\nthe reward is funded from the promotions budget instead of taken from the\nuser's balance. `pack_version_id` is only required when the entitlement\ndoes not already pin one. Supports `real_reward_unlocked` and\n`real_reward_locked` (locked credits `locked_item_liability` + wagering).\nWhen `max_win_usd_cents` is set, the pack's authored max band must be ≤ that\ncap (`PROMO_FREE_PULL_MAX_WIN_EXCEEDED` otherwise). Demo-only returns 409\npointing at `POST /v1/games/demo-spin`. Idempotent on `idempotency_key`\nper user. Rate limited with paid pack opens (60/min per user).","operationId":"openFreePull","parameters":[{"name":"entitlement_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Entitlement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreePullOpenBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_GameOpenResultRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/games/demo-spin":{"post":{"tags":["public"],"summary":"Demo Spin","description":"Unauthenticated marketing demo — no ledger. Rate limited to 60 requests per minute per client IP.","operationId":"demoSpin","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoSpinBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_DemoSpinEnvelope_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/testing/promotions":{"get":{"tags":["public"],"summary":"List Testing Promotions","description":"DEV/STAGING ONLY — list every promotion campaign with versions, redeemable code strings, and readiness diagnostics (why a campaign does or does not appear in GET /v1/promotions). Returns 404 in production.","operationId":"listTestingPromotions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_TestingPromotion__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/promotions":{"get":{"tags":["public"],"summary":"List Available Promotions","description":"List promotions available to the current user.\n\nReturns each published, public campaign with its display terms and a per-user\n`eligible` flag plus structured `reasons` explaining any ineligibility. To opt\ninto a deposit-match offer, pass the returned `campaign_id` as\n`promotion_campaign_id` when creating a deposit intent.\n\n`mission` campaigns additionally carry a `mission` block: the qualifying\npacks, `progress_count` / `required_count` for the caller (enrolment is\nautomatic on the first qualifying paid rip), and the reward (free pull, or\nfixed / percent-of-spend money). Progress advances only on cash-funded opens.","operationId":"listAvailablePromotions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_AvailablePromotion__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/promotions/grants":{"get":{"tags":["public"],"summary":"List My Grants","description":"List the current user's promotion grants and wagering progress.\n\nEach grant reports its instrument (`cash`, `locked_bonus`, or `free_pull`),\nvalue, and status. When a wagering requirement applies, `wagering` shows how\nmuch has been wagered toward release as `required`/`contributed`/`remaining`\n(USD cents). Locked funds stay in locked_* accounts until it completes; the\nuser's own cash is always withdrawable.","operationId":"listMyPromotionGrants","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_GrantProgress__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/free-pulls":{"get":{"tags":["public"],"summary":"List My Free Pulls","description":"List the current user's free-pull entitlements.\n\nEach entitlement reports `quantity_total`/`quantity_remaining`, its reward\npolicy, status, and expiry, plus enough scope detail to open one without a\nsecond lookup: `pack_name`/`pack_slug` when pinned to a pack or pack\nversion, or `max_pack_price_usd_cents` when it's usable on any pack up to\nthat price.","operationId":"listMyFreePulls","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_FreePullRead__"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/promo-codes/redeem":{"post":{"tags":["public"],"summary":"Redeem Promo Code","description":"Redeem a promo code for the current user.\n\nValidates the code, enforces total/per-user redemption limits, eligibility, and\na per-user rate limit, then issues the associated grant/entitlement. Idempotent\non `idempotency_key` (a retry with the same key returns the original redemption,\nwithout issuing a second grant). Returns 403 with structured `reasons` when the\nuser is ineligible, 429 when the rate limit is exceeded.","operationId":"redeemPromoCode","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeRedeemRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_PromoCodeRedemptionRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/feed/recent-opens":{"get":{"tags":["public"],"summary":"List Recent Opens","operationId":"listRecentOpens","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"pack_version_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only opens of this pack version.","title":"Pack Version Id"},"description":"Only opens of this pack version."},{"name":"pack_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Only opens of this pack, across all its published versions.","title":"Pack Id"},"description":"Only opens of this pack, across all its published versions."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_list_RecentOpen__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stream/recent-opens":{"get":{"tags":["public"],"summary":"Stream Recent Opens","description":"Global anonymized live feed (SSE). No PII; only ``user_handle``.","operationId":"streamRecentOpens","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"text/event-stream":{}}}}}},"/v1/me/stream":{"get":{"tags":["public"],"summary":"Stream My Opens","description":"Authenticated per-user live feed (SSE).","operationId":"streamMyOpens","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"text/event-stream":{}}}},"security":[{"bearerAuth":[]},{"devUserHeader":[]}]}},"/v1/showroom":{"get":{"tags":["public"],"summary":"Curated showroom feed","description":"Featured Pulls — admin-curated showcase grouped by pack. Optional ``category`` slug filters to packs in that collection. ``limit`` caps the total number of pulls across all groups.","operationId":"listShowroom","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pack category slug (case-insensitive).","title":"Category"},"description":"Pack category slug (case-insensitive)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShowroomFeed_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/showroom/items/{user_item_id}":{"get":{"tags":["public"],"summary":"Showroom pull detail","description":"Deep-link a curated showroom pull by ``user_item_id``. Only active curated entries resolve; inactive / unknown → 404.","operationId":"getShowroomItem","parameters":[{"name":"user_item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"User Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ShowroomItemDetail_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountDeletionHandling":{"type":"string","enum":["self","on_behalf"],"title":"AccountDeletionHandling","description":"Who drains leftover cash/cards before close."},"AccountDeletionRead":{"properties":{"status":{"$ref":"#/components/schemas/AccountDeletionStatus"},"requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Requested At"},"completes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completes At"},"cancellable":{"type":"boolean","title":"Cancellable"},"cancellable_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancellable Until"},"handling":{"anyOf":[{"$ref":"#/components/schemas/AccountDeletionHandling"},{"type":"null"}]},"blockers":{"items":{"$ref":"#/components/schemas/DeletionBlocker"},"type":"array","title":"Blockers","description":"Display-ready. Present while status=none so the confirm screen can warn before POST. Copy is preview until a request exists, then depends on handling."},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Email"},"case_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Reference"}},"type":"object","required":["status","cancellable"],"title":"AccountDeletionRead","description":"Current deletion state. ``status=none`` when nothing is pending."},"AccountDeletionRequestBody":{"properties":{"confirm":{"type":"boolean","title":"Confirm"},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason"},"handling":{"$ref":"#/components/schemas/AccountDeletionHandling","description":"`self`: you drain leftover cash and cards, then we close. `on_behalf`: we sell remaining cards at current sellback and pay leftover cash to your default payout method, then close.","default":"self"}},"type":"object","required":["confirm"],"title":"AccountDeletionRequestBody"},"AccountDeletionStatus":{"type":"string","enum":["none","pending","completed","cancelled"],"title":"AccountDeletionStatus","description":"Public read status, including ``none`` when nothing is in flight."},"ActiveSeedPairRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"server_seed_hash":{"type":"string","title":"Server Seed Hash"},"client_seed":{"type":"string","title":"Client Seed"},"next_nonce":{"type":"integer","title":"Next Nonce"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","server_seed_hash","client_seed","next_nonce","created_at"],"title":"ActiveSeedPairRead"},"AmlStatus":{"type":"string","enum":["clear","review_required","blocked"],"title":"AmlStatus"},"ApiError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["code","message"],"title":"ApiError"},"AvailablePromotion":{"properties":{"campaign_id":{"type":"string","format":"uuid","title":"Campaign Id"},"campaign_version_id":{"type":"string","format":"uuid","title":"Campaign Version Id"},"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"campaign_type":{"$ref":"#/components/schemas/CampaignType"},"terms_title":{"type":"string","title":"Terms Title"},"terms_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Summary"},"eligible":{"type":"boolean","title":"Eligible"},"reasons":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Reasons"},"mission":{"anyOf":[{"$ref":"#/components/schemas/MissionInfo"},{"type":"null"}]}},"type":"object","required":["campaign_id","campaign_version_id","code","name","description","campaign_type","terms_title","terms_summary","eligible"],"title":"AvailablePromotion"},"BootstrapUser":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","title":"Email"},"status":{"$ref":"#/components/schemas/UserStatus"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","required":["id","email","status"],"title":"BootstrapUser"},"CampaignStatus":{"type":"string","enum":["draft","published","paused","retired"],"title":"CampaignStatus"},"CampaignType":{"type":"string","enum":["deposit_match","no_deposit","free_pull","promo_code","manual","mission"],"title":"CampaignType"},"CampaignVisibility":{"type":"string","enum":["public","unlisted","targeted"],"title":"CampaignVisibility"},"CardBillingAddress":{"properties":{"address1":{"type":"string","maxLength":200,"minLength":1,"title":"Address1"},"address2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Address2","description":"Unit or apartment. Omit or null when empty."},"city":{"type":"string","maxLength":100,"minLength":1,"title":"City"},"state":{"type":"string","pattern":"^[A-Z]{2}$","title":"State","description":"Two-letter state or province code, uppercase."},"zip_code":{"type":"string","pattern":"^[0-9]{5}(-[0-9]{4})?$","title":"Zip Code"},"country_code":{"type":"string","pattern":"^[A-Z]{2}$","title":"Country Code","description":"ISO 3166-1 alpha-2. The client sends `US`."}},"type":"object","required":["address1","city","state","zip_code","country_code"],"title":"CardBillingAddress","description":"Address the card is registered to. Coinflow AVS-checks every line.\n\n`address2` is the only optional field. The client collects a US address."},"CardChargeComplete":{"properties":{"three_ds_transaction_id":{"type":"string","maxLength":200,"minLength":1,"title":"Three Ds Transaction Id"}},"type":"object","required":["three_ds_transaction_id"],"title":"CardChargeComplete","description":"Finish a 3-D Secure challenge. Do not resend the card token."},"CardChargeCreate":{"properties":{"card_token":{"type":"string","maxLength":512,"minLength":1,"title":"Card Token"},"exp_month":{"type":"string","pattern":"^(0[1-9]|1[0-2])$","title":"Exp Month"},"exp_year":{"type":"string","pattern":"^[0-9]{2}$","title":"Exp Year","description":"Two-digit expiry year (2026 → `26`)."},"cardholder_name":{"type":"string","maxLength":200,"minLength":1,"title":"Cardholder Name"},"billing_address":{"$ref":"#/components/schemas/CardBillingAddress"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"},"forter_token":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Forter Token","description":"Forter device token; forwarded as Coinflow `x-forter-token`."}},"type":"object","required":["card_token","exp_month","exp_year","cardholder_name","billing_address","idempotency_key"],"title":"CardChargeCreate","description":"Charge a `method_type=card` intent with a Coinflow hosted-form token.\n\nAmount is never in this body — the intent's `amount_base_units` is charged.\nDo not send PAN/CVV; `card_token` comes only from Coinflow's card form."},"ClientSeedUpdate":{"properties":{"client_seed":{"type":"string","maxLength":256,"minLength":1,"title":"Client Seed"}},"type":"object","required":["client_seed"],"title":"ClientSeedUpdate"},"CombinedEstimate":{"properties":{"display_currency":{"type":"string","title":"Display Currency"},"total_usd_cents":{"type":"integer","title":"Total Usd Cents"},"total_display_base_units":{"type":"integer","title":"Total Display Base Units"},"total_display_formatted":{"type":"string","title":"Total Display Formatted"},"is_stale":{"type":"boolean","title":"Is Stale"}},"type":"object","required":["display_currency","total_usd_cents","total_display_base_units","total_display_formatted","is_stale"],"title":"CombinedEstimate","description":"Total spendable value across all wallets, in the display currency."},"ComplianceStatusRead":{"properties":{"kyc_status":{"$ref":"#/components/schemas/KycStatus"},"aml_status":{"$ref":"#/components/schemas/AmlStatus"},"self_excluded":{"type":"boolean","title":"Self Excluded"},"self_exclusion_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Self Exclusion Ends At"},"cool_off_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cool Off Until"},"can_deposit":{"type":"boolean","title":"Can Deposit"},"can_withdraw":{"type":"boolean","title":"Can Withdraw"},"can_open_pack":{"type":"boolean","title":"Can Open Pack"},"can_claim_item":{"type":"boolean","title":"Can Claim Item"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"},"withdrawals_blocked":{"type":"boolean","title":"Withdrawals Blocked","default":false},"daily_withdrawal_limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Withdrawal Limit Base Units"},"daily_deposit_limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Deposit Limit Base Units"},"weekly_deposit_limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Deposit Limit Base Units"},"daily_spend_limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Spend Limit Base Units"},"weekly_spend_limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekly Spend Limit Base Units"},"session_limit_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Limit Minutes"},"geo_exempt":{"type":"boolean","title":"Geo Exempt","default":false},"geo_blocked":{"type":"boolean","title":"Geo Blocked","default":false},"geo":{"$ref":"#/components/schemas/GeoStatusRead"}},"type":"object","required":["kyc_status","aml_status","self_excluded","cool_off_until","can_deposit","can_withdraw","can_open_pack","can_claim_item","reasons"],"title":"ComplianceStatusRead"},"CoolOffRequest":{"properties":{"until":{"type":"string","format":"date-time","title":"Until"}},"type":"object","required":["until"],"title":"CoolOffRequest","description":"User-initiated cool-off: blocks deposits and pack opens until ``until``\n(future, timezone-aware), then expires on its own."},"DeletionBlocker":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"DeletionBlocker"},"DemoSpinBody":{"properties":{"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"}},"type":"object","required":["pack_version_id"],"title":"DemoSpinBody"},"DemoSpinEnvelope":{"properties":{"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"ticket_number":{"type":"integer","title":"Ticket Number"},"item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Item Id"},"item_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Name"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"is_demo":{"type":"boolean","title":"Is Demo"},"reward_claimable":{"type":"boolean","title":"Reward Claimable"}},"type":"object","required":["pack_version_id","ticket_number","item_id","item_name","display_value_usd_cents","sellback_value_usd_cents","is_demo","reward_claimable"],"title":"DemoSpinEnvelope"},"DepositClientParams":{"properties":{"checkout_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Url","description":"Hosted checkout page for this single purchase."},"checkout_jwt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Jwt","description":"Signed purchase JWT for Coinflow's native SDK (`jwtToken` prop). Same expiry as `checkout_url` (~30 minutes)."},"session_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Key","description":"Payer session token for a native SDK mount (valid ~24 hours)."},"merchant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Id","description":"Provider merchant slug."},"env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Env","description":"Provider environment: `\"sandbox\"` or `\"prod\"`."},"mock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Mock","description":"Set by the dev/staging mock provider. Confirm with `POST /v1/wallet/deposit-intents/{id}/mock-confirm` instead of paying, or charge in-app via `POST .../card-charge`."}},"additionalProperties":true,"type":"object","title":"DepositClientParams","description":"What the client needs to complete payment. Which fields are populated\ndepends on `provider_name`, so treat every one as optional and branch on the\nprovider rather than assuming a shape.\n\nFor `coinflow` you get both handoffs and pick one: load `checkout_url` in a\nweb view or iframe, **or** mount Coinflow's native SDK\n(`CoinflowPurchase` / Apple Pay button) with `session_key` + `merchant_id` +\n`env` + `checkout_jwt` (their `jwtToken` prop), **or** for an in-app card\nform POST `.../card-charge` with a Coinflow hosted-form token (you still\nneed `session_key` / `merchant_id` / `env` to mount that form). Both the URL\nand the JWT embed a short-lived (~30 minute) purchase token, so create the\nintent when the user is ready to pay rather than caching either. The SDK's\nsuccess callback is a client claim — credit still comes from our webhook;\nkeep polling `GET /v1/wallet/deposits/{id}`."},"DepositConfigRead":{"properties":{"asset_code":{"type":"string","title":"Asset Code","description":"Wallet currency a deposit credits."},"min_amount_base_units":{"type":"integer","title":"Min Amount Base Units"},"max_amount_base_units":{"type":"integer","title":"Max Amount Base Units"},"preset_amounts_base_units":{"items":{"type":"integer"},"type":"array","title":"Preset Amounts Base Units","description":"Suggested quick-pick amounts, in `asset_code` base units."},"presentment_currencies":{"items":{"type":"string"},"type":"array","title":"Presentment Currencies","description":"ISO-4217 codes accepted for `presentment_currency` on create."},"default_presentment_currency":{"type":"string","title":"Default Presentment Currency"},"payment_methods":{"items":{"$ref":"#/components/schemas/PaymentMethodRead"},"type":"array","title":"Payment Methods","description":"The catalogue from `GET /v1/wallet/payment-methods`, inlined."},"rails":{"items":{"type":"string"},"type":"array","title":"Rails","description":"Provider rail identifiers the hosted checkout will offer (e.g. `card`, `applePay`). Informational: use `payment_methods` to drive UI."},"support_email":{"type":"string","title":"Support Email"}},"type":"object","required":["asset_code","min_amount_base_units","max_amount_base_units","preset_amounts_base_units","presentment_currencies","default_presentment_currency","payment_methods","rails","support_email"],"title":"DepositConfigRead","description":"Backoffice-controlled deposit rules, so a client renders what is actually\naccepted right now instead of hardcoding limits that drift."},"DepositIntentCreate":{"properties":{"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code"},"amount_base_units":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Base Units"},"method_type":{"$ref":"#/components/schemas/PaymentMethodType","description":"The rail you want to open the checkout on. With Coinflow this is a **hint, not a guarantee**: the hosted checkout offers every rail the backoffice has enabled (see `GET /v1/wallet/deposit-config`), so a payer may complete a `card` intent with Apple Pay. The confirmed deposit is authoritative about what was actually used."},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"},"promotion_campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Promotion Campaign Id","description":"Optional opt-in to a deposit-match promotion (use a `campaign_id` from `GET /v1/promotions`). The match is applied on confirmation if the user is eligible; unknown or ineligible campaigns are ignored and the deposit still succeeds."},"device_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Device Id","description":"Device fingerprint from the provider's client-side chargeback-protection script. Only the client can produce it, and card approval rates measurably depend on it being forwarded — send it whenever you have it."},"presentment_currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Presentment Currency","description":"ISO-4217 currency the payer should be *charged* in, from `GET /v1/wallet/deposit-config`. The wallet is always credited in `asset_code`; a value that is not currently offered falls back to the configured default rather than failing the deposit."}},"type":"object","required":["asset_code","amount_base_units","method_type","idempotency_key"],"title":"DepositIntentCreate"},"DepositIntentCreated":{"properties":{"intent":{"$ref":"#/components/schemas/PaymentIntentRead"},"provider_name":{"type":"string","title":"Provider Name"},"client_params":{"$ref":"#/components/schemas/DepositClientParams"}},"type":"object","required":["intent","provider_name","client_params"],"title":"DepositIntentCreated","description":"Create response: the intent plus the provider handoff. Returned only to the\nauthenticated owner."},"DepositStatus":{"type":"string","enum":["created","pending","confirmed","failed","reversed"],"title":"DepositStatus"},"EntryDetailRead":{"properties":{"direction":{"$ref":"#/components/schemas/EntryDirection"},"account_code":{"type":"string","title":"Account Code"},"account_type":{"type":"string","title":"Account Type"},"owner_type":{"type":"string","title":"Owner Type"},"asset_code":{"type":"string","title":"Asset Code"},"amount_base_units":{"type":"integer","title":"Amount Base Units"},"usd_value_at_posting":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Usd Value At Posting"}},"type":"object","required":["direction","account_code","account_type","owner_type","asset_code","amount_base_units","usd_value_at_posting"],"title":"EntryDetailRead","description":"A single debit or credit line, with a human-readable account code."},"EntryDirection":{"type":"string","enum":["debit","credit"],"title":"EntryDirection"},"Envelope":{"properties":{"data":{"anyOf":[{},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope"},"Envelope_AccountDeletionRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/AccountDeletionRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[AccountDeletionRead]"},"Envelope_ActiveSeedPairRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ActiveSeedPairRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ActiveSeedPairRead]"},"Envelope_BootstrapUser_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/BootstrapUser"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[BootstrapUser]"},"Envelope_ComplianceStatusRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ComplianceStatusRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ComplianceStatusRead]"},"Envelope_DemoSpinEnvelope_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/DemoSpinEnvelope"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[DemoSpinEnvelope]"},"Envelope_DepositConfigRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/DepositConfigRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[DepositConfigRead]"},"Envelope_DepositIntentCreated_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/DepositIntentCreated"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[DepositIntentCreated]"},"Envelope_FaucetResult_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/FaucetResult"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[FaucetResult]"},"Envelope_GameOpenResultRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/GameOpenResultRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[GameOpenResultRead]"},"Envelope_KycStatusRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/KycStatusRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[KycStatusRead]"},"Envelope_MeStatsRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/MeStatsRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[MeStatsRead]"},"Envelope_MultiOpenResultRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/MultiOpenResultRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[MultiOpenResultRead]"},"Envelope_PaymentIntentRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PaymentIntentRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PaymentIntentRead]"},"Envelope_PayoutLinkSessionRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PayoutLinkSessionRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PayoutLinkSessionRead]"},"Envelope_PreferencesRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PreferencesRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PreferencesRead]"},"Envelope_PromoCodeRedemptionRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PromoCodeRedemptionRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PromoCodeRedemptionRead]"},"Envelope_PublicGameRound_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PublicGameRound"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PublicGameRound]"},"Envelope_PublicItemFacts_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PublicItemFacts"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PublicItemFacts]"},"Envelope_PublicPackDetail_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PublicPackDetail"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PublicPackDetail]"},"Envelope_PublicUserInventoryItem_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/PublicUserInventoryItem"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[PublicUserInventoryItem]"},"Envelope_RngVerification_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/RngVerification"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[RngVerification]"},"Envelope_RotateSeedResult_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/RotateSeedResult"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[RotateSeedResult]"},"Envelope_SellbackAllResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/SellbackAllResponse"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[SellbackAllResponse]"},"Envelope_SellbackResponse_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/SellbackResponse"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[SellbackResponse]"},"Envelope_SessionBootstrap_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/SessionBootstrap"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[SessionBootstrap]"},"Envelope_ShipmentQuoteRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShipmentQuoteRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShipmentQuoteRead]"},"Envelope_ShipmentRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShipmentRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShipmentRead]"},"Envelope_ShippingAddressRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShippingAddressRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShippingAddressRead]"},"Envelope_ShippingConfigRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShippingConfigRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShippingConfigRead]"},"Envelope_ShowroomFeed_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShowroomFeed"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShowroomFeed]"},"Envelope_ShowroomItemDetail_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/ShowroomItemDetail"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[ShowroomItemDetail]"},"Envelope_WalletSummary_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/WalletSummary"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[WalletSummary]"},"Envelope_WithdrawalConfigRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/WithdrawalConfigRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[WithdrawalConfigRead]"},"Envelope_WithdrawalQuoteRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/WithdrawalQuoteRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[WithdrawalQuoteRead]"},"Envelope_WithdrawalRead_":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/WithdrawalRead"},{"type":"null"}]},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[WithdrawalRead]"},"Envelope_dict_":{"properties":{"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[dict]"},"Envelope_list_AvailablePromotion__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/AvailablePromotion"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[AvailablePromotion]]"},"Envelope_list_FreePullRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/FreePullRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[FreePullRead]]"},"Envelope_list_GrantProgress__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/GrantProgress"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[GrantProgress]]"},"Envelope_list_PaymentIntentRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PaymentIntentRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PaymentIntentRead]]"},"Envelope_list_PaymentMethodRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PaymentMethodRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PaymentMethodRead]]"},"Envelope_list_PayoutMethodRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PayoutMethodRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PayoutMethodRead]]"},"Envelope_list_PublicBonusGrant__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicBonusGrant"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PublicBonusGrant]]"},"Envelope_list_PublicCategory__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicCategory"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PublicCategory]]"},"Envelope_list_PublicGameRound__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicGameRound"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PublicGameRound]]"},"Envelope_list_PublicPackSummary__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicPackSummary"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PublicPackSummary]]"},"Envelope_list_PublicUserInventoryItem__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/PublicUserInventoryItem"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[PublicUserInventoryItem]]"},"Envelope_list_RecentOpen__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/RecentOpen"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[RecentOpen]]"},"Envelope_list_RevealedSeedPairRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/RevealedSeedPairRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[RevealedSeedPairRead]]"},"Envelope_list_ShipmentRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/ShipmentRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[ShipmentRead]]"},"Envelope_list_ShippingAddressRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/ShippingAddressRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[ShippingAddressRead]]"},"Envelope_list_TestingPromotion__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/TestingPromotion"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[TestingPromotion]]"},"Envelope_list_TransactionRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/TransactionRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[TransactionRead]]"},"Envelope_list_WithdrawalRead__":{"properties":{"data":{"anyOf":[{"items":{"$ref":"#/components/schemas/WithdrawalRead"},"type":"array"},{"type":"null"}],"title":"Data"},"meta":{"$ref":"#/components/schemas/Meta"},"error":{"anyOf":[{"$ref":"#/components/schemas/ApiError"},{"type":"null"}]}},"type":"object","title":"Envelope[list[WithdrawalRead]]"},"FaucetRequest":{"properties":{"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code","default":"USD"},"amount_base_units":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Base Units"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"}},"type":"object","required":["amount_base_units","idempotency_key"],"title":"FaucetRequest"},"FaucetResult":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"credited_base_units":{"type":"integer","title":"Credited Base Units"},"balance_base_units":{"type":"integer","title":"Balance Base Units","description":"Cash balance after the credit."}},"type":"object","required":["asset_code","credited_base_units","balance_base_units"],"title":"FaucetResult"},"FeedItem":{"properties":{"item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents","default":0},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents","default":0},"is_zero_value":{"type":"boolean","title":"Is Zero Value","default":false},"rarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rarity"},"set_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Number"}},"type":"object","title":"FeedItem"},"FreePullOpenBody":{"properties":{"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"}},"type":"object","required":["idempotency_key"],"title":"FreePullOpenBody"},"FreePullRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"quantity_total":{"type":"integer","title":"Quantity Total"},"quantity_remaining":{"type":"integer","title":"Quantity Remaining"},"reward_policy":{"type":"string","title":"Reward Policy"},"status":{"type":"string","title":"Status"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"pack_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Id"},"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"max_win_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Win Usd Cents"},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Slug"},"max_pack_price_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pack Price Usd Cents"}},"type":"object","required":["id","quantity_total","quantity_remaining","reward_policy","status","expires_at"],"title":"FreePullRead"},"GameOpenResultRead":{"properties":{"game_round_id":{"type":"string","format":"uuid","title":"Game Round Id"},"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"rng_event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rng Event Id"},"ticket_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ticket Number"},"item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Item Id"},"item_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"sellback_value_base_units":{"type":"integer","title":"Sellback Value Base Units"},"user_item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Item Id"},"ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ledger Transaction Id"},"idempotent_replay":{"type":"boolean","title":"Idempotent Replay"}},"type":"object","required":["game_round_id","pack_version_id","rng_event_id","ticket_number","item_id","item_name","display_value_usd_cents","sellback_value_usd_cents","sellback_value_base_units","user_item_id","ledger_transaction_id","idempotent_replay"],"title":"GameOpenResultRead"},"GameRoundStatus":{"type":"string","enum":["created","pending_randomness","settling","settled","cancelled","failed","refunded"],"title":"GameRoundStatus"},"GeoStatusRead":{"properties":{"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"restricted":{"type":"boolean","title":"Restricted","default":false},"exempt":{"type":"boolean","title":"Exempt","default":false},"source":{"type":"string","enum":["cloudflare","test","unavailable","none"],"title":"Source","default":"none"}},"type":"object","title":"GeoStatusRead","description":"This request's IP geo. Soft-block is per-request, not sticky on the user."},"GrantProgress":{"properties":{"grant_id":{"type":"string","format":"uuid","title":"Grant Id"},"instrument_type":{"$ref":"#/components/schemas/InstrumentType"},"status":{"$ref":"#/components/schemas/GrantStatus"},"asset_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Code"},"amount_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Usd Cents"},"wagering":{"anyOf":[{"$ref":"#/components/schemas/WageringProgress"},{"type":"null"}]}},"type":"object","required":["grant_id","instrument_type","status","asset_code","amount_usd_cents"],"title":"GrantProgress"},"GrantStatus":{"type":"string","enum":["pending","active","claimed","partially_used","used","released","expired","forfeited","cancelled","voided"],"title":"GrantStatus"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HostedSessionParams":{"properties":{"hosted_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Url"},"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"merchant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Merchant Id"},"env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Env"},"mock":{"type":"boolean","title":"Mock","default":false}},"type":"object","title":"HostedSessionParams","description":"Client params for a provider-hosted UI, the deposit `client_params`\npattern. ``hosted_url`` is loaded in an iframe (or new tab); the mock\nprovider sets ``mock: true`` and no URL."},"InstrumentType":{"type":"string","enum":["cash","bonus_cash","locked_bonus","locked_winnings","free_pull","manual_credit"],"title":"InstrumentType","description":"Reward instruments. Only ``cash``/``locked_bonus``/``free_pull`` are\ncampaign-issuable in V1; ``bonus_cash`` is modeled but disabled, and the\n``locked_*`` derived types are produced by play, never issued. See\ndocs/BONUS_INSTRUMENTS.md and PROMO_ENGINE_INVARIANTS.md (Inv 31-32)."},"ItemFulfillmentType":{"type":"string","enum":["sellback_only","shippable","digital_code"],"title":"ItemFulfillmentType"},"KycStartRequest":{"properties":{"country":{"type":"string","maxLength":2,"minLength":2,"title":"Country","description":"ISO 3166-1 alpha-2."},"first_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Last Name"},"address1":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Address1"},"address2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Address2"},"city":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"State"},"zip_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Zip Code"},"date_of_birth":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Of Birth"},"ssn_last4":{"anyOf":[{"type":"string","pattern":"^\\d{4}$"},{"type":"null"}],"title":"Ssn Last4"},"redirect_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Redirect Url","description":"Return URL after hosted verification. http(s) only. In production the origin must match CLERK_AUTHORIZED_PARTIES."}},"type":"object","required":["country"],"title":"KycStartRequest","description":"Identity submission for withdrawer verification. Relay-only: the fields\nare passed to the verification provider and never stored by Ripster.\n\nUS residents supply the full set (instant database check, or a hosted\nselfie step when the check is inconclusive). Everyone else supplies only\n``country`` and completes identity in the hosted document flow."},"KycStatus":{"type":"string","enum":["not_required","required","pending","approved","rejected","expired"],"title":"KycStatus"},"KycStatusRead":{"properties":{"kyc_status":{"$ref":"#/components/schemas/KycStatus"},"submitted":{"type":"boolean","title":"Submitted"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"verification_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Link"},"rejection_reasons":{"items":{"type":"string"},"type":"array","title":"Rejection Reasons"},"can_withdraw":{"type":"boolean","title":"Can Withdraw"},"can_claim_item":{"type":"boolean","title":"Can Claim Item"}},"type":"object","required":["kyc_status","submitted","provider","verification_link","rejection_reasons","can_withdraw","can_claim_item"],"title":"KycStatusRead","description":"KYC state plus the capability flags it gates, so a client can update\nwithdraw/ship affordances without a second call."},"MeStatsRead":{"properties":{"portfolio_value_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Portfolio Value Usd Cents","description":"Total display value of every item the user currently holds (status `held`), in USD minor units. Falls when a card is sold back or committed to a shipment."},"packs_opened_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Packs Opened Count","description":"Lifetime packs opened — counts PACKS, not cards, and includes free promo pulls (every open is counted the same whether paid or promotional). Never falls when a card leaves the vault."},"biggest_pull_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Biggest Pull Usd Cents","description":"Display value of the single highest-value card ever pulled, in USD minor units — lifetime, kept after sellback or shipping. Null for a user who has pulled nothing."},"cards_owned_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cards Owned Count","description":"How many individual cards the user currently holds (status `held`) — counts CARDS, not packs."}},"type":"object","required":["portfolio_value_usd_cents","packs_opened_count","biggest_pull_usd_cents","cards_owned_count"],"title":"MeStatsRead","description":"Account-home stat tiles (agency #484). ``null`` means \"no figure\" and\nthe client renders its placeholder; ``0`` is a real zero. Money is USD\nminor units; the client formats and never does arithmetic on it."},"MediaKind":{"type":"string","enum":["image","video","gif"],"title":"MediaKind"},"MediaRole":{"type":"string","enum":["hero","gallery","spin","thumb"],"title":"MediaRole"},"Meta":{"properties":{"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id"},"page":{"anyOf":[{"$ref":"#/components/schemas/PageMeta"},{"type":"null"}]},"status_counts":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Status Counts"}},"type":"object","title":"Meta"},"MissionInfo":{"properties":{"required_count":{"type":"integer","title":"Required Count"},"progress_count":{"type":"integer","title":"Progress Count","default":0},"cycle":{"type":"integer","title":"Cycle","default":0},"status":{"type":"string","title":"Status","default":"active"},"spend_usd_cents":{"type":"integer","title":"Spend Usd Cents","default":0},"repeat":{"type":"boolean","title":"Repeat","default":false},"qualifying_packs":{"items":{"$ref":"#/components/schemas/MissionPackRef"},"type":"array","title":"Qualifying Packs"},"reward_instrument":{"$ref":"#/components/schemas/InstrumentType"},"reward_amount_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reward Amount Usd Cents"},"reward_percent_of_spend_bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reward Percent Of Spend Bps"},"reward_free_pull_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reward Free Pull Quantity"}},"type":"object","required":["required_count","reward_instrument"],"title":"MissionInfo","description":"Self-describing mission card: goal, live progress and the reward.\n\n`progress_count`/`cycle`/`status` reflect the caller's current (or latest)\nrun; a user who has not ripped a qualifying pack yet sees zero progress with\nstatus `active`. Exactly one of the `reward_*` value fields is set for money\nrewards; `reward_free_pull_quantity` is set for free-pull rewards."},"MissionPackRef":{"properties":{"pack_id":{"type":"string","format":"uuid","title":"Pack Id"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["pack_id","name"],"title":"MissionPackRef","description":"A pack that counts toward a mission's qualifying rips."},"MultiOpenOutcomeRead":{"properties":{"outcome_index":{"type":"integer","title":"Outcome Index"},"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"rng_event_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Rng Event Id"},"ticket_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ticket Number"},"item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Item Id"},"item_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"sellback_value_base_units":{"type":"integer","title":"Sellback Value Base Units"},"user_item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Item Id"},"is_zero_value":{"type":"boolean","title":"Is Zero Value"}},"type":"object","required":["outcome_index","pack_version_id","rng_event_id","ticket_number","item_id","item_name","display_value_usd_cents","sellback_value_usd_cents","sellback_value_base_units","user_item_id","is_zero_value"],"title":"MultiOpenOutcomeRead"},"MultiOpenResultRead":{"properties":{"game_round_id":{"type":"string","format":"uuid","title":"Game Round Id"},"asset_code":{"type":"string","title":"Asset Code"},"total_price_usd_cents":{"type":"integer","title":"Total Price Usd Cents"},"total_price_base_units":{"type":"integer","title":"Total Price Base Units"},"ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Ledger Transaction Id"},"outcomes":{"items":{"$ref":"#/components/schemas/MultiOpenOutcomeRead"},"type":"array","title":"Outcomes"},"idempotent_replay":{"type":"boolean","title":"Idempotent Replay"}},"type":"object","required":["game_round_id","asset_code","total_price_usd_cents","total_price_base_units","ledger_transaction_id","outcomes","idempotent_replay"],"title":"MultiOpenResultRead"},"MultiPackOpenBody":{"properties":{"pack_version_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":20,"minItems":1,"title":"Pack Version Ids"},"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"},"balance_source":{"type":"string","enum":["cash","bonus","locked_bonus","locked_winnings"],"title":"Balance Source","default":"cash"}},"type":"object","required":["pack_version_ids","asset_code","idempotency_key"],"title":"MultiPackOpenBody"},"OddsMode":{"type":"string","enum":["live","configured"],"title":"OddsMode","description":"How a pack's band probabilities are produced.\n\n``live`` is the only implemented mode: staff author a fixed weight per band\nand link the band to Stock Groups, and which card comes out of a band is\ndecided at open from that band's remaining stock.\n\n``configured`` is a reserved contract value with no engine behind it. It\nonce meant per-band ticket ranges frozen at publish over a tag/value fill\npool that kept churning, which is what made frozen-vs-live RTP drift a\nthing. Retired in ``e0f1a2b3c4d5``."},"PackType":{"type":"string","enum":["transparent","mystery"],"title":"PackType","description":"How much of a pack version's outcome config is disclosed publicly.\n\nBoth values share the same engine: authored band weights pick a band, then\na count-weighted draw over that band's live Stock Group pool picks the card.\n\n``mystery`` publishes value bands only; the card list stays hidden until open.\n``transparent`` (loot box) also fills the public ``items[]`` card list with\nlive per-item odds from the current stock manifest."},"PageMeta":{"properties":{"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has More"}},"type":"object","title":"PageMeta"},"PaymentIntentRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"asset_code":{"type":"string","title":"Asset Code"},"method_type":{"$ref":"#/components/schemas/PaymentMethodType"},"amount_base_units":{"type":"integer","title":"Amount Base Units"},"status":{"$ref":"#/components/schemas/DepositStatus"},"provider_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Name"},"confirm_ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Confirm Ledger Transaction Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"confirmed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Confirmed At"},"failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failed At"},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Code"},"decline_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Code"},"failure_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Message"}},"type":"object","required":["id","user_id","asset_code","method_type","amount_base_units","status","provider_name","confirm_ledger_transaction_id","created_at","confirmed_at"],"title":"PaymentIntentRead"},"PaymentMethodRead":{"properties":{"code":{"type":"string","title":"Code"},"method_type":{"$ref":"#/components/schemas/PaymentMethodType"},"display_name":{"type":"string","title":"Display Name"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["code","method_type","display_name","enabled"],"title":"PaymentMethodRead"},"PaymentMethodType":{"type":"string","enum":["crypto","card","apple_pay","google_pay"],"title":"PaymentMethodType"},"PayoutLinkSessionCreate":{"properties":{"redirect_url":{"type":"string","maxLength":500,"minLength":1,"title":"Redirect Url","description":"Return URL after bank/card linking. http(s) only. In production the origin must match CLERK_AUTHORIZED_PARTIES."}},"type":"object","required":["redirect_url"],"title":"PayoutLinkSessionCreate"},"PayoutLinkSessionRead":{"properties":{"provider_name":{"type":"string","title":"Provider Name"},"client_params":{"$ref":"#/components/schemas/HostedSessionParams"}},"type":"object","required":["provider_name","client_params"],"title":"PayoutLinkSessionRead","description":"Handoff for the hosted bank/card linking UI. The page emits an\n``accountLinked`` postMessage on success and then redirects to\n``client_params.return_url``."},"PayoutMethodRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"kind":{"type":"string","title":"Kind"},"last4":{"type":"string","title":"Last4"},"label":{"type":"string","title":"Label"},"is_default":{"type":"boolean","title":"Is Default"},"linked_at":{"type":"string","format":"date-time","title":"Linked At"}},"type":"object","required":["id","kind","last4","label","is_default","linked_at"],"title":"PayoutMethodRead","description":"A linked payout destination under OUR id. The provider's token never\nleaves the server."},"PreferencesRead":{"properties":{"display_currency":{"type":"string","title":"Display Currency"},"active_wallet_code":{"type":"string","title":"Active Wallet Code"},"depletion_strategy":{"type":"string","title":"Depletion Strategy"}},"type":"object","required":["display_currency","active_wallet_code","depletion_strategy"],"title":"PreferencesRead"},"PreferencesUpdate":{"properties":{"display_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Currency"},"active_wallet_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Active Wallet Code"}},"type":"object","title":"PreferencesUpdate"},"ProfileUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Handle"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"}},"type":"object","title":"ProfileUpdate"},"PromoCodeRedeemRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"}},"type":"object","required":["code","idempotency_key"],"title":"PromoCodeRedeemRequest"},"PromoCodeRedemptionRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"promo_code_id":{"type":"string","format":"uuid","title":"Promo Code Id"},"status":{"type":"string","title":"Status"},"redeemed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Redeemed At"},"campaign_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Campaign Id"},"campaign_type":{"anyOf":[{"$ref":"#/components/schemas/CampaignType"},{"type":"null"}]},"promotion_grant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Promotion Grant Id"},"instrument_type":{"anyOf":[{"$ref":"#/components/schemas/InstrumentType"},{"type":"null"}]},"amount_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Usd Cents"},"free_pull_quantity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Free Pull Quantity"}},"type":"object","required":["id","promo_code_id","status","redeemed_at"],"title":"PromoCodeRedemptionRead"},"PromoCodeStatus":{"type":"string","enum":["active","disabled","expired"],"title":"PromoCodeStatus"},"PublicBalance":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"account_type":{"type":"string","title":"Account Type"},"balance_base_units":{"type":"integer","title":"Balance Base Units"},"balance_display":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Balance Display"},"balance_formatted":{"type":"string","title":"Balance Formatted"}},"type":"object","required":["asset_code","account_type","balance_base_units","balance_display","balance_formatted"],"title":"PublicBalance","description":"One customer-facing ledger balance, without internal account identity.\n\nStaff tooling reads the full account set (including internal item accounting)\nfrom the admin ledger endpoints; consumers only ever see the types they can\nact on or must be shown as a hold."},"PublicBonusGrant":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"asset_code":{"type":"string","title":"Asset Code"},"amount_base_units":{"type":"integer","title":"Amount Base Units"},"destination":{"type":"string","title":"Destination"},"status":{"type":"string","title":"Status"},"promo_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Id"},"wagering_required_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wagering Required Base Units"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"expired_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expired At"}},"type":"object","required":["id","asset_code","amount_base_units","destination","status","promo_id","wagering_required_base_units","created_at","expired_at"],"title":"PublicBonusGrant"},"PublicCategory":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"kind":{"type":"string","title":"Kind","default":"collection"},"accent_hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent Hex"},"bg_hex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bg Hex"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["id","slug","name"],"title":"PublicCategory"},"PublicGameOutcome":{"properties":{"outcome_index":{"type":"integer","title":"Outcome Index"},"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Item Id"},"item_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Item Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"user_item_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Item Id"},"is_zero_value":{"type":"boolean","title":"Is Zero Value"}},"type":"object","required":["outcome_index","pack_version_id","item_id","item_name","image_url","display_value_usd_cents","sellback_value_usd_cents","user_item_id","is_zero_value"],"title":"PublicGameOutcome"},"PublicGameRound":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"game_type":{"type":"string","title":"Game Type"},"status":{"$ref":"#/components/schemas/GameRoundStatus"},"asset_code":{"type":"string","title":"Asset Code"},"price_usd_cents":{"type":"integer","title":"Price Usd Cents"},"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"settled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Settled At"},"outcomes":{"items":{"$ref":"#/components/schemas/PublicGameOutcome"},"type":"array","title":"Outcomes","default":[]}},"type":"object","required":["id","game_type","status","asset_code","price_usd_cents","pack_version_id","pack_name","created_at","settled_at"],"title":"PublicGameRound"},"PublicGrading":{"properties":{"is_graded":{"type":"boolean","title":"Is Graded"},"grader":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grader"},"grade":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Grade"},"grade_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade Label"},"cert_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cert Number"},"slab_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slab Image Url"}},"type":"object","required":["is_graded"],"title":"PublicGrading","description":"Minimal catalogue-item grading object (#199).\n\nA PSA-10 slab is a distinct catalogue SKU; per-copy grading of pulled\n``user_items`` is deferred. ``slab_image_url`` is absolute when a public\nasset base is configured."},"PublicItemFacts":{"properties":{"item_id":{"type":"string","format":"uuid","title":"Item Id"},"card_name":{"type":"string","title":"Card Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"set_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Number"},"rarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rarity"},"set_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Line"},"display_value_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Value Usd Cents"},"display_value_source":{"anyOf":[{"type":"string","enum":["pack_version","catalog"]},{"type":"null"}],"title":"Display Value Source"},"grading":{"anyOf":[{"$ref":"#/components/schemas/PublicItemGrading"},{"type":"null"}]},"facts":{"items":{"type":"string"},"type":"array","title":"Facts","default":[]},"disclaimer":{"type":"string","title":"Disclaimer"}},"type":"object","required":["item_id","card_name","disclaimer"],"title":"PublicItemFacts","description":"Canonical card detail + honest facts for card screens (#201/#202).\n\nServes both the card preview (name / art / value) and the Card Facts\noverlay in one call. Grade badge reads ``grading.grade_label`` (#199)."},"PublicItemGrading":{"properties":{"is_graded":{"type":"boolean","title":"Is Graded"},"grader":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grader"},"grade":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Grade"},"grade_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Grade Label"},"cert_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cert Number"},"slab_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slab Image Url"}},"type":"object","required":["is_graded"],"title":"PublicItemGrading","description":"Minimal catalogue-item grading (#199). Grade badge = ``grade_label``."},"PublicMedia":{"properties":{"kind":{"$ref":"#/components/schemas/MediaKind"},"role":{"$ref":"#/components/schemas/MediaRole"},"url":{"type":"string","title":"Url"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"alt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt"}},"type":"object","required":["kind","role","url"],"title":"PublicMedia","description":"DEPRECATED early gallery entry. Prefer ``asset_key`` + bootstrap ``media_base_url``."},"PublicPackBandOdds":{"properties":{"display_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Label"},"value_min_usd_cents":{"type":"integer","title":"Value Min Usd Cents"},"value_max_usd_cents":{"type":"integer","title":"Value Max Usd Cents"},"average_value_usd_cents":{"type":"integer","title":"Average Value Usd Cents"},"probability_bps":{"type":"integer","title":"Probability Bps"},"probability_ppm":{"type":"integer","title":"Probability Ppm","default":0},"ticket_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ticket Start"},"ticket_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ticket End"}},"type":"object","required":["display_label","value_min_usd_cents","value_max_usd_cents","average_value_usd_cents","probability_bps"],"title":"PublicPackBandOdds","description":"Consumer view of a pack value band: value window + odds.\n\n``probability_bps`` is the band's authored weight and is stable between\npublishes; it does not drift as stock moves. ``ticket_start`` / ``ticket_end``\nare always null here — the ticket space is built per open from the stock\nthat was actually drawable at that moment, and the executed per-item ranges\nare disclosed in the verify response afterwards. Which specific cards sit\ninside the band stays hidden."},"PublicPackDetail":{"properties":{"pack_id":{"type":"string","format":"uuid","title":"Pack Id"},"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cover_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"pack_type":{"$ref":"#/components/schemas/PackType","default":"mystery"},"odds_mode":{"$ref":"#/components/schemas/OddsMode","default":"live"},"version_number":{"type":"integer","title":"Version Number"},"price_usd_cents":{"type":"integer","title":"Price Usd Cents"},"expected_value_usd_cents":{"type":"integer","title":"Expected Value Usd Cents"},"rtp_bps":{"type":"integer","title":"Rtp Bps"},"house_edge_bps":{"type":"integer","title":"House Edge Bps"},"cash_expected_value_usd_cents":{"type":"integer","title":"Cash Expected Value Usd Cents","default":0},"cash_rtp_bps":{"type":"integer","title":"Cash Rtp Bps","default":0},"min_pull_usd_cents":{"type":"integer","title":"Min Pull Usd Cents","default":0},"max_pull_usd_cents":{"type":"integer","title":"Max Pull Usd Cents","default":0},"volatility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volatility"},"sellable":{"type":"boolean","title":"Sellable","default":true},"category_slugs":{"items":{"type":"string"},"type":"array","title":"Category Slugs","default":[]},"collection_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Slug"},"tier_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Slug"},"ticket_upper_bound":{"type":"integer","title":"Ticket Upper Bound"},"items":{"items":{"$ref":"#/components/schemas/PublicPackItemOdds"},"type":"array","title":"Items","default":[]},"bands":{"items":{"$ref":"#/components/schemas/PublicPackBandOdds"},"type":"array","title":"Bands","default":[]},"variants":{"items":{"$ref":"#/components/schemas/PublicPackVariant"},"type":"array","title":"Variants","default":[]},"odds_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Odds Updated At"},"odds_revision":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Odds Revision"}},"type":"object","required":["pack_id","pack_version_id","slug","name","description","cover_image_url","version_number","price_usd_cents","expected_value_usd_cents","rtp_bps","house_edge_bps","ticket_upper_bound"],"title":"PublicPackDetail"},"PublicPackItemOdds":{"properties":{"item_id":{"type":"string","format":"uuid","title":"Item Id"},"name":{"type":"string","title":"Name"},"image_url":{"type":"string","title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"probability_bps":{"type":"integer","title":"Probability Bps"},"probability_ppm":{"type":"integer","title":"Probability Ppm","default":0},"ticket_start":{"type":"integer","title":"Ticket Start","default":0},"ticket_end":{"type":"integer","title":"Ticket End","default":0},"is_zero_value":{"type":"boolean","title":"Is Zero Value"},"rarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rarity"},"set_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Number"},"media":{"items":{"$ref":"#/components/schemas/PublicMedia"},"type":"array","title":"Media","default":[]}},"type":"object","required":["item_id","name","image_url","display_value_usd_cents","sellback_value_usd_cents","probability_bps","is_zero_value"],"title":"PublicPackItemOdds"},"PublicPackSummary":{"properties":{"pack_id":{"type":"string","format":"uuid","title":"Pack Id"},"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cover_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cover Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"pack_type":{"$ref":"#/components/schemas/PackType","default":"mystery"},"odds_mode":{"$ref":"#/components/schemas/OddsMode","default":"live"},"version_number":{"type":"integer","title":"Version Number"},"price_usd_cents":{"type":"integer","title":"Price Usd Cents"},"expected_value_usd_cents":{"type":"integer","title":"Expected Value Usd Cents"},"rtp_bps":{"type":"integer","title":"Rtp Bps"},"house_edge_bps":{"type":"integer","title":"House Edge Bps"},"cash_expected_value_usd_cents":{"type":"integer","title":"Cash Expected Value Usd Cents","default":0},"cash_rtp_bps":{"type":"integer","title":"Cash Rtp Bps","default":0},"min_pull_usd_cents":{"type":"integer","title":"Min Pull Usd Cents","default":0},"max_pull_usd_cents":{"type":"integer","title":"Max Pull Usd Cents","default":0},"volatility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volatility"},"sellable":{"type":"boolean","title":"Sellable","default":true},"category_slugs":{"items":{"type":"string"},"type":"array","title":"Category Slugs","default":[]},"collection_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Slug"},"tier_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Slug"}},"type":"object","required":["pack_id","pack_version_id","slug","name","description","cover_image_url","version_number","price_usd_cents","expected_value_usd_cents","rtp_bps","house_edge_bps"],"title":"PublicPackSummary"},"PublicPackVariant":{"properties":{"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"volatility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Volatility"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"price_usd_cents":{"type":"integer","title":"Price Usd Cents"}},"type":"object","required":["pack_version_id","price_usd_cents"],"title":"PublicPackVariant","description":"One published sibling in a pack's volatility variant group."},"PublicRgLimitsRequest":{"properties":{"daily_deposit_limit_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Daily Deposit Limit Base Units"},"weekly_deposit_limit_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Weekly Deposit Limit Base Units"},"daily_spend_limit_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Daily Spend Limit Base Units"},"weekly_spend_limit_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Weekly Spend Limit Base Units"},"daily_withdrawal_limit_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Daily Withdrawal Limit Base Units"},"session_limit_minutes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Session Limit Minutes"}},"type":"object","title":"PublicRgLimitsRequest","description":"User-set responsible-gaming caps. ``null`` or omitted leaves that field\nunchanged; ``0`` clears it (no cap). Amounts are USD cents."},"PublicSelfExclusionRequest":{"properties":{"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Reason"}},"type":"object","title":"PublicSelfExclusionRequest","description":"User-initiated self-exclusion. ``ends_at`` null = indefinite (support\nlifts it); otherwise must be a future, timezone-aware timestamp."},"PublicUserInventoryItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"name":{"type":"string","title":"Name"},"image_url":{"type":"string","title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"rarity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rarity"},"item_type":{"anyOf":[{"$ref":"#/components/schemas/ItemFulfillmentType"},{"type":"null"}]},"status":{"$ref":"#/components/schemas/UserItemStatus"},"can_ship":{"type":"boolean","title":"Can Ship","default":false},"ship_blocked_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ship Blocked Reason"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"sellback_value_usd_cents":{"type":"integer","title":"Sellback Value Usd Cents"},"display_multiplier":{"type":"number","title":"Display Multiplier","default":1.0},"sellback_ratio":{"type":"number","title":"Sellback Ratio","default":1.0},"boosted_fmv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Boosted Fmv Pct"},"set_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Number"},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"pack_price_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pack Price Usd Cents"},"from_free_pull":{"type":"boolean","title":"From Free Pull","default":false},"from_bonus":{"type":"boolean","title":"From Bonus","default":false},"profit_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Usd Cents"},"unrealized_profit_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unrealized Profit Usd Cents"},"auto_sell_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Auto Sell At"},"auto_sell_value_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Sell Value Usd Cents"},"sold_back_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sold Back At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"is_active":{"type":"boolean","title":"Is Active"},"media":{"items":{"$ref":"#/components/schemas/PublicMedia"},"type":"array","title":"Media","default":[]}},"type":"object","required":["id","item_id","name","image_url","rarity","status","display_value_usd_cents","sellback_value_usd_cents","pack_name","pack_price_usd_cents","profit_usd_cents","unrealized_profit_usd_cents","sold_back_at","created_at","is_active"],"title":"PublicUserInventoryItem"},"RateRead":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"rate_to_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate To Usd"},"is_stale":{"type":"boolean","title":"Is Stale"}},"type":"object","required":["asset_code","rate_to_usd","is_stale"],"title":"RateRead","description":"USD value of 1 unit of an asset, for client-side price formatting."},"RecentOpen":{"properties":{"event_id":{"type":"string","title":"Event Id"},"occurred_at":{"type":"string","title":"Occurred At"},"game_round_id":{"type":"string","title":"Game Round Id"},"user_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Handle"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"pack_version_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Version Id"},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Image Url"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"price_usd_cents":{"type":"integer","title":"Price Usd Cents","default":0},"best_item":{"anyOf":[{"$ref":"#/components/schemas/FeedItem"},{"type":"null"}]},"items":{"items":{"$ref":"#/components/schemas/FeedItem"},"type":"array","title":"Items","default":[]},"total_display_value_usd_cents":{"type":"integer","title":"Total Display Value Usd Cents","default":0},"outcome_count":{"type":"integer","title":"Outcome Count","default":0}},"type":"object","required":["event_id","occurred_at","game_round_id"],"title":"RecentOpen","description":"One pack-open event for the live feed.\n\nThe global feed omits ``user_id`` (only the anonymized ``user_handle`` is\nexposed); the per-user feed includes ``user_id`` for the owner."},"RevealedSeedPairRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"server_seed_hash":{"type":"string","title":"Server Seed Hash"},"server_seed":{"type":"string","title":"Server Seed"},"client_seed":{"type":"string","title":"Client Seed"},"next_nonce":{"type":"integer","title":"Next Nonce"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"revealed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revealed At"}},"type":"object","required":["id","server_seed_hash","server_seed","client_seed","next_nonce","created_at","revealed_at"],"title":"RevealedSeedPairRead"},"RngVerification":{"properties":{"game_round_id":{"type":"string","format":"uuid","title":"Game Round Id"},"rng_event_id":{"type":"string","format":"uuid","title":"Rng Event Id"},"algorithm":{"type":"string","title":"Algorithm"},"algorithm_version":{"type":"string","title":"Algorithm Version"},"upper_bound":{"type":"integer","title":"Upper Bound"},"ticket_number":{"type":"integer","title":"Ticket Number"},"server_seed_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Seed Hash"},"server_seed_revealed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Seed Revealed"},"client_seed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Seed"},"nonce":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nonce"},"external_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Source"},"proof_payload":{"additionalProperties":true,"type":"object","title":"Proof Payload"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"verifiable":{"type":"boolean","title":"Verifiable","default":false},"verification_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Note"},"legs":{"items":{"$ref":"#/components/schemas/RngVerificationLeg"},"type":"array","title":"Legs","default":[]}},"type":"object","required":["game_round_id","rng_event_id","algorithm","algorithm_version","upper_bound","ticket_number","server_seed_hash","server_seed_revealed","client_seed","nonce","external_source","proof_payload"],"title":"RngVerification"},"RngVerificationLeg":{"properties":{"outcome_index":{"type":"integer","title":"Outcome Index"},"rng_event_id":{"type":"string","format":"uuid","title":"Rng Event Id"},"provider":{"type":"string","title":"Provider"},"algorithm":{"type":"string","title":"Algorithm"},"algorithm_version":{"type":"string","title":"Algorithm Version"},"upper_bound":{"type":"integer","title":"Upper Bound"},"ticket_number":{"type":"integer","title":"Ticket Number"},"server_seed_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Seed Hash"},"server_seed_revealed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Seed Revealed"},"client_seed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Seed"},"nonce":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nonce"},"proof_payload":{"additionalProperties":true,"type":"object","title":"Proof Payload"},"verifiable":{"type":"boolean","title":"Verifiable"},"outcome_table":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Outcome Table","default":[]},"manifest_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manifest Hash"}},"type":"object","required":["outcome_index","rng_event_id","provider","algorithm","algorithm_version","upper_bound","ticket_number","server_seed_hash","server_seed_revealed","client_seed","nonce","proof_payload","verifiable"],"title":"RngVerificationLeg","description":"Per-outcome proof material (one leg of a single- or multi-pack open)."},"RotateSeedResult":{"properties":{"revealed":{"$ref":"#/components/schemas/RevealedSeedPairRead"},"active":{"$ref":"#/components/schemas/ActiveSeedPairRead"}},"type":"object","required":["revealed","active"],"title":"RotateSeedResult"},"SellbackAllRequest":{"properties":{"user_item_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":500,"minItems":1,"title":"User Item Ids","description":"Held items to sell (must be yours). Other vault cards are left alone."}},"type":"object","required":["user_item_ids"],"title":"SellbackAllRequest","description":"Ids from this rip — never an implicit whole-vault sweep."},"SellbackAllResponse":{"properties":{"sold":{"type":"integer","title":"Sold"},"skipped":{"type":"integer","title":"Skipped"},"failed":{"type":"integer","title":"Failed"},"remaining":{"type":"integer","title":"Remaining"},"credited_usd_cents":{"type":"integer","title":"Credited Usd Cents","default":0}},"type":"object","required":["sold","skipped","failed","remaining"],"title":"SellbackAllResponse","description":"One batch of a sell-everything sweep; repeat while ``remaining`` > 0."},"SellbackRequest":{"properties":{"idempotency_key":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Idempotency Key"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"}},"type":"object","title":"SellbackRequest"},"SellbackResponse":{"properties":{"user_item_id":{"type":"string","format":"uuid","title":"User Item Id"},"status":{"$ref":"#/components/schemas/UserItemStatus"},"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"transaction_type":{"$ref":"#/components/schemas/TransactionType"},"transaction_status":{"$ref":"#/components/schemas/TransactionStatus"},"idempotent_replay":{"type":"boolean","title":"Idempotent Replay"}},"type":"object","required":["user_item_id","status","transaction_id","transaction_type","transaction_status","idempotent_replay"],"title":"SellbackResponse"},"SessionBootstrap":{"properties":{"user":{"anyOf":[{"$ref":"#/components/schemas/BootstrapUser"},{"type":"null"}]},"wallet":{"anyOf":[{"$ref":"#/components/schemas/WalletSummary"},{"type":"null"}]},"compliance":{"anyOf":[{"$ref":"#/components/schemas/ComplianceStatusRead"},{"type":"null"}]},"feature_flags":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Feature Flags"},"assets":{"items":{"$ref":"#/components/schemas/modules__public__schemas__AssetRead"},"type":"array","title":"Assets"},"rates":{"items":{"$ref":"#/components/schemas/RateRead"},"type":"array","title":"Rates","default":[]},"preferences":{"anyOf":[{"$ref":"#/components/schemas/PreferencesRead"},{"type":"null"}]},"restrictions":{"items":{"type":"string"},"type":"array","title":"Restrictions","default":[]},"media_base_url":{"type":"string","title":"Media Base Url","default":""},"auto_sell_period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Auto Sell Period Days"},"max_items_per_shipment":{"type":"integer","minimum":1.0,"title":"Max Items Per Shipment","description":"Backoffice cap on cards in one shipment. Same value as GET /v1/shipping/config. Cap the selector from this; do not hardcode."},"account_deletion":{"anyOf":[{"$ref":"#/components/schemas/AccountDeletionRead"},{"type":"null"}]},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Email"}},"type":"object","required":["feature_flags","assets","max_items_per_shipment"],"title":"SessionBootstrap","description":"App-startup aggregate. Auth is optional: anonymous callers get the\npublic config (flags, assets, rates, ``media_base_url``) with the four\nuser-scoped fields null; authenticated callers get everything."},"ShipmentCreateRequest":{"properties":{"quote_id":{"type":"string","format":"uuid","title":"Quote Id"},"rate_id":{"type":"string","maxLength":64,"minLength":1,"title":"Rate Id"},"jurisdiction_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Jurisdiction Country Code"},"jurisdiction_region_code":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Jurisdiction Region Code"}},"type":"object","required":["quote_id","rate_id"],"title":"ShipmentCreateRequest"},"ShipmentItemRead":{"properties":{"user_item_id":{"type":"string","format":"uuid","title":"User Item Id"},"declared_value_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Declared Value Usd Cents"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"display_value_usd_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Value Usd Cents"}},"type":"object","required":["user_item_id","declared_value_usd_cents"],"title":"ShipmentItemRead"},"ShipmentQuoteRead":{"properties":{"quote_id":{"type":"string","format":"uuid","title":"Quote Id"},"user_item_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"User Item Ids"},"shipping_address_id":{"type":"string","format":"uuid","title":"Shipping Address Id"},"options":{"items":{"$ref":"#/components/schemas/ShippingOptionRead"},"type":"array","title":"Options"},"is_international":{"type":"boolean","title":"Is International"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"cash_balance_usd_cents":{"type":"integer","title":"Cash Balance Usd Cents"}},"type":"object","required":["quote_id","user_item_ids","shipping_address_id","options","is_international","expires_at","cash_balance_usd_cents"],"title":"ShipmentQuoteRead"},"ShipmentQuoteRequest":{"properties":{"user_item_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"User Item Ids"},"shipping_address_id":{"type":"string","format":"uuid","title":"Shipping Address Id"}},"type":"object","required":["user_item_ids","shipping_address_id"],"title":"ShipmentQuoteRequest"},"ShipmentRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"shipping_address_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Shipping Address Id"},"status":{"$ref":"#/components/schemas/ShipmentStatus"},"items":{"items":{"$ref":"#/components/schemas/ShipmentItemRead"},"type":"array","title":"Items"},"fee_charged_usd_cents":{"type":"integer","title":"Fee Charged Usd Cents"},"carrier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier"},"service_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Name"},"tracking_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Number"},"tracking_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Url"},"is_international":{"type":"boolean","title":"Is International"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"packed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Packed At"},"shipped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Shipped At"},"delivered_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Delivered At"},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"returned_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Returned At"},"tracking_events":{"items":{"$ref":"#/components/schemas/ShipmentTrackingEventRead"},"type":"array","title":"Tracking Events","default":[]}},"type":"object","required":["id","user_id","shipping_address_id","status","items","fee_charged_usd_cents","carrier","service_name","tracking_number","tracking_url","is_international","created_at","packed_at","shipped_at","delivered_at","cancelled_at","returned_at"],"title":"ShipmentRead"},"ShipmentStatus":{"type":"string","enum":["pending","packing","shipped","delivered","cancelled","returned"],"title":"ShipmentStatus"},"ShipmentTrackingEventRead":{"properties":{"status":{"type":"string","title":"Status"},"substatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Substatus"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At"}},"type":"object","required":["status","substatus","location","message","occurred_at"],"title":"ShipmentTrackingEventRead"},"ShippingAddressCreate":{"properties":{"recipient_name":{"type":"string","maxLength":200,"minLength":1,"title":"Recipient Name"},"line1":{"type":"string","maxLength":200,"minLength":1,"title":"Line1"},"line2":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Line2"},"city":{"type":"string","maxLength":120,"minLength":1,"title":"City"},"region":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Region"},"postal_code":{"type":"string","maxLength":32,"minLength":1,"title":"Postal Code"},"country_code":{"type":"string","maxLength":2,"minLength":2,"title":"Country Code"},"phone":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Phone"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["recipient_name","line1","city","postal_code","country_code"],"title":"ShippingAddressCreate"},"ShippingAddressRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"recipient_name":{"type":"string","title":"Recipient Name"},"line1":{"type":"string","title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"city":{"type":"string","title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"type":"string","title":"Postal Code"},"country_code":{"type":"string","title":"Country Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_default":{"type":"boolean","title":"Is Default"},"validation_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Validation Result"},"is_residential":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Residential"},"validation_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Details"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","user_id","recipient_name","line1","line2","city","region","postal_code","country_code","phone","is_default","validation_result","is_residential","validation_details","created_at"],"title":"ShippingAddressRead"},"ShippingAddressUpdate":{"properties":{"recipient_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Recipient Name"},"line1":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Line1"},"line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Line2"},"city":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"City"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"postal_code":{"anyOf":[{"type":"string","maxLength":20,"minLength":1},{"type":"null"}],"title":"Postal Code"},"country_code":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Country Code"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"ShippingAddressUpdate"},"ShippingConfigRead":{"properties":{"allowed_countries":{"items":{"type":"string"},"type":"array","title":"Allowed Countries","description":"ISO alpha-2 destinations we ship to; empty list = worldwide."},"destinations":{"items":{"$ref":"#/components/schemas/ShippingDestinationRead"},"type":"array","title":"Destinations","description":"Structured picker data for the allowed countries. A country can appear in allowed_countries without an entry here (we ship there but have no region data yet) — fall back to free-text fields."},"max_items_per_shipment":{"type":"integer","title":"Max Items Per Shipment"},"quote_ttl_minutes":{"type":"integer","title":"Quote Ttl Minutes"},"min_shippable_value_usd_cents":{"type":"integer","title":"Min Shippable Value Usd Cents"}},"type":"object","required":["allowed_countries","destinations","max_items_per_shipment","quote_ttl_minutes","min_shippable_value_usd_cents"],"title":"ShippingConfigRead","description":"Client-facing shipping rules as currently configured in the backoffice.\nRead this before rendering the ship flow rather than hardcoding limits."},"ShippingDestinationRead":{"properties":{"code":{"type":"string","title":"Code","description":"ISO 3166-1 alpha-2 country code."},"name":{"type":"string","title":"Name"},"region_label":{"type":"string","title":"Region Label","description":"e.g. \"State\" or \"Province\"."},"postal_code_label":{"type":"string","title":"Postal Code Label","description":"e.g. \"ZIP code\" or \"Postal code\"."},"regions":{"items":{"$ref":"#/components/schemas/ShippingRegionRead"},"type":"array","title":"Regions"}},"type":"object","required":["code","name","region_label","postal_code_label","regions"],"title":"ShippingDestinationRead","description":"Everything the address form needs for one destination country — name,\nfield labels and the region picker — so clients hold no geography data."},"ShippingOptionRead":{"properties":{"rate_id":{"type":"string","title":"Rate Id"},"carrier":{"type":"string","title":"Carrier"},"service_name":{"type":"string","title":"Service Name"},"amount_usd_cents":{"type":"integer","title":"Amount Usd Cents"},"estimated_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Days"},"attributes":{"items":{"type":"string"},"type":"array","title":"Attributes","default":[]},"sufficient_funds":{"type":"boolean","title":"Sufficient Funds","default":true},"shortfall_usd_cents":{"type":"integer","title":"Shortfall Usd Cents","default":0},"suggested_deposit_usd_cents":{"type":"integer","title":"Suggested Deposit Usd Cents","default":0}},"type":"object","required":["rate_id","carrier","service_name","amount_usd_cents"],"title":"ShippingOptionRead"},"ShippingRegionRead":{"properties":{"code":{"type":"string","title":"Code","description":"Carrier-expected region code (e.g. NV, ON)."},"name":{"type":"string","title":"Name"}},"type":"object","required":["code","name"],"title":"ShippingRegionRead"},"ShowroomFeed":{"properties":{"groups":{"items":{"$ref":"#/components/schemas/ShowroomGroup"},"type":"array","title":"Groups"}},"type":"object","title":"ShowroomFeed"},"ShowroomGroup":{"properties":{"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Image Url"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"pulls":{"items":{"$ref":"#/components/schemas/ShowroomPull"},"type":"array","title":"Pulls"}},"type":"object","title":"ShowroomGroup"},"ShowroomItemDetail":{"properties":{"user_item_id":{"type":"string","format":"uuid","title":"User Item Id"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"name":{"type":"string","title":"Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"slab_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slab Image Url"},"set_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set Line"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"grading":{"anyOf":[{"$ref":"#/components/schemas/PublicGrading"},{"type":"null"}]},"pack_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Name"},"pack_version_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Pack Version Id"},"pack_asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Asset Key"},"pulled_at":{"type":"string","format":"date-time","title":"Pulled At"},"user_handle":{"type":"string","title":"User Handle"}},"type":"object","required":["user_item_id","item_id","name","display_value_usd_cents","pulled_at","user_handle"],"title":"ShowroomItemDetail","description":"Deep-link payload for a curated showroom pull (#199 §3)."},"ShowroomPull":{"properties":{"user_item_id":{"type":"string","format":"uuid","title":"User Item Id"},"item_id":{"type":"string","format":"uuid","title":"Item Id"},"name":{"type":"string","title":"Name"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"asset_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Key"},"display_value_usd_cents":{"type":"integer","title":"Display Value Usd Cents"},"grading":{"anyOf":[{"$ref":"#/components/schemas/PublicGrading"},{"type":"null"}]},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"}},"type":"object","required":["user_item_id","item_id","name","display_value_usd_cents"],"title":"ShowroomPull"},"SinglePackOpenBody":{"properties":{"pack_version_id":{"type":"string","format":"uuid","title":"Pack Version Id"},"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"},"balance_source":{"type":"string","enum":["cash","bonus","locked_bonus","locked_winnings"],"title":"Balance Source","default":"cash"}},"type":"object","required":["pack_version_id","asset_code","idempotency_key"],"title":"SinglePackOpenBody"},"TestingPromoCode":{"properties":{"code_id":{"type":"string","format":"uuid","title":"Code Id"},"code":{"type":"string","title":"Code"},"status":{"$ref":"#/components/schemas/PromoCodeStatus"},"max_redemptions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Redemptions"},"max_redemptions_per_user":{"type":"integer","title":"Max Redemptions Per User"},"redemption_count":{"type":"integer","title":"Redemption Count"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"}},"type":"object","required":["code_id","code","status","max_redemptions_per_user","redemption_count"],"title":"TestingPromoCode"},"TestingPromoVersion":{"properties":{"version_id":{"type":"string","format":"uuid","title":"Version Id"},"version_number":{"type":"integer","title":"Version Number"},"status":{"$ref":"#/components/schemas/CampaignStatus"},"terms_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Title"},"terms_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Summary"},"codes":{"items":{"$ref":"#/components/schemas/TestingPromoCode"},"type":"array","title":"Codes"}},"type":"object","required":["version_id","version_number","status"],"title":"TestingPromoVersion"},"TestingPromotion":{"properties":{"campaign_id":{"type":"string","format":"uuid","title":"Campaign Id"},"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"campaign_type":{"$ref":"#/components/schemas/CampaignType"},"status":{"$ref":"#/components/schemas/CampaignStatus"},"visibility":{"$ref":"#/components/schemas/CampaignVisibility"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"versions":{"items":{"$ref":"#/components/schemas/TestingPromoVersion"},"type":"array","title":"Versions"},"publicly_listed":{"type":"boolean","title":"Publicly Listed","description":"Whether GET /v1/promotions includes this campaign right now."},"redeemable":{"type":"boolean","title":"Redeemable","description":"Whether redeem / deposit-match can succeed (campaign+version published, in window, active code when required). Unlisted can still be redeemable."},"readiness":{"items":{"type":"string"},"type":"array","title":"Readiness","description":"Human blockers for listing and/or redeem."}},"type":"object","required":["campaign_id","code","name","description","campaign_type","status","visibility","starts_at","ends_at","publicly_listed","redeemable"],"title":"TestingPromotion","description":"Full campaign dump for playground/admin testing. Never exposed in production."},"TransactionRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"transaction_type":{"$ref":"#/components/schemas/TransactionType"},"status":{"$ref":"#/components/schemas/TransactionStatus"},"idempotency_key":{"type":"string","title":"Idempotency Key"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"posted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Posted At"},"entries":{"items":{"$ref":"#/components/schemas/EntryDetailRead"},"type":"array","title":"Entries"}},"type":"object","required":["id","transaction_type","status","idempotency_key","correlation_id","description","created_at","posted_at","entries"],"title":"TransactionRead"},"TransactionStatus":{"type":"string","enum":["pending","posted","reversed","failed"],"title":"TransactionStatus"},"TransactionType":{"type":"string","enum":["manual_credit","manual_debit","deposit_confirmed","deposit_reversed","withdrawal_requested","withdrawal_cancelled","withdrawal_paid","withdrawal_failed","payout_fee","pack_opened","pack_opened_mock","item_won","item_sold_back","item_sold_back_mock","item_claim_requested","bonus_issued","bonus_released","bonus_expired","fee_charged","game_pack_opened","game_multi_pack_opened","game_item_sold_back","item_claim_fulfilled","item_claim_cancelled","shipping_fee_charged","shipping_fee_refunded","shipping_label_purchased","chargeback_hold_placed","chargeback_hold_released","promo_grant_issued","promo_bonus_released","promo_bonus_forfeited","promo_winnings_released","promo_item_unlocked","promo_free_pull_settled"],"title":"TransactionType"},"UserItemStatus":{"type":"string","enum":["held","sold_back","claim_requested","packing","shipped","delivered","cancelled","returned","expired","voided"],"title":"UserItemStatus"},"UserStatus":{"type":"string","enum":["active","suspended","closed"],"title":"UserStatus"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WageringProgress":{"properties":{"required_usd_cents":{"type":"integer","title":"Required Usd Cents"},"contributed_usd_cents":{"type":"integer","title":"Contributed Usd Cents"},"remaining_usd_cents":{"type":"integer","title":"Remaining Usd Cents"},"status":{"type":"string","title":"Status"}},"type":"object","required":["required_usd_cents","contributed_usd_cents","remaining_usd_cents","status"],"title":"WageringProgress"},"WalletAssetBalance":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"name":{"type":"string","title":"Name"},"symbol":{"type":"string","title":"Symbol"},"asset_type":{"type":"string","title":"Asset Type"},"display_decimals":{"type":"integer","title":"Display Decimals"},"balance_base_units":{"type":"integer","title":"Balance Base Units"},"balance_display":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Balance Display"},"balance_formatted":{"type":"string","title":"Balance Formatted"},"usd_value_cents":{"type":"integer","title":"Usd Value Cents"},"display_currency":{"type":"string","title":"Display Currency"},"display_value_base_units":{"type":"integer","title":"Display Value Base Units"},"display_value_formatted":{"type":"string","title":"Display Value Formatted"},"is_active_wallet":{"type":"boolean","title":"Is Active Wallet"},"rate_is_stale":{"type":"boolean","title":"Rate Is Stale"},"withdrawable_base_units":{"type":"integer","title":"Withdrawable Base Units","default":0},"playthrough_remaining_base_units":{"type":"integer","title":"Playthrough Remaining Base Units","default":0},"daily_limit_remaining_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Limit Remaining Base Units","description":"Remaining of this user's rolling 24h withdrawal cap for this asset. Null = no cap (global off and no personal RG cap). 0 = cap exhausted. Non-USD rows are null: payouts are USD-only today."},"withdrawable_formatted":{"type":"string","title":"Withdrawable Formatted","readOnly":true},"playthrough_remaining_formatted":{"type":"string","title":"Playthrough Remaining Formatted","readOnly":true},"daily_limit_remaining_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Daily Limit Remaining Formatted","readOnly":true}},"type":"object","required":["asset_code","name","symbol","asset_type","display_decimals","balance_base_units","balance_display","balance_formatted","usd_value_cents","display_currency","display_value_base_units","display_value_formatted","is_active_wallet","rate_is_stale","withdrawable_formatted","playthrough_remaining_formatted","daily_limit_remaining_formatted"],"title":"WalletAssetBalance","description":"A spendable wallet currency's cash balance, valued in USD and the user's\ndisplay currency. Stale (live) valuations are flagged, not hidden."},"WalletSummary":{"properties":{"balances":{"items":{"$ref":"#/components/schemas/PublicBalance"},"type":"array","title":"Balances"},"display_currency":{"type":"string","title":"Display Currency","default":"USD"},"active_wallet_code":{"type":"string","title":"Active Wallet Code","default":"USD"},"wallets":{"items":{"$ref":"#/components/schemas/WalletAssetBalance"},"type":"array","title":"Wallets","default":[]},"combined_estimate":{"anyOf":[{"$ref":"#/components/schemas/CombinedEstimate"},{"type":"null"}]}},"type":"object","required":["balances"],"title":"WalletSummary"},"WithdrawalConfigRead":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"supported_assets":{"items":{"type":"string"},"type":"array","title":"Supported Assets"},"min_amount_base_units":{"type":"integer","title":"Min Amount Base Units"},"max_amount_base_units":{"type":"integer","title":"Max Amount Base Units"},"daily_limit_base_units":{"type":"integer","title":"Daily Limit Base Units"},"auto_approve_max_base_units":{"type":"integer","title":"Auto Approve Max Base Units","default":0},"enabled_speeds":{"items":{"type":"string"},"type":"array","title":"Enabled Speeds"},"withdrawal_methods":{"items":{"$ref":"#/components/schemas/WithdrawalMethodRead"},"type":"array","title":"Withdrawal Methods"},"fee_mode":{"type":"string","title":"Fee Mode"},"below_min_policy":{"type":"string","title":"Below Min Policy","default":"pass_fee"},"support_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Email"},"manual_approval":{"type":"boolean","title":"Manual Approval","description":"True while some withdrawals may wait in the review queue. Branch customer copy on each row's `awaiting_review` — a create can return `requested` (review) or `processing`/`paid` (already sent) depending on KYC, payment-risk flags, and `auto_approve_max_base_units`."},"payouts_enabled":{"type":"boolean","title":"Payouts Enabled"},"playthrough_enforced":{"type":"boolean","title":"Playthrough Enforced","default":false},"withdrawable_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Withdrawable Base Units","description":"Deprecated. Read withdrawable_base_units from GET /v1/me/wallet wallets[] — this copy and the wallet refresh on different clocks.","deprecated":true},"playthrough_remaining_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Playthrough Remaining Base Units","description":"Deprecated. Read playthrough_remaining_base_units from GET /v1/me/wallet wallets[].","deprecated":true},"min_amount_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Amount Formatted","readOnly":true},"max_amount_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Max Amount Formatted","readOnly":true},"daily_limit_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Daily Limit Formatted","readOnly":true},"auto_approve_max_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auto Approve Max Formatted","readOnly":true},"withdrawable_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Withdrawable Formatted","deprecated":true,"readOnly":true}},"type":"object","required":["asset_code","supported_assets","min_amount_base_units","max_amount_base_units","daily_limit_base_units","enabled_speeds","withdrawal_methods","fee_mode","manual_approval","payouts_enabled","min_amount_formatted","max_amount_formatted","daily_limit_formatted","auto_approve_max_formatted","withdrawable_formatted"],"title":"WithdrawalConfigRead","description":"Withdrawal rules as currently configured in the backoffice. Read before\nrendering a withdrawal screen — staff change these without a client release."},"WithdrawalCreate":{"properties":{"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code"},"amount_base_units":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Base Units"},"idempotency_key":{"type":"string","maxLength":200,"minLength":1,"title":"Idempotency Key"},"destination_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Destination Id","description":"A destination id from listPayoutMethods. Triggers an automatic provider payout."},"speed":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}],"title":"Speed","description":"Payout speed (see getWithdrawalConfig). Defaults to 'instant' for card destinations and 'standard' otherwise."},"expected_fee_base_units":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Expected Fee Base Units","description":"The fee shown to the user (from createWithdrawalQuote). If the live price differs the request fails with 409 `quote_changed` instead of paying out a surprise amount."}},"type":"object","required":["asset_code","amount_base_units","idempotency_key"],"title":"WithdrawalCreate"},"WithdrawalDestinationRead":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"kind":{"type":"string","title":"Kind"},"last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last4"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["kind"],"title":"WithdrawalDestinationRead","description":"Display snapshot of the payout destination, frozen at request time so\nthe row renders forever even after the destination is unlinked."},"WithdrawalMethodRead":{"properties":{"method_type":{"type":"string","title":"Method Type"},"display_name":{"type":"string","title":"Display Name"},"enabled":{"type":"boolean","title":"Enabled"},"speeds":{"items":{"type":"string"},"type":"array","title":"Speeds"}},"type":"object","required":["method_type","display_name","enabled","speeds"],"title":"WithdrawalMethodRead","description":"A way money can leave — our own enum, deliberately not merged into the\ndeposit ``PaymentMethodType``: deposit rails and payout rails are\ndifferent products with different lifecycles."},"WithdrawalQuoteCreate":{"properties":{"asset_code":{"type":"string","maxLength":16,"minLength":1,"title":"Asset Code","default":"USD"},"amount_base_units":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Base Units"},"destination_id":{"type":"string","format":"uuid","title":"Destination Id"}},"type":"object","required":["amount_base_units","destination_id"],"title":"WithdrawalQuoteCreate"},"WithdrawalQuoteOptionRead":{"properties":{"speed":{"type":"string","title":"Speed"},"fee_base_units":{"type":"integer","title":"Fee Base Units"},"net_base_units":{"type":"integer","title":"Net Base Units"},"eta_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eta Label"},"limit_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit Base Units"},"available":{"type":"boolean","title":"Available","default":true},"unavailable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable Reason"},"asset_code":{"type":"string","title":"Asset Code","default":"USD"},"fee_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Formatted","readOnly":true},"net_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Net Formatted","readOnly":true}},"type":"object","required":["speed","fee_base_units","net_base_units","fee_formatted","net_formatted"],"title":"WithdrawalQuoteOptionRead","description":"One speed's price. ``fee`` is what the payee bears — zero when the\nbackoffice has Ripster covering fees — and ``net`` is what arrives."},"WithdrawalQuoteRead":{"properties":{"asset_code":{"type":"string","title":"Asset Code"},"amount_base_units":{"type":"integer","title":"Amount Base Units"},"destination_id":{"type":"string","format":"uuid","title":"Destination Id"},"fee_mode":{"type":"string","title":"Fee Mode"},"options":{"items":{"$ref":"#/components/schemas/WithdrawalQuoteOptionRead"},"type":"array","title":"Options"},"withdrawable_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Withdrawable Base Units"},"amount_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount Formatted","readOnly":true},"withdrawable_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Withdrawable Formatted","readOnly":true}},"type":"object","required":["asset_code","amount_base_units","destination_id","fee_mode","options","amount_formatted","withdrawable_formatted"],"title":"WithdrawalQuoteRead","description":"Per-speed pricing for a prospective withdrawal. Advisory — there is no\nquote id or expiry; the withdrawal request re-prices and rejects with\n``quote_changed`` if the fee moved (pass ``expected_fee_base_units``)."},"WithdrawalRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"type":"string","format":"uuid","title":"User Id"},"asset_code":{"type":"string","title":"Asset Code"},"amount_base_units":{"type":"integer","title":"Amount Base Units"},"status":{"$ref":"#/components/schemas/WithdrawalStatus"},"destination_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Destination Id"},"destination_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Kind"},"destination_last4":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Last4"},"destination_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Label"},"speed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Speed"},"effective_speed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Speed"},"fee_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fee Base Units"},"net_base_units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Net Base Units"},"fee_payer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Payer"},"eta_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eta Label"},"failure_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure Reason"},"requested_ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Requested Ledger Transaction Id"},"cancelled_ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Cancelled Ledger Transaction Id"},"paid_ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Paid Ledger Transaction Id"},"failed_ledger_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Failed Ledger Transaction Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"processing_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Processing At"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Failed At"},"awaiting_review":{"type":"boolean","title":"Awaiting Review","description":"True while the payout is in our review queue (`requested`).\n\nFalse once it has been sent to the provider (`processing`) or\nfinished (`paid` / `failed` / `cancelled`). Branch customer copy\non this field from `requestWithdrawal` / `getWithdrawal` — do not\nassume every create stays in review.","readOnly":true},"amount_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount Formatted","readOnly":true},"fee_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Formatted","readOnly":true},"net_formatted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Net Formatted","readOnly":true},"destination":{"anyOf":[{"$ref":"#/components/schemas/WithdrawalDestinationRead"},{"type":"null"}],"readOnly":true}},"type":"object","required":["id","user_id","asset_code","amount_base_units","status","created_at","cancelled_at","paid_at","awaiting_review","amount_formatted","fee_formatted","net_formatted","destination"],"title":"WithdrawalRead"},"WithdrawalStatus":{"type":"string","enum":["requested","processing","cancelled","paid","failed"],"title":"WithdrawalStatus"},"modules__public__schemas__AssetRead":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"symbol":{"type":"string","title":"Symbol","default":""},"asset_type":{"type":"string","title":"Asset Type","default":"fiat"},"display_decimals":{"type":"integer","title":"Display Decimals"},"deposit_enabled":{"type":"boolean","title":"Deposit Enabled"},"withdrawal_enabled":{"type":"boolean","title":"Withdrawal Enabled"},"wallet_enabled":{"type":"boolean","title":"Wallet Enabled","default":true},"display_enabled":{"type":"boolean","title":"Display Enabled","default":true},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["code","name","display_decimals","deposit_enabled","withdrawal_enabled"],"title":"AssetRead"}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"devUserHeader":{"type":"apiKey","in":"header","name":"X-User-Id"}}}}