Move the caller to the generation-2 vault (vault roadmap part 2)
The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault.
API key: scope vault:write or vault:migrate.
POST
/
api
/
me
/
vault
/
upgrade
Move the caller to the generation-2 vault (vault roadmap part 2)
curl --request POST \ --url https://core-api.adipredictstreet.com/api/me/vault/upgrade \ --header 'X-Api-Key: <api-key>'
Partner / integrator key — format ps_live_<keyId>_<secret>. Partner keys are issued by PredictStreet; a user can also create keys bound to their own wallet from their account settings in the web app. Never ship to a browser. multi_wallet partners must additionally send X-User-Wallet: 0x<40-hex> on every authenticated request to declare the acting wallet. See the API keys guide for scope taxonomy, partner kinds, rate limits, and rotation procedure.
Required for multi_wallet partners on every authenticated request; ignored for single_wallet. Declares the acting end-user wallet for this request — drives KYC checks, balances/positions/orders attribution, rate-limit buckets, and audit. Lower-cased server-side. Missing on a multi_wallet key → 401 api_key_user_wallet_required; malformed → 401 api_key_user_wallet_invalid. The on-chain CTFExchange/Vault contracts still verify EIP-712 signer ↔ vault binding, so loosening API-layer attribution is safe by construction.
Vault lifecycle (RND-312): not_created = no vault and no deploy in flight (the first deposit or POST /api/me/vault creates it); deploying = poll; ready = vaultAddress usable; failed = the last deploy job failed; a new one starts on the next POST /api/me/vault (or funding) after a cooldown — the 409 carries retryAfterSec. Authoritative; deployed + deployStatus stay for existing clients.
Contract generation of the active vault (the one deposits and trading go to). 1 = original factory, 2 = post-audit factory (the beacon proxy). Always equals vaults.find(v => v.active).generation. Defaults to 1 before any vault exists.
The generation a new deploy / activation targets (from the rollout). 1 while generation 2 is not rolled out to this wallet; 2 once the wallet is in the rollout. When generation is 1 and targetGeneration is 2, POST /api/me/vault/upgrade migrates the account.
Every vault the authenticated wallet holds, ordered by generation ASC (generation 1 first). After POST /api/me/vault/upgrade the user holds TWO vaults: the generation-1 vault stays here with active: false (it trades legacy markets and keeps its positions / USDC until moved or withdrawn), and the generation-2 vault has active: true. Empty array before any vault exists.
Status of the platform's automatic vault deployment: not_started (no deploy job; also shown for vaults that existed before auto-deploy — check deployed), pending / building / submitted (in progress), confirmed (deployed and vaultAddress set), skipped_existing (vault already existed), failed_permanent (deployment failed; contact support).
Vault roadmap part 2: present while the account is eligible for generation 2 and has not finished the migration in upgrade; only POST /api/me/vault/upgrade moves them to generation 2. A user with generation: 2 already has upgrade: null. Lifecycle of the generation-2 vault — the migration the FE prompts and POST /api/me/vault/upgrade runs. vaultAddress / status above keep describing the ACTIVE vault (deposits and trading go there until the upgrade is activated). Null otherwise (target 1, no vault yet, or already generation 2).
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ADI Predictstreet","description":"Institutional-grade prediction market API — trading, settlement, and on-chain custody.","colors":{"primary":"#013CFF","light":"#3F67ED","dark":"#0028AE"},"logo":{"light":"https://mintcdn.com/ideasoft/m6stBITx7YzlhMtC/logo/light.svg?fit=max\u0026auto=format\u0026n=m6stBITx7YzlhMtC\u0026q=85\u0026s=67eed2cbc5343eb0cb47d0945877af3f","dark":"https://mintcdn.com/ideasoft/m6stBITx7YzlhMtC/logo/dark.svg?fit=max\u0026auto=format\u0026n=m6stBITx7YzlhMtC\u0026q=85\u0026s=c44812a23eae343855d6ec50450195a8"},"favicon":"https://mintcdn.com/ideasoft/m6stBITx7YzlhMtC/favicon.svg?fit=max\u0026auto=format\u0026n=m6stBITx7YzlhMtC\u0026q=85\u0026s=12febd8f21b779fb61083b446cab4a6f","api":{"playground":{"proxy":true}},"navbar":{"links":[{"href":"https://adipredictstreet.com/","label":"Web app"}]},"footer":{"socials":{"x":"https://x.com/predictstreet","github":"https://github.com/predictstreet"}},"styling":{"eyebrows":"section","latex":true},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ideasoft","hasAudioNarration":false,"actualSubdomain":"ideasoft","customDomains":["docs.adipredictstreet.com"],"gitSource":{"type":"github","owner":"predictstreetproduction","repo":"predictstreet-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae60d18f146f7c5c1deaa00","collectionId":"fbf0ec5d-514c-4f06-917d-fffa14ac1ef4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae60d18f146f7c5c1deaa00"},"entitlements":{},"buildId":"6ae60d18f146f7c5c1deaa00","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"API Reference","count":112},{"language":"default","tag":"Endpoints","count":105},{"language":"default","tag":"Documentation","count":64},{"language":"default","tag":"Markets","count":20},{"language":"default","tag":"Portfolio","count":19},{"language":"default","tag":"Withdrawals","count":15},{"language":"default","tag":"Orders","count":11},{"language":"default","tag":"WebSocket","count":10},{"language":"default","tag":"Public Profile","count":8},{"language":"default","tag":"On-chain Contracts","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":":root{--adi-pearl-white:#FFFDFA;--adi-electric-orange:#FF710A;--adi-burgundy:#3E000D;--adi-bright-blue:#013CFF;--adi-sandy-white:#FFF9E1;--adi-pearl-white-mid:#EAEAEA;--adi-pearl-white-dark:#BEBEBE;--adi-electric-orange-light:#FD964B;--adi-electric-orange-dark:#B74D00;--adi-burgundy-light:#632431;--adi-burgundy-dark:#2B0009;--adi-bright-blue-light:#3F67ED;--adi-bright-blue-dark:#0028AE;--adi-sandy-white-light:#FFFBEC;--adi-sandy-white-dark:#E1D9B6}.link,a{color:var(--adi-bright-blue)}.link:hover,a:hover{color:var(--adi-bright-blue-dark)}.dark .link,.dark a{color:var(--adi-bright-blue-light)}.dark .link:hover,.dark a:hover{color:var(--adi-electric-orange-light)}::selection{background-color:var(--adi-electric-orange);color:var(--adi-pearl-white)}"}],"page":{"pagePath":"api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2","slug":"/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2","pageMetadata":{"title":"Move the caller to the generation-2 vault (vault roadmap part 2)","description":"The explicit migration call. With `targetGeneration` 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll `GET /api/me/vault` — `upgrade.status`), or, once the generation-2 vault exists, activates it (200 — `generation` reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in `vaults` with its positions). 200 when the caller is already on generation 2. 409 `vault_upgrade_not_available` when there is nothing to upgrade (target 1, or no vault yet — `POST /api/me/vault`); 409 `vault_upgrade_blocked` when the call neither queued nor activated anything (`reason`: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 `vault_deploy_failed` / 503 `vault_create_unavailable` as for `POST /api/me/vault` (the latter also when the withdrawal check itself could not be run — transient, `retryAfterSec`). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault.\n\nAPI key: scope `vault:write` or `vault:migrate`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault/upgrade","href":"/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"The explicit migration call. With \", _jsx(_components.code, {\n children: \"targetGeneration\"\n }), \" 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll \", _jsx(_components.code, {\n children: \"GET /api/me/vault\"\n }), \" — \", _jsx(_components.code, {\n children: \"upgrade.status\"\n }), \"), or, once the generation-2 vault exists, activates it (200 — \", _jsx(_components.code, {\n children: \"generation\"\n }), \" reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in \", _jsx(_components.code, {\n children: \"vaults\"\n }), \" with its positions). 200 when the caller is already on generation 2. 409 \", _jsx(_components.code, {\n children: \"vault_upgrade_not_available\"\n }), \" when there is nothing to upgrade (target 1, or no vault yet — \", _jsx(_components.code, {\n children: \"POST /api/me/vault\"\n }), \"); 409 \", _jsx(_components.code, {\n children: \"vault_upgrade_blocked\"\n }), \" when the call neither queued nor activated anything (\", _jsx(_components.code, {\n children: \"reason\"\n }), \": no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 \", _jsx(_components.code, {\n children: \"vault_deploy_failed\"\n }), \" / 503 \", _jsx(_components.code, {\n children: \"vault_create_unavailable\"\n }), \" as for \", _jsx(_components.code, {\n children: \"POST /api/me/vault\"\n }), \" (the latter also when the withdrawal check itself could not be run — transient, \", _jsx(_components.code, {\n children: \"retryAfterSec\"\n }), \"). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"API key: scope \", _jsx(_components.code, {\n children: \"vault:write\"\n }), \" or \", _jsx(_components.code, {\n children: \"vault:migrate\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Move the caller to the generation-2 vault (vault roadmap part 2)","description":"The explicit migration call. With `targetGeneration` 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll `GET /api/me/vault` — `upgrade.status`), or, once the generation-2 vault exists, activates it (200 — `generation` reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in `vaults` with its positions). 200 when the caller is already on generation 2. 409 `vault_upgrade_not_available` when there is nothing to upgrade (target 1, or no vault yet — `POST /api/me/vault`); 409 `vault_upgrade_blocked` when the call neither queued nor activated anything (`reason`: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 `vault_deploy_failed` / 503 `vault_create_unavailable` as for `POST /api/me/vault` (the latter also when the withdrawal check itself could not be run — transient, `retryAfterSec`). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault.\n\nAPI key: scope `vault:write` or `vault:migrate`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault/upgrade","href":"/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Portfolio"],"summary":"Move the caller to the generation-2 vault (vault roadmap part 2)","description":"The explicit migration call. With `targetGeneration` 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll `GET /api/me/vault` — `upgrade.status`), or, once the generation-2 vault exists, activates it (200 — `generation` reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in `vaults` with its positions). 200 when the caller is already on generation 2. 409 `vault_upgrade_not_available` when there is nothing to upgrade (target 1, or no vault yet — `POST /api/me/vault`); 409 `vault_upgrade_blocked` when the call neither queued nor activated anything (`reason`: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 `vault_deploy_failed` / 503 `vault_create_unavailable` as for `POST /api/me/vault` (the latter also when the withdrawal check itself could not be run — transient, `retryAfterSec`). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault.\n\nAPI key: scope `vault:write` or `vault:migrate`.","operationId":"PortfolioController_upgradeVault","parameters":["55ba2a85-c4c0-4b16-8048-432de2fa6613"],"responses":{"200":"0ef3de03-c74d-4507-bc92-d1ff93f5a482","202":"2f62fb37-37b3-4e64-bfb1-d6470a9ac923","409":"7146fd1f-f710-46a0-aab0-7f6b564fe3f4","503":"028f94ce-5850-4bf6-a3df-2104a8a5619a"},"security":["dbbf5a24-b526-4ffc-8120-d928503f2b49"],"method":"post","type":"path","servers":["d039860a-0d44-4878-ae7b-31b98a58de32"],"path":"/api/me/vault/upgrade","baseUrlOptions":["https://core-api.adipredictstreet.com"],"title":"Move the caller to the generation-2 vault (vault roadmap part 2)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"55ba2a85-c4c0-4b16-8048-432de2fa6613":{"name":"X-User-Wallet","in":"header","required":false,"description":"**Required for `multi_wallet` partners on every authenticated request; ignored for `single_wallet`.** Declares the acting end-user wallet for this request — drives KYC checks, balances/positions/orders attribution, rate-limit buckets, and audit. Lower-cased server-side. Missing on a multi_wallet key → 401 `api_key_user_wallet_required`; malformed → 401 `api_key_user_wallet_invalid`. The on-chain `CTFExchange`/`Vault` contracts still verify EIP-712 signer ↔ vault binding, so loosening API-layer attribution is safe by construction.","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","example":"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb3","isRequired":false,"description":"**Required for `multi_wallet` partners on every authenticated request; ignored for `single_wallet`.** Declares the acting end-user wallet for this request — drives KYC checks, balances/positions/orders attribution, rate-limit buckets, and audit. Lower-cased server-side. Missing on a multi_wallet key → 401 `api_key_user_wallet_required`; malformed → 401 `api_key_user_wallet_invalid`. The on-chain `CTFExchange`/`Vault` contracts still verify EIP-712 signer ↔ vault binding, so loosening API-layer attribution is safe by construction.","uniqueKey":"","typeLabel":"string"},"example":"0x1234567890abcdef1234567890abcdef12345678"}},"responses":{"0ef3de03-c74d-4507-bc92-d1ff93f5a482":{"description":"The generation-2 vault is the active vault.","content":{"application/json":{"schema":{"type":"object","required":["upgradeActivated","enqueued","walletAddress","vaultAddress","deployed","status","generation","targetGeneration","vaults"],"properties":{"walletAddress":{"type":"string","description":"Authenticated wallet (lowercase 0x-hex).","isRequired":true,"uniqueKey":"walletAddress","typeLabel":"string"},"vaultAddress":{"oneOf":[{"type":"string","description":"Per-user vault contract address; null until the vault is deployed.","isRequired":true,"uniqueKey":"vaultAddress.oneOf.0","typeLabel":"string"},{"type":"null","description":"Per-user vault contract address; null until the vault is deployed.","isRequired":true,"uniqueKey":"vaultAddress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"vaultAddress","typeLabel":"string | null"},"deployed":{"type":"boolean","description":"true once VaultFactory.vaultOf(wallet) has been on-chain confirmed.","isRequired":true,"uniqueKey":"deployed","typeLabel":"boolean"},"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Vault lifecycle (RND-312): `not_created` = no vault and no deploy in flight (the first deposit or `POST /api/me/vault` creates it); `deploying` = poll; `ready` = `vaultAddress` usable; `failed` = the last deploy job failed; a new one starts on the next `POST /api/me/vault` (or funding) after a cooldown — the 409 carries `retryAfterSec`. Authoritative; `deployed` + `deployStatus` stay for existing clients.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"generation":{"type":"integer","enum":[1,2],"description":"Contract generation of the active vault (the one deposits and trading go to). 1 = original factory, 2 = post-audit factory (the beacon proxy). Always equals `vaults.find(v => v.active).generation`. Defaults to 1 before any vault exists.","isRequired":true,"uniqueKey":"generation","typeLabel":"enum\u003cinteger>"},"targetGeneration":{"type":"integer","enum":[1,2],"description":"The generation a new deploy / activation targets (from the rollout). 1 while generation 2 is not rolled out to this wallet; 2 once the wallet is in the rollout. When `generation` is 1 and `targetGeneration` is 2, `POST /api/me/vault/upgrade` migrates the account.","isRequired":true,"uniqueKey":"targetGeneration","typeLabel":"enum\u003cinteger>"},"vaults":{"type":"array","items":{"type":"object","description":"Summary of one vault contract belonging to the authenticated wallet.","properties":{"vaultAddress":{"type":"string","description":"Vault contract address (lowercase 0x-hex).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].vaultAddress","typeLabel":"string"},"generation":{"type":"integer","enum":[1,2],"description":"Contract generation: 1 = original factory (standalone, non-upgradeable vault), 2 = post-audit factory (the vault is a beacon proxy, admin-upgradeable only behind a timelock).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].generation","typeLabel":"enum\u003cinteger>"},"active":{"type":"boolean","description":"The active vault: deposits, on-ramp and bonuses go to it. A generation-1 vault that is not active keeps its positions and free USDC until they are redeemed, withdrawn or moved, and keeps trading the generation-1 (legacy) markets: an order's maker is the vault of the market's generation, active or not (`vault_generation_mismatch` otherwise).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].active","typeLabel":"boolean"}},"required":["vaultAddress","generation","active"],"uniqueKey":"vaults.items.[INDEX]","typeLabel":"object"},"description":"Every vault the authenticated wallet holds, ordered by generation ASC (generation 1 first). After `POST /api/me/vault/upgrade` the user holds TWO vaults: the generation-1 vault stays here with `active: false` (it trades legacy markets and keeps its positions / USDC until moved or withdrawn), and the generation-2 vault has `active: true`. Empty array before any vault exists.","isRequired":true,"uniqueKey":"vaults","typeLabel":"object[]"},"enqueued":{"type":"boolean","description":"true when THIS call queued the deploy job; false when it already existed or the vault was ready.","isRequired":true,"uniqueKey":"enqueued","typeLabel":"boolean"},"upgradeActivated":{"type":"boolean","description":"true when THIS call activated the generation-2 vault (the active vault moved); false otherwise.","isRequired":true,"uniqueKey":"upgradeActivated","typeLabel":"boolean"},"deployStatus":{"type":"string","enum":["not_started","pending","building","submitted","confirmed","skipped_existing","failed_permanent"],"description":"Status of the platform's automatic vault deployment: `not_started` (no deploy job; also shown for vaults that existed before auto-deploy — check `deployed`), `pending` / `building` / `submitted` (in progress), `confirmed` (deployed and `vaultAddress` set), `skipped_existing` (vault already existed), `failed_permanent` (deployment failed; contact support).","uniqueKey":"deployStatus","typeLabel":"enum\u003cstring>"},"deployTxHash":{"oneOf":[{"type":"string","description":"Tx hash of the VaultFactory deploy call once submitted; null until then.","uniqueKey":"deployTxHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"Tx hash of the VaultFactory deploy call once submitted; null until then.","uniqueKey":"deployTxHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployTxHash","typeLabel":"string | null"},"deployRequestedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the deploy job was enqueued.","uniqueKey":"deployRequestedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the deploy job was enqueued.","uniqueKey":"deployRequestedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployRequestedAt","typeLabel":"string\u003cdate-time> | null"},"deployConfirmedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the deploy was confirmed on-chain.","uniqueKey":"deployConfirmedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the deploy was confirmed on-chain.","uniqueKey":"deployConfirmedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployConfirmedAt","typeLabel":"string\u003cdate-time> | null"},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a `POST /api/me/vault` (or a funding path) starts a new deploy; 0 otherwise.","uniqueKey":"retryAfterSec","typeLabel":"integer"},"upgrade":{"oneOf":[{"type":"object","description":"Vault roadmap part 2: present while the account is eligible for generation 2 and has not finished the migration in `upgrade`; only `POST /api/me/vault/upgrade` moves them to generation 2. A user with `generation: 2` already has `upgrade: null`. Lifecycle of the generation-2 vault — the migration the FE prompts and `POST /api/me/vault/upgrade` runs. `vaultAddress` / `status` above keep describing the ACTIVE vault (deposits and trading go there until the upgrade is activated). Null otherwise (target 1, no vault yet, or already generation 2).","properties":{"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Lifecycle of the generation-2 vault: `not_created` = none yet — `POST /api/me/vault/upgrade` queues its deploy (the migration trigger; nothing else starts it); `deploying` = poll `GET /api/me/vault`; `ready` = the generation-2 vault exists but is NOT the active vault yet — `POST /api/me/vault/upgrade` activates it (then `generation` reads 2 and `upgrade` is null); `failed` = the last generation-2 deploy failed, `POST /api/me/vault/upgrade` after `retryAfterSec` starts a new one.","isRequired":true,"uniqueKey":"upgrade.oneOf.0.status","typeLabel":"enum\u003cstring>"},"vaultAddress":{"oneOf":[{"type":"string","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress.oneOf.0","typeLabel":"string"},{"type":"null","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress","typeLabel":"string | null"},"deployStatus":{"type":"string","description":"Deploy job status of the generation-2 job (see `deployStatus`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.deployStatus","typeLabel":"string"},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a new generation-2 deploy may start; 0 otherwise.","isRequired":true,"uniqueKey":"upgrade.oneOf.0.retryAfterSec","typeLabel":"integer"}},"required":["status","vaultAddress","deployStatus","retryAfterSec"],"uniqueKey":"upgrade.oneOf.0","typeLabel":"object"},{"type":"null","description":"Vault roadmap part 2: present while the account is eligible for generation 2 and has not finished the migration in `upgrade`; only `POST /api/me/vault/upgrade` moves them to generation 2. A user with `generation: 2` already has `upgrade: null`. Lifecycle of the generation-2 vault — the migration the FE prompts and `POST /api/me/vault/upgrade` runs. `vaultAddress` / `status` above keep describing the ACTIVE vault (deposits and trading go there until the upgrade is activated). Null otherwise (target 1, no vault yet, or already generation 2).","properties":{"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Lifecycle of the generation-2 vault: `not_created` = none yet — `POST /api/me/vault/upgrade` queues its deploy (the migration trigger; nothing else starts it); `deploying` = poll `GET /api/me/vault`; `ready` = the generation-2 vault exists but is NOT the active vault yet — `POST /api/me/vault/upgrade` activates it (then `generation` reads 2 and `upgrade` is null); `failed` = the last generation-2 deploy failed, `POST /api/me/vault/upgrade` after `retryAfterSec` starts a new one."},"vaultAddress":{"oneOf":[{"type":"string","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`)."},{"type":"null","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`)."}]},"deployStatus":{"type":"string","description":"Deploy job status of the generation-2 job (see `deployStatus`)."},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a new generation-2 deploy may start; 0 otherwise."}},"required":["status","vaultAddress","deployStatus","retryAfterSec"],"uniqueKey":"upgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"upgrade","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"walletAddress":"\u003cstring>","vaultAddress":"\u003cstring>","deployed":true,"status":"not_created","generation":1,"targetGeneration":1,"vaults":[{"vaultAddress":"\u003cstring>","generation":1,"active":true}],"enqueued":true,"upgradeActivated":true,"deployStatus":"not_started","deployTxHash":"\u003cstring>","deployRequestedAt":"2023-11-07T05:31:56Z","deployConfirmedAt":"2023-11-07T05:31:56Z","retryAfterSec":123,"upgrade":{"status":"not_created","vaultAddress":"\u003cstring>","deployStatus":"\u003cstring>","retryAfterSec":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"2f62fb37-37b3-4e64-bfb1-d6470a9ac923":{"description":"The generation-2 deploy is queued / running; poll GET /api/me/vault.","content":{"application/json":{"schema":{"type":"object","required":["upgradeActivated","enqueued","walletAddress","vaultAddress","deployed","status","generation","targetGeneration","vaults"],"properties":{"walletAddress":{"type":"string","description":"Authenticated wallet (lowercase 0x-hex).","isRequired":true,"uniqueKey":"walletAddress","typeLabel":"string"},"vaultAddress":{"oneOf":[{"type":"string","description":"Per-user vault contract address; null until the vault is deployed.","isRequired":true,"uniqueKey":"vaultAddress.oneOf.0","typeLabel":"string"},{"type":"null","description":"Per-user vault contract address; null until the vault is deployed.","isRequired":true,"uniqueKey":"vaultAddress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"vaultAddress","typeLabel":"string | null"},"deployed":{"type":"boolean","description":"true once VaultFactory.vaultOf(wallet) has been on-chain confirmed.","isRequired":true,"uniqueKey":"deployed","typeLabel":"boolean"},"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Vault lifecycle (RND-312): `not_created` = no vault and no deploy in flight (the first deposit or `POST /api/me/vault` creates it); `deploying` = poll; `ready` = `vaultAddress` usable; `failed` = the last deploy job failed; a new one starts on the next `POST /api/me/vault` (or funding) after a cooldown — the 409 carries `retryAfterSec`. Authoritative; `deployed` + `deployStatus` stay for existing clients.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"generation":{"type":"integer","enum":[1,2],"description":"Contract generation of the active vault (the one deposits and trading go to). 1 = original factory, 2 = post-audit factory (the beacon proxy). Always equals `vaults.find(v => v.active).generation`. Defaults to 1 before any vault exists.","isRequired":true,"uniqueKey":"generation","typeLabel":"enum\u003cinteger>"},"targetGeneration":{"type":"integer","enum":[1,2],"description":"The generation a new deploy / activation targets (from the rollout). 1 while generation 2 is not rolled out to this wallet; 2 once the wallet is in the rollout. When `generation` is 1 and `targetGeneration` is 2, `POST /api/me/vault/upgrade` migrates the account.","isRequired":true,"uniqueKey":"targetGeneration","typeLabel":"enum\u003cinteger>"},"vaults":{"type":"array","items":{"type":"object","description":"Summary of one vault contract belonging to the authenticated wallet.","properties":{"vaultAddress":{"type":"string","description":"Vault contract address (lowercase 0x-hex).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].vaultAddress","typeLabel":"string"},"generation":{"type":"integer","enum":[1,2],"description":"Contract generation: 1 = original factory (standalone, non-upgradeable vault), 2 = post-audit factory (the vault is a beacon proxy, admin-upgradeable only behind a timelock).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].generation","typeLabel":"enum\u003cinteger>"},"active":{"type":"boolean","description":"The active vault: deposits, on-ramp and bonuses go to it. A generation-1 vault that is not active keeps its positions and free USDC until they are redeemed, withdrawn or moved, and keeps trading the generation-1 (legacy) markets: an order's maker is the vault of the market's generation, active or not (`vault_generation_mismatch` otherwise).","isRequired":true,"uniqueKey":"vaults.items.[INDEX].active","typeLabel":"boolean"}},"required":["vaultAddress","generation","active"],"uniqueKey":"vaults.items.[INDEX]","typeLabel":"object"},"description":"Every vault the authenticated wallet holds, ordered by generation ASC (generation 1 first). After `POST /api/me/vault/upgrade` the user holds TWO vaults: the generation-1 vault stays here with `active: false` (it trades legacy markets and keeps its positions / USDC until moved or withdrawn), and the generation-2 vault has `active: true`. Empty array before any vault exists.","isRequired":true,"uniqueKey":"vaults","typeLabel":"object[]"},"enqueued":{"type":"boolean","description":"true when THIS call queued the deploy job; false when it already existed or the vault was ready.","isRequired":true,"uniqueKey":"enqueued","typeLabel":"boolean"},"upgradeActivated":{"type":"boolean","description":"true when THIS call activated the generation-2 vault (the active vault moved); false otherwise.","isRequired":true,"uniqueKey":"upgradeActivated","typeLabel":"boolean"},"deployStatus":{"type":"string","enum":["not_started","pending","building","submitted","confirmed","skipped_existing","failed_permanent"],"description":"Status of the platform's automatic vault deployment: `not_started` (no deploy job; also shown for vaults that existed before auto-deploy — check `deployed`), `pending` / `building` / `submitted` (in progress), `confirmed` (deployed and `vaultAddress` set), `skipped_existing` (vault already existed), `failed_permanent` (deployment failed; contact support).","uniqueKey":"deployStatus","typeLabel":"enum\u003cstring>"},"deployTxHash":{"oneOf":[{"type":"string","description":"Tx hash of the VaultFactory deploy call once submitted; null until then.","uniqueKey":"deployTxHash.oneOf.0","typeLabel":"string"},{"type":"null","description":"Tx hash of the VaultFactory deploy call once submitted; null until then.","uniqueKey":"deployTxHash.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployTxHash","typeLabel":"string | null"},"deployRequestedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the deploy job was enqueued.","uniqueKey":"deployRequestedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the deploy job was enqueued.","uniqueKey":"deployRequestedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployRequestedAt","typeLabel":"string\u003cdate-time> | null"},"deployConfirmedAt":{"oneOf":[{"type":"string","format":"date-time","description":"When the deploy was confirmed on-chain.","uniqueKey":"deployConfirmedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the deploy was confirmed on-chain.","uniqueKey":"deployConfirmedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"deployConfirmedAt","typeLabel":"string\u003cdate-time> | null"},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a `POST /api/me/vault` (or a funding path) starts a new deploy; 0 otherwise.","uniqueKey":"retryAfterSec","typeLabel":"integer"},"upgrade":{"oneOf":[{"type":"object","description":"Vault roadmap part 2: present while the account is eligible for generation 2 and has not finished the migration in `upgrade`; only `POST /api/me/vault/upgrade` moves them to generation 2. A user with `generation: 2` already has `upgrade: null`. Lifecycle of the generation-2 vault — the migration the FE prompts and `POST /api/me/vault/upgrade` runs. `vaultAddress` / `status` above keep describing the ACTIVE vault (deposits and trading go there until the upgrade is activated). Null otherwise (target 1, no vault yet, or already generation 2).","properties":{"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Lifecycle of the generation-2 vault: `not_created` = none yet — `POST /api/me/vault/upgrade` queues its deploy (the migration trigger; nothing else starts it); `deploying` = poll `GET /api/me/vault`; `ready` = the generation-2 vault exists but is NOT the active vault yet — `POST /api/me/vault/upgrade` activates it (then `generation` reads 2 and `upgrade` is null); `failed` = the last generation-2 deploy failed, `POST /api/me/vault/upgrade` after `retryAfterSec` starts a new one.","isRequired":true,"uniqueKey":"upgrade.oneOf.0.status","typeLabel":"enum\u003cstring>"},"vaultAddress":{"oneOf":[{"type":"string","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress.oneOf.0","typeLabel":"string"},{"type":"null","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"upgrade.oneOf.0.vaultAddress","typeLabel":"string | null"},"deployStatus":{"type":"string","description":"Deploy job status of the generation-2 job (see `deployStatus`).","isRequired":true,"uniqueKey":"upgrade.oneOf.0.deployStatus","typeLabel":"string"},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a new generation-2 deploy may start; 0 otherwise.","isRequired":true,"uniqueKey":"upgrade.oneOf.0.retryAfterSec","typeLabel":"integer"}},"required":["status","vaultAddress","deployStatus","retryAfterSec"],"uniqueKey":"upgrade.oneOf.0","typeLabel":"object"},{"type":"null","description":"Vault roadmap part 2: present while the account is eligible for generation 2 and has not finished the migration in `upgrade`; only `POST /api/me/vault/upgrade` moves them to generation 2. A user with `generation: 2` already has `upgrade: null`. Lifecycle of the generation-2 vault — the migration the FE prompts and `POST /api/me/vault/upgrade` runs. `vaultAddress` / `status` above keep describing the ACTIVE vault (deposits and trading go there until the upgrade is activated). Null otherwise (target 1, no vault yet, or already generation 2).","properties":{"status":{"type":"string","enum":["not_created","deploying","ready","failed"],"description":"Lifecycle of the generation-2 vault: `not_created` = none yet — `POST /api/me/vault/upgrade` queues its deploy (the migration trigger; nothing else starts it); `deploying` = poll `GET /api/me/vault`; `ready` = the generation-2 vault exists but is NOT the active vault yet — `POST /api/me/vault/upgrade` activates it (then `generation` reads 2 and `upgrade` is null); `failed` = the last generation-2 deploy failed, `POST /api/me/vault/upgrade` after `retryAfterSec` starts a new one."},"vaultAddress":{"oneOf":[{"type":"string","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`)."},{"type":"null","description":"The generation-2 vault address once known (lowercase 0x-hex, like `vaults[].vaultAddress`)."}]},"deployStatus":{"type":"string","description":"Deploy job status of the generation-2 job (see `deployStatus`)."},"retryAfterSec":{"type":"integer","description":"For `failed`: seconds until a new generation-2 deploy may start; 0 otherwise."}},"required":["status","vaultAddress","deployStatus","retryAfterSec"],"uniqueKey":"upgrade.oneOf.1","typeLabel":"null"}],"uniqueKey":"upgrade","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"walletAddress":"\u003cstring>","vaultAddress":"\u003cstring>","deployed":true,"status":"not_created","generation":1,"targetGeneration":1,"vaults":[{"vaultAddress":"\u003cstring>","generation":1,"active":true}],"enqueued":true,"upgradeActivated":true,"deployStatus":"not_started","deployTxHash":"\u003cstring>","deployRequestedAt":"2023-11-07T05:31:56Z","deployConfirmedAt":"2023-11-07T05:31:56Z","retryAfterSec":123,"upgrade":{"status":"not_created","vaultAddress":"\u003cstring>","deployStatus":"\u003cstring>","retryAfterSec":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"7146fd1f-f710-46a0-aab0-7f6b564fe3f4":{"description":"`vault_upgrade_not_available` (nothing to upgrade), `vault_upgrade_blocked` (cannot activate), or `vault_deploy_failed`.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every API error (same shape as `Error`). Branch on `error.code`, not on `message`.","required":["status","error"],"properties":{"status":{"type":"integer","description":"HTTP status, repeated in the body.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable code.","example":"bad_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"trace_id":{"type":"string","description":"Request trace id; quote it to support. May be absent.","uniqueKey":"error.trace_id","typeLabel":"string"},"retryAfterSec":{"type":"integer","description":"Seconds to wait before retrying, when the server says so (also sent as the `Retry-After` header).","uniqueKey":"error.retryAfterSec","typeLabel":"integer"},"retryable":{"type":"boolean","description":"Whether the same request may be sent again as it is. Absent when the server does not say.","uniqueKey":"error.retryable","typeLabel":"boolean"},"details":{"type":"object","additionalProperties":true,"description":"Extra structured context thrown with the error.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":400,"error":{"code":"bad_request","message":"\u003cstring>","trace_id":"\u003cstring>","retryAfterSec":123,"retryable":true,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"028f94ce-5850-4bf6-a3df-2104a8a5619a":{"description":"`vault_create_unavailable`: no generation-2 deploy could be started; retry after `retryAfterSec`.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every API error (same shape as `Error`). Branch on `error.code`, not on `message`.","required":["status","error"],"properties":{"status":{"type":"integer","description":"HTTP status, repeated in the body.","example":400,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Machine-readable code.","example":"bad_request","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"trace_id":{"type":"string","description":"Request trace id; quote it to support. May be absent.","uniqueKey":"error.trace_id","typeLabel":"string"},"retryAfterSec":{"type":"integer","description":"Seconds to wait before retrying, when the server says so (also sent as the `Retry-After` header).","uniqueKey":"error.retryAfterSec","typeLabel":"integer"},"retryable":{"type":"boolean","description":"Whether the same request may be sent again as it is. Absent when the server does not say.","uniqueKey":"error.retryable","typeLabel":"boolean"},"details":{"type":"object","additionalProperties":true,"description":"Extra structured context thrown with the error.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":400,"error":{"code":"bad_request","message":"\u003cstring>","trace_id":"\u003cstring>","retryAfterSec":123,"retryable":true,"details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"dbbf5a24-b526-4ffc-8120-d928503f2b49":{"ApiKey":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Partner / integrator key — format `ps_live_\u003ckeyId>_\u003csecret>`. Partner keys are issued by PredictStreet; a user can also create keys bound to their own wallet from their account settings in the web app. Never ship to a browser. `multi_wallet` partners must additionally send `X-User-Wallet: 0x\u003c40-hex>` on every authenticated request to declare the acting wallet. See the [API keys guide](/auth/api-keys) for scope taxonomy, partner kinds, rate limits, and rotation procedure.","scopes":[],"schemeName":"ApiKey"}}},"servers":{"d039860a-0d44-4878-ae7b-31b98a58de32":{"url":"https://core-api.adipredictstreet.com","description":"Production — replace with the API host issued at partner onboarding."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Partner / integrator key — format `ps_live_\u003ckeyId>_\u003csecret>`. Partner keys are issued by PredictStreet; a user can also create keys bound to their own wallet from their account settings in the web app. Never ship to a browser. `multi_wallet` partners must additionally send `X-User-Wallet: 0x\u003c40-hex>` on every authenticated request to declare the acting wallet. See the [API keys guide](/auth/api-keys) for scope taxonomy, partner kinds, rate limits, and rotation procedure.","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"X-Api-Key","type":"string","description":"Partner / integrator key — format `ps_live_\u003ckeyId>_\u003csecret>`. Partner keys are issued by PredictStreet; a user can also create keys bound to their own wallet from their account settings in the web app. Never ship to a browser. `multi_wallet` partners must additionally send `X-User-Wallet: 0x\u003c40-hex>` on every authenticated request to declare the acting wallet. See the [API keys guide](/auth/api-keys) for scope taxonomy, partner kinds, rate limits, and rotation procedure.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKey","name":"X-Api-Key"}],"title":"ApiKey"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"ideasoft","siteName":"ADI Predictstreet","title":"Move the caller to the generation-2 vault (vault roadmap part 2) - ADI Predictstreet","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-31T15:45:40.872Z","originalFileLocation":"api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault. API key: scope vault:write or vault:migrate.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ADI Predictstreet\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Move the caller to the generation-2 vault (vault roadmap part 2) - ADI Predictstreet\">\u003cmeta data-mint-head property=\"og:description\" content=\"The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault. API key: scope vault:write or vault:migrate.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ADI Predictstreet\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ideasoft.mintlify.app/_mintlify/api/og/v2?division=Portfolio\u0026amp;title=Move+the+caller+to+the+generation-2+vault+%28vault+roadmap+part+2%29\u0026amp;description=The+explicit+migration+call.+With+%60targetGeneration%60+2+and+a+generation-1+active+vault%3A+queues+the+generation-2+deploy+%28202%2C+poll+%60GET+%2Fapi%2Fme%2Fvault%60+%E2%80%94+%60upgrade\u0026amp;theme=aed7d98745ded4d107883553\u0026amp;signature=9378f1dc908b97dc3f60166366741cbc1c2826e4afa46500722036aa96b0e21e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Move the caller to the generation-2 vault (vault roadmap part 2) - ADI Predictstreet\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault. API key: scope vault:write or vault:migrate.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ideasoft.mintlify.app/_mintlify/api/og/v2?division=Portfolio\u0026amp;title=Move+the+caller+to+the+generation-2+vault+%28vault+roadmap+part+2%29\u0026amp;description=The+explicit+migration+call.+With+%60targetGeneration%60+2+and+a+generation-1+active+vault%3A+queues+the+generation-2+deploy+%28202%2C+poll+%60GET+%2Fapi%2Fme%2Fvault%60+%E2%80%94+%60upgrade\u0026amp;theme=aed7d98745ded4d107883553\u0026amp;signature=9378f1dc908b97dc3f60166366741cbc1c2826e4afa46500722036aa96b0e21e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ideasoft/T2TJrNWM5Wm-DXAw/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ADI Predictstreet\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#013CFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.adipredictstreet.com/#organization\",\"name\":\"ADI Predictstreet\",\"url\":\"https://docs.adipredictstreet.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ideasoft/m6stBITx7YzlhMtC/logo/light.svg?fit=max\u0026auto=format\u0026n=m6stBITx7YzlhMtC\u0026q=85\u0026s=67eed2cbc5343eb0cb47d0945877af3f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.adipredictstreet.com#website\",\"name\":\"ADI Predictstreet\",\"url\":\"https://docs.adipredictstreet.com\",\"publisher\":{\"@id\":\"https://docs.adipredictstreet.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2#webpage\",\"url\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2\",\"name\":\"Move the caller to the generation-2 vault (vault roadmap part 2)\",\"description\":\"The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault. API key: scope vault:write or vault:migrate.\",\"dateModified\":\"2026-10-31T15:45:40.872Z\",\"isPartOf\":{\"@id\":\"https://docs.adipredictstreet.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.adipredictstreet.com/api-reference/global-activity/recent-trades-across-the-whole-platform-taker-view-enriched\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Portfolio\",\"item\":\"https://docs.adipredictstreet.com/api-reference/portfolio/current-auto-redeem-opt-out-state\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Move the caller to the generation-2 vault (vault roadmap part 2)\",\"item\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2#apireference\",\"headline\":\"Move the caller to the generation-2 vault (vault roadmap part 2)\",\"name\":\"Move the caller to the generation-2 vault (vault roadmap part 2)\",\"description\":\"The explicit migration call. With targetGeneration 2 and a generation-1 active vault: queues the generation-2 deploy (202, poll GET /api/me/vault — upgrade.status), or, once the generation-2 vault exists, activates it (200 — generation reads 2, deposits / on-ramp / bonuses go there; the generation-1 vault stays in vaults with its positions). 200 when the caller is already on generation 2. 409 vault_upgrade_not_available when there is nothing to upgrade (target 1, or no vault yet — POST /api/me/vault); 409 vault_upgrade_blocked when the call neither queued nor activated anything (reason: no_user / mismatch / generation_taken / not_activated — the generation-2 vault exists but cannot be activated, not retryable; withdrawal_in_flight_unstamped — checked before anything is queued, the generation-2 vault may not exist yet: a withdrawal from before this release is still being processed, retry once it has ended); 409 vault_deploy_failed / 503 vault_create_unavailable as for POST /api/me/vault (the latter also when the withdrawal check itself could not be run — transient, retryAfterSec). Nothing else starts the migration: deposits, on-ramp, bonuses and the deploy-job producers act on the active vault. API key: scope vault:write or vault:migrate.\",\"url\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2\",\"mainEntityOfPage\":{\"@id\":\"https://docs.adipredictstreet.com/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2#webpage\"},\"dateModified\":\"2026-10-31T15:45:40.872Z\",\"publisher\":{\"@id\":\"https://docs.adipredictstreet.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.adipredictstreet.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ADI Predictstreet\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ADI Predictstreet","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Introduction","pages":[{"title":"API Reference","href":"/api-reference/introduction"},{"title":"Pagination","href":"/api-reference/pagination"}]},{"group":"Endpoints","pages":[{"group":"Global Activity","pages":[{"title":"Recent trades across the whole platform (taker view, enriched)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/activity/recent","href":"/api-reference/global-activity/recent-trades-across-the-whole-platform-taker-view-enriched"}]},{"group":"Challenges","pages":[{"title":"Global dispute feed across all markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/challenges","href":"/api-reference/challenges/global-dispute-feed-across-all-markets"},{"title":"Optimistic-oracle challenges for a market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/challenges","href":"/api-reference/challenges/optimistic-oracle-challenges-for-a-market"},{"title":"Fetch a single challenge by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/challenges/{id}","href":"/api-reference/challenges/fetch-a-single-challenge-by-id"}]},{"group":"crypto-long-series","pages":[{"title":"List a long-crypto series' periods (the `Past` disclosure)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/crypto-long-series/{id}/periods","href":"/api-reference/crypto-long-series/list-a-long-crypto-series-periods-the-`past`-disclosure"}]},{"group":"Crypto","pages":[{"title":"List a crypto series' window markets, bucketed by state","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/crypto-series/{id}/windows","href":"/api-reference/crypto/list-a-crypto-series-window-markets-bucketed-by-state"},{"title":"Underlying crypto price curve","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/crypto-price-history","href":"/api-reference/crypto/underlying-crypto-price-curve"}]},{"group":"Deposits","pages":[{"title":"Submit a signed permit for gasless deposit relay","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/deposits/relay","href":"/api-reference/deposits/submit-a-signed-permit-for-gasless-deposit-relay"},{"title":"Poll status of a relay (gasless) deposit","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/deposits/relay/{auditId}","href":"/api-reference/deposits/poll-status-of-a-relay-gasless-deposit"}]},{"group":"Events","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/events","href":"/api-reference/events/list-events"},{"title":"Top live (or top trending) event — optionally narrowed by FIFA code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/events/featured","href":"/api-reference/events/top-live-or-top-trending-event-—-optionally-narrowed-by-fifa-code"},{"title":"Aggregate event counters (sidebar tiles)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/events/stats","href":"/api-reference/events/aggregate-event-counters-sidebar-tiles"},{"title":"Fetch a single event by slug","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/events/{slug}","href":"/api-reference/events/fetch-a-single-event-by-slug"}]},{"group":"Leaderboard","pages":[{"title":"Wallet leaderboard ranked by realised PnL or volume","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/leaderboard","href":"/api-reference/leaderboard/wallet-leaderboard-ranked-by-realised-pnl-or-volume"}]},{"group":"Markets","pages":[{"title":"List public markets (filtered to currently-tradeable statuses)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets","href":"/api-reference/markets/list-public-markets-filtered-to-currently-tradeable-statuses"},{"title":"Fetch a single market by CTF conditionId","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/by-condition/{id}","href":"/api-reference/markets/fetch-a-single-market-by-ctf-conditionid"},{"title":"Fetch a single market by an on-chain outcome token id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/by-token/{id}","href":"/api-reference/markets/fetch-a-single-market-by-an-on-chain-outcome-token-id"},{"title":"List markets currently eligible for the first user dispute","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/disputable","href":"/api-reference/markets/list-markets-currently-eligible-for-the-first-user-dispute"},{"title":"Batch live clock + score for N market symbols","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/live","href":"/api-reference/markets/batch-live-clock-+-score-for-n-market-symbols"},{"title":"Market detail (by slug)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{slug}","href":"/api-reference/markets/market-detail-by-slug"},{"title":"Live clock + score for a single market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/live","href":"/api-reference/markets/live-clock-+-score-for-a-single-market"},{"title":"OHLC candles","deprecated":true,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/ohlc","href":"/api-reference/markets/ohlc-candles"},{"title":"Orderbook snapshot","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/orderbook","href":"/api-reference/markets/orderbook-snapshot"},{"title":"Time-series price points for the chart UI","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/price-history","href":"/api-reference/markets/time-series-price-points-for-the-chart-ui"},{"title":"List top traders on a market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/traders","href":"/api-reference/markets/list-top-traders-on-a-market"},{"title":"Get apimarkets tradersby outcome","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/traders/by-outcome","href":"/api-reference/markets/get-apimarkets-tradersby-outcome"},{"title":"Public trade tape","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/markets/{symbol}/trades","href":"/api-reference/markets/public-trade-tape"}]},{"group":"Matches","pages":[{"title":"List matches","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/matches","href":"/api-reference/matches/list-matches"},{"title":"Fetch a single match by slug","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/matches/{slug}","href":"/api-reference/matches/fetch-a-single-match-by-slug"}]},{"group":"Portfolio","pages":[{"title":"Current auto-redeem opt-out state","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/auto-redeem","href":"/api-reference/portfolio/current-auto-redeem-opt-out-state"},{"title":"Toggle auto-redeem opt-in/opt-out","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json put /api/me/auto-redeem","href":"/api-reference/portfolio/toggle-auto-redeem-opt-inopt-out"},{"title":"Balance-event history for the authenticated wallet","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/balance-events","href":"/api-reference/portfolio/balance-event-history-for-the-authenticated-wallet"},{"title":"Balances per token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/balances","href":"/api-reference/portfolio/balances-per-token"},{"title":"Per-EOA rolling deposit caps + current usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/deposit-limits","href":"/api-reference/portfolio/per-eoa-rolling-deposit-caps-+-current-usage"},{"title":"Current fee tier","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/fee-tier","href":"/api-reference/portfolio/current-fee-tier"},{"title":"Fee ledger","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/fees","href":"/api-reference/portfolio/fee-ledger"},{"title":"Aggregate portfolio view","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/portfolio","href":"/api-reference/portfolio/aggregate-portfolio-view"},{"title":"Wallet portfolio overview — category breakdown + bucketed P/L series","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/portfolio/overview","href":"/api-reference/portfolio/wallet-portfolio-overview-—-category-breakdown-+-bucketed-pl-series"},{"title":"Open positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/positions","href":"/api-reference/portfolio/open-positions"},{"title":"CTF position split/merge history for the authenticated wallet","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/splits-merges","href":"/api-reference/portfolio/ctf-position-splitmerge-history-for-the-authenticated-wallet"},{"title":"Releasable (unsuccessful) split/merge ops for the wallet","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/splits-merges/unlockable","href":"/api-reference/portfolio/releasable-unsuccessful-splitmerge-ops-for-the-wallet"},{"title":"Trade history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/trades","href":"/api-reference/portfolio/trade-history"},{"title":"Vault address + deployment status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/vault","href":"/api-reference/portfolio/vault-address-+-deployment-status"},{"title":"Create the caller's vault if it does not exist yet","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault","href":"/api-reference/portfolio/create-the-callers-vault-if-it-does-not-exist-yet"},{"title":"Emergency-withdraw timelock status","description":"7-day timelock state for vault emergency withdrawal.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/vault/emergency","href":"/api-reference/portfolio/emergency-withdraw-timelock-status"},{"title":"Move the caller to the generation-2 vault (vault roadmap part 2)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault/upgrade","href":"/api-reference/portfolio/move-the-caller-to-the-generation-2-vault-vault-roadmap-part-2"},{"title":"Start moving free USDC from the generation-1 vault to the generation-2 vault","description":"Creates the transfer (or answers the open one, 200) and returns `signRequest`: EIP-712 `WithdrawERC20` {token, to = the platform relayer, amount, salt, deadline} on the generation-1 vault (`PredictStreetVault/1`). Sign it and call `POST /api/me/vault/upgrade/transfer/:id/signature` before `deadline`. Internal move: no deposit-limit usage, no bonus / referral trigger, no deposit / withdrawal notification. 409 `vault_move_not_available` (not on generation 2 / no generation-1 vault), `nothing_to_move`, `insufficient_free_balance`, `vault_move_disabled`; 403 `restriction_active` / `ACCOUNT_PAUSED`.\n\nAPI key: scope `vault:write` or `vault:migrate` (no 2FA code: the funds stay in the caller's own vaults).","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault/upgrade/transfer","href":"/api-reference/portfolio/start-moving-free-usdc-from-the-generation-1-vault-to-the-generation-2-vault"},{"title":"A transfer of the wallet (poll until deposit_confirmed, refunded or failed)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/vault/upgrade/transfer/{id}","href":"/api-reference/portfolio/a-transfer-of-the-wallet-poll-until-deposit_confirmed-refunded-or-failed"},{"title":"Submit the WithdrawERC20 signature of a transfer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/vault/upgrade/transfer/{id}/signature","href":"/api-reference/portfolio/submit-the-withdrawerc20-signature-of-a-transfer"}]},{"group":"User","pages":[{"title":"Broadcast a co-signed split/merge/convert without paying gas","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/positions/op-submit","href":"/api-reference/user/broadcast-a-co-signed-splitmergeconvert-without-paying-gas"},{"title":"Poll the status of a gasless split/merge/convert","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/positions/op-submit/{jobId}","href":"/api-reference/user/poll-the-status-of-a-gasless-splitmergeconvert"},{"title":"Claim a settled position without paying gas","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/positions/redeem","href":"/api-reference/user/claim-a-settled-position-without-paying-gas"},{"title":"Poll the status of a gasless redeem","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/positions/redeem/{jobId}","href":"/api-reference/user/poll-the-status-of-a-gasless-redeem"},{"title":"Co-sign a redeem (not available yet)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/redemptions","href":"/api-reference/user/co-sign-a-redeem-not-available-yet"}]},{"group":"Vault","pages":[{"title":"Release an EXPIRED split / merge lock after verifying on-chain absence","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/splits-merges/{opId}/unlock","href":"/api-reference/vault/release-an-expired-split-merge-lock-after-verifying-on-chain-absence"},{"title":"Co-sign a NegRisk position convert (NO-basket → USDC)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/vault/convert-signature","href":"/api-reference/vault/co-sign-a-negrisk-position-convert-no-basket-→-usdc"},{"title":"Get backend co-signature for vault.mergePositions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/vault/merge-signature","href":"/api-reference/vault/get-backend-co-signature-for-vaultmergepositions"},{"title":"Get backend co-signature for vault.splitPosition","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/vault/split-signature","href":"/api-reference/vault/get-backend-co-signature-for-vaultsplitposition"}]},{"group":"Withdrawal Security","pages":[{"title":"Confirm 2FA setup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/withdrawal-security/totp/confirm","href":"/api-reference/withdrawal-security/confirm-2fa-setup"},{"title":"Disable 2FA","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/withdrawal-security/totp/disable","href":"/api-reference/withdrawal-security/disable-2fa"},{"title":"Begin 2FA setup","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/withdrawal-security/totp/setup","href":"/api-reference/withdrawal-security/begin-2fa-setup"},{"title":"2FA status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawal-security/totp/status","href":"/api-reference/withdrawal-security/2fa-status"},{"title":"List whitelisted withdrawal addresses","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawal-security/whitelist","href":"/api-reference/withdrawal-security/list-whitelisted-withdrawal-addresses"},{"title":"Add a whitelisted withdrawal address","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/withdrawal-security/whitelist","href":"/api-reference/withdrawal-security/add-a-whitelisted-withdrawal-address"},{"title":"Remove a whitelist entry","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /api/me/withdrawal-security/whitelist/{id}","href":"/api-reference/withdrawal-security/remove-a-whitelist-entry"}]},{"group":"Withdrawals","pages":[{"title":"Paginated withdrawal history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals","href":"/api-reference/withdrawals/paginated-withdrawal-history"},{"title":"List cleared deposit sources","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals/deposit-sources","href":"/api-reference/withdrawals/list-cleared-deposit-sources"},{"title":"Estimate the fee for a prospective withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals/fee","href":"/api-reference/withdrawals/estimate-the-fee-for-a-prospective-withdrawal"},{"title":"Count of withdrawals still in flight for the authenticated wallet","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals/pending-count","href":"/api-reference/withdrawals/count-of-withdrawals-still-in-flight-for-the-authenticated-wallet"},{"title":"Fetch a single withdrawal by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals/{id}","href":"/api-reference/withdrawals/fetch-a-single-withdrawal-by-id"},{"title":"Cancel a pending withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/me/withdrawals/{id}/cancel","href":"/api-reference/withdrawals/cancel-a-pending-withdrawal"},{"title":"Status transition history for a single withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/me/withdrawals/{id}/events","href":"/api-reference/withdrawals/status-transition-history-for-a-single-withdrawal"},{"title":"Initiate a withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/withdrawals/request","href":"/api-reference/withdrawals/initiate-a-withdrawal"}]},{"group":"Orders","pages":[{"title":"Cancel a single order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/orders/cancel","href":"/api-reference/orders/cancel-a-single-order"},{"title":"Cancel all open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/orders/cancel-all","href":"/api-reference/orders/cancel-all-open-orders"},{"title":"Cancel a batch of orders by id (max 100)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/orders/cancel-batch","href":"/api-reference/orders/cancel-a-batch-of-orders-by-id-max-100"},{"title":"Order history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/history","href":"/api-reference/orders/order-history"},{"title":"Find an order by clientOrderId or orderHash","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/lookup","href":"/api-reference/orders/find-an-order-by-clientorderid-or-orderhash"},{"title":"List open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/open","href":"/api-reference/orders/list-open-orders"},{"title":"Place a signed order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/orders/place","href":"/api-reference/orders/place-a-signed-order"},{"title":"Place a batch of signed orders (max 10)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /api/orders/place-batch","href":"/api-reference/orders/place-a-batch-of-signed-orders-max-10"},{"title":"Order detail","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/{id}","href":"/api-reference/orders/order-detail"},{"title":"Per-leg fee totals for one order (USDC + OUTCOME_TOKENS)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/{id}/fees-summary","href":"/api-reference/orders/per-leg-fee-totals-for-one-order-usdc-+-outcome_tokens"},{"title":"Fills for a specific order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/orders/{id}/fills","href":"/api-reference/orders/fills-for-a-specific-order"}]},{"group":"Platform","pages":[{"title":"Get contract addresses","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/platform/contracts","href":"/api-reference/platform/get-contract-addresses"},{"title":"Get platform fee configuration","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/platform/fee-config","href":"/api-reference/platform/get-platform-fee-configuration"},{"title":"List maintenance windows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/platform/maintenance","href":"/api-reference/platform/list-maintenance-windows"},{"title":"List active platform notices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/platform/notices","href":"/api-reference/platform/list-active-platform-notices"},{"title":"Get platform status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/platform/status","href":"/api-reference/platform/get-platform-status"}]},{"group":"Search","pages":[{"title":"Global search preview — top results across users, events, and matches","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/search","href":"/api-reference/search/global-search-preview-—-top-results-across-users-events-and-matches"},{"title":"Paginated event search","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/search/events","href":"/api-reference/search/paginated-event-search"},{"title":"Paginated match search","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/search/matches","href":"/api-reference/search/paginated-match-search"},{"title":"Paginated user search","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/search/users","href":"/api-reference/search/paginated-user-search"}]},{"group":"Tags","pages":[{"title":"List active tags","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/tags","href":"/api-reference/tags/list-active-tags"},{"title":"Get a single public tag by slug","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/tags/{slug}","href":"/api-reference/tags/get-a-single-public-tag-by-slug"}]},{"group":"Upcoming","pages":[{"title":"Curated upcoming-events calendar entries (concise)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/upcoming","href":"/api-reference/upcoming/curated-upcoming-events-calendar-entries-concise"},{"title":"Events behind one upcoming entry, standard card shape","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/upcoming/{id}/events","href":"/api-reference/upcoming/events-behind-one-upcoming-entry-standard-card-shape"}]},{"group":"Public Profile","pages":[{"title":"Public profile resolved STRICTLY by vault address","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/by-vault/{vault}","href":"/api-reference/public-profile/public-profile-resolved-strictly-by-vault-address"},{"title":"Public activity resolved strictly by vault address","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/by-vault/{vault}/activity","href":"/api-reference/public-profile/public-activity-resolved-strictly-by-vault-address"},{"title":"Public portfolio overview resolved strictly by vault address","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/by-vault/{vault}/portfolio/overview","href":"/api-reference/public-profile/public-portfolio-overview-resolved-strictly-by-vault-address"},{"title":"Public positions resolved strictly by vault address","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/by-vault/{vault}/positions","href":"/api-reference/public-profile/public-positions-resolved-strictly-by-vault-address"},{"title":"Public profile of an arbitrary user (keyed by wallet address)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/{address}","href":"/api-reference/public-profile/public-profile-of-an-arbitrary-user-keyed-by-wallet-address"},{"title":"Public activity for the user (trades + position split/merge)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/{address}/activity","href":"/api-reference/public-profile/public-activity-for-the-user-trades-+-position-splitmerge"},{"title":"Public portfolio overview — donut breakdown + whole-wallet P/L series","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/{address}/portfolio/overview","href":"/api-reference/public-profile/public-portfolio-overview-—-donut-breakdown-+-whole-wallet-pl-series"},{"title":"Public list of the user's positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/users/{address}/positions","href":"/api-reference/public-profile/public-list-of-the-users-positions"}]},{"group":"partner","pages":[{"title":"Per-MM KPI-bucket feed (keyset-paginated)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/partner/mm-kpis","href":"/api-reference/partner/per-mm-kpi-bucket-feed-keyset-paginated"},{"title":"Market-maker id-resolution directory","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/partner/mm-kpis/market-makers","href":"/api-reference/partner/market-maker-id-resolution-directory"},{"title":"Window-aggregate cross-check (counts, volumes, fees, fingerprint)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/partner/reconciliation/snapshot","href":"/api-reference/partner/window-aggregate-cross-check-counts-volumes-fees-fingerprint"},{"title":"Cross-wallet executed-trade feed (incremental, cursor-paginated)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/v1/partner/trades","href":"/api-reference/partner/cross-wallet-executed-trade-feed-incremental-cursor-paginated"}]},{"group":"Verticals","pages":[{"title":"Nav sidebar summary — verticals → competitions → event and market counts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /api/verticals","href":"/api-reference/verticals/nav-sidebar-summary-—-verticals-→-competitions-→-event-and-market-counts"}]}]},{"group":"WebSocket","pages":[{"title":"WebSocket overview","href":"/api-reference/websocket/overview"},{"title":"WSS /ws/market","href":"/api-reference/websocket/market"},{"title":"WSS /ws/user","href":"/api-reference/websocket/user"},{"title":"Commands","href":"/api-reference/websocket/commands"},{"title":"Server events","href":"/api-reference/websocket/events"}]}]}]},"basePath":"","title":"Move the caller to the generation-2 vault (vault roadmap part 2) - ADI Predictstreet","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-B7XKH4J3.js","utils-lOYzL7z-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DF6jUUIM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dpsj5f7C.js","snippetPresets-CYeiDe8v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CUFz1YZ_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D8H_iLS4.js","shallow-DdluZBHX.js","getApiPlaygroundDisplay-B9922vev.js","CodeSnippet-CMoRNGYs.js","CodeSnippets-DwyrPHuw.js","Page-DSVu9Ucl.js","getPastedJson-G-zIvlHh.js","icon-B03fnEy0.js","MethodPill-CW7teklc.js","DuplicateIcon-CtO8eekd.js","createIcon-DZTKdM_A.js","DynamicMarkdown-D5M2At0B.js","SectionHeading-C_2NaA2U.js","axios-vUo_bRtp.js","Markdown-D7QRHV3m.js","clsx-D1Z-ELXV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-lvhuD9Du.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CKfC4ywL.js"]}