{"openapi":"3.1.1","info":{"title":"Mission launch API","version":"1.0.0","description":"Launch a token-funded AI explorer on Mission from a wallet-owning client without a website session. Sign a purpose-bound message to receive a short-lived launch bearer token, upload an image, prepare a transaction, sign it locally, submit the signed bytes, and poll the same intent until finalization. Never send a wallet private key. Every reserved mint ends with lowercase civs. Optional xUrl becomes the token's X link; the token website always points to its journal on mission.fyi. Availability is reported by /api/v1/status and /api/v1/models. A documented route does not imply launches are enabled or that a model has completed paid verification."},"servers":[{"url":"https://mission.fyi","description":"Mission production site"},{"url":"/","description":"Current deployment"}],"tags":[{"name":"Authentication"},{"name":"Launch"},{"name":"Discovery"}],"security":[],"paths":{"/api/v1/auth/challenge":{"post":{"operationId":"createLaunchChallenge","tags":["Authentication"],"summary":"Request a wallet sign-in challenge","description":"The JSON request is limited to 1,024 bytes. The challenge expires after five minutes. Sign the exact returned message as UTF-8 bytes with the wallet's Ed25519 signMessage operation. Signing this message grants launch API access; it does not sign a transaction or move funds. If Origin is present it must match the configured canonical site origin. CLI clients may omit Origin. No cookie authentication or cross-origin browser access is used.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeRequest"}}}},"responses":{"200":{"description":"A purpose-bound wallet challenge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/auth/verify":{"post":{"operationId":"verifyLaunchChallenge","tags":["Authentication"],"summary":"Exchange a signed challenge for a launch bearer token","description":"The JSON request is limited to 4,096 bytes. Send the unchanged nonce and the base58 encoding of the 64-byte Ed25519 signature over the returned message. The challenge can be consumed once. At most ten successful challenge consumptions are admitted per wallet per hour. The resulting bearer expires after fifteen minutes and has launch scope. Website session cookies are neither accepted nor issued by this API.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}}},"responses":{"200":{"description":"A short-lived launch bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The wallet authentication or launch preparation rate limit has been reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/launch/upload-token":{"post":{"operationId":"createImageUploadToken","tags":["Launch"],"summary":"Authorize a direct image upload","security":[{"LaunchBearer":[]}],"description":"The JSON request is limited to 1,024 bytes. Hash the exact file bytes with SHA-256 before requesting the token. Then POST those raw bytes, without multipart encoding, to the returned uploadUrl. Use Authorization: Bearer <token> with the returned upload transport token, not the launch bearer, and send the exact declared Content-Type. If Content-Length is supplied it must equal size. The transport token expires after two minutes and is single-use. The worker enforces the byte count, hash, decoded image type, and a per-wallet upload quota. The successful raw upload returns ImageUploadResponse; pass imageUri and uploadTicket as imageUri and imageTicket to prepareLaunch. Failed consumed uploads require a new transport token. No cookies are sent to the worker.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadTokenRequest"}}}},"responses":{"200":{"description":"The exact upload URL and a one-use transport bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadTokenResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-direct-upload":{"method":"POST","urlFrom":"uploadUrl","authorization":"Bearer token","requestBody":{"$ref":"#/components/requestBodies/RawImage"},"responses":{"200":{"description":"An IPFS image and wallet-bound launch image ticket.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageUploadResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"An idempotency conflict, expired unsigned quote, or already-used upload token requires reconciliation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"The image bytes have an unsupported type or cannot be fully decoded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"An upload provider or verified image retrieval failed, or the configured launch worker returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"/api/v1/launch/build":{"post":{"operationId":"prepareLaunch","tags":["Launch"],"summary":"Prepare a launch transaction and fee quote","security":[{"LaunchBearer":[]}],"description":"The JSON request is limited to 8,192 bytes. The authenticated wallet is the launcher; neither wallet nor mint is accepted in the request. The server reserves a mint ending with civs and a managed creator treasury. Use a new idempotencyKey for a new launch and preserve it for retries of the exact same input. The returned versioned transaction includes the optional atomic developer buy, a fixed 0.1 SOL platform launch fee to the quoted platformFeeRecipient, and a separate fixed 0.025 SOL initial treasury funding. The API and website charge the same platform fee. Clients cannot override its amount or recipient. devBuyLamports is a maximum spend, and the complete maximum wallet debit, including platform fee, bootstrap, account funding, network fees and priority ceiling, is feeQuote.totalMaxLamports. Review the returned expectation and fee quote, then add only the wallet signature locally. The mint signature is completed by the worker during submission. The quote expires after approximately sixty seconds; slow preparation may fail instead of returning a stale quote. Reusing an expired unsigned intent requires a new idempotencyKey. A 503 response can mean launches remain paused pending review, provider configuration, a verified model, a configured fee recipient, or a ready vanity mint inventory.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchPrepareRequest"}}}},"responses":{"200":{"description":"An unsigned wallet transaction, its public expectation, and bounded fee quote.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchPreparedResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"An idempotency conflict, expired unsigned quote, or already-used upload token requires reconciliation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"The wallet authentication or launch preparation rate limit has been reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"An upload provider or verified image retrieval failed, or the configured launch worker returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/launch/submit":{"post":{"operationId":"submitLaunch","tags":["Launch"],"summary":"Submit the locally wallet-signed launch transaction","security":[{"LaunchBearer":[]}],"description":"The JSON request is limited to 4,096 bytes. Send the serialized versioned transaction as base64 after adding the authenticated wallet signature. The worker verifies the original expected instruction set, economic limits, and wallet signature, then adds the reserved mint signature and durably records the original transaction before broadcast. A submitted or uncertain result is not finalization. Preserve intentId and poll launch status. Ambiguous outcomes reconcile the original signature; do not create or broadcast a replacement transaction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmitRequest"}}}},"responses":{"200":{"description":"The original intent and its submission state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmitResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No launch intent belongs to the authenticated wallet with this identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"An idempotency conflict, expired unsigned quote, or already-used upload token requires reconciliation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"The request exceeds this operation's body limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"An upload provider or verified image retrieval failed, or the configured launch worker returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/launch/status":{"get":{"operationId":"getLaunchStatus","tags":["Launch"],"summary":"Read and reconcile an owned launch intent","security":[{"LaunchBearer":[]}],"description":"Only the authenticated launcher can read this intent. The query must contain exactly one intentId and no other parameters. Finalized means the original on-chain receipt was verified and the explorer was activated. Paid runs additionally require settled AI credits and available reviewed providers. A null signature means there is no recorded broadcast signature. Uncertain outcomes remain tied to the original transaction.","parameters":[{"name":"intentId","in":"query","required":true,"schema":{"$ref":"#/components/schemas/IntentId"}}],"responses":{"200":{"description":"The current verified or pending intent state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchStatusResponse"}}}},"400":{"description":"Malformed request, invalid fields, or a request that fails launch validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The wallet signature, bearer token, or required authorization is invalid or expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The supplied Origin or ownership-bound image ticket is not allowed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No launch intent belongs to the authenticated wallet with this identifier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"An upload provider or verified image retrieval failed, or the configured launch worker returned an invalid response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/models":{"get":{"operationId":"listLaunchModels","tags":["Discovery"],"summary":"Read the model catalog and verified availability","description":"Use the concrete id of a model whose available and toolCallingVerified fields are both true. Catalog metadata, pricing, and model verification are separate. Stale catalog rows remain visible but cannot be selected. The models array can be empty when catalog data is unavailable. Prices are USD per million tokens; actual payments use exact provider quotes.","responses":{"200":{"description":"Public catalog metadata and selection availability.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelsResponse"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/status":{"get":{"operationId":"getServiceStatus","tags":["Discovery"],"summary":"Read launch and worker availability","description":"This endpoint reports observed or unconfigured component health. An HTTP 200 response alone does not mean launches or paid civilization runs are enabled.","responses":{"200":{"description":"The public component health states.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}}},"503":{"description":"Required configuration or a reviewed dependency is unavailable, or launches are paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"LaunchBearer":{"type":"http","scheme":"bearer","description":"The fifteen-minute launch-scoped accessToken returned by verifyLaunchChallenge. This is distinct from website cookies and the two-minute image transport token."}},"requestBodies":{"RawImage":{"required":true,"description":"The exact original file bytes, up to 5,242,880 bytes. POST to the returned uploadUrl with its transport bearer token and matching Content-Type.","content":{"image/png":{},"image/jpeg":{},"image/webp":{},"image/gif":{}}}},"schemas":{"Error":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string","description":"A safe public error message. It contains no private worker, treasury, or session data."}},"required":["error"]},"IntentId":{"type":"string","format":"uuid"},"Address":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"Lamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"ChallengeRequest":{"type":"object","additionalProperties":false,"properties":{"wallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"A canonical on-curve Solana Ed25519 wallet public key."}},"required":["wallet"]},"ChallengeResponse":{"type":"object","additionalProperties":false,"properties":{"nonce":{"type":"string","maxLength":2048,"description":"An opaque purpose-bound challenge token. Return it unchanged to verifyLaunchChallenge."},"message":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["nonce","message","expiresAt"]},"VerifyRequest":{"type":"object","additionalProperties":false,"properties":{"wallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"nonce":{"type":"string","maxLength":2048},"signature":{"type":"string","minLength":64,"maxLength":88,"pattern":"^[1-9A-HJ-NP-Za-km-z]{64,88}$","description":"Base58 encoding of the wallet's 64-byte Ed25519 signature over the exact challenge message UTF-8 bytes."}},"required":["wallet","nonce","signature"]},"VerifyResponse":{"type":"object","additionalProperties":false,"properties":{"accessToken":{"type":"string","description":"Keep this token private. It is valid for fifteen minutes and only launch scope."},"tokenType":{"type":"string","const":"Bearer"},"scope":{"type":"string","const":"launch"},"wallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"expiresAt":{"type":"string","format":"date-time"}},"required":["accessToken","tokenType","scope","wallet","expiresAt"]},"UploadTokenRequest":{"type":"object","additionalProperties":false,"properties":{"size":{"type":"integer","minimum":1,"maximum":5242880},"contentType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"Lowercase SHA-256 of the exact original file bytes."}},"required":["size","contentType","sha256"]},"UploadTokenResponse":{"type":"object","additionalProperties":false,"properties":{"uploadUrl":{"type":"string","format":"uri","description":"POST raw image bytes to this configured worker URL. Do not infer a same-origin upload path."},"token":{"type":"string","description":"One-use image transport bearer token, valid for two minutes."},"expiresAt":{"type":"string","format":"date-time"},"maxBytes":{"type":"integer","const":5242880}},"required":["uploadUrl","token","expiresAt","maxBytes"]},"ImageUploadResponse":{"type":"object","additionalProperties":false,"properties":{"imageUri":{"type":"string","format":"uri","description":"The verified IPFS URI of the original image."},"cid":{"type":"string"},"hash":{"type":"string","pattern":"^[a-f0-9]{64}$"},"contentType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/gif"]},"uploadTicket":{"type":"string","description":"A wallet-bound image evidence ticket. Send it as imageTicket when preparing a launch; it expires after thirty minutes."}},"required":["imageUri","cid","hash","contentType","uploadTicket"]},"LaunchPrepareRequest":{"type":"object","additionalProperties":false,"properties":{"idempotencyKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$"},"name":{"type":"string","minLength":1,"maxLength":32,"description":"Trimmed, nonempty token name, at most 32 UTF-8 bytes. Control and formatting characters are rejected."},"symbol":{"type":"string","minLength":1,"maxLength":10,"description":"Trimmed, nonempty token symbol, at most 10 UTF-8 bytes, without whitespace."},"description":{"type":"string","maxLength":1000,"description":"Trimmed token description. An empty string is allowed."},"imageUri":{"type":"string","maxLength":200,"description":"The exact imageUri from ImageUploadResponse."},"imageTicket":{"type":"string","maxLength":4096,"description":"The uploadTicket from ImageUploadResponse, bound to this wallet and image."},"model":{"type":"string","minLength":1,"maxLength":128,"description":"A concrete available and tool-calling-verified model id from listLaunchModels."},"theme":{"type":"string","minLength":1,"maxLength":32},"archetype":{"type":"string","minLength":1,"maxLength":64},"brief":{"type":"string","minLength":1,"maxLength":1000,"description":"Trimmed founding brief. The brief plus the appended founding temperament must fit within 1,000 characters."},"xUrl":{"type":"string","pattern":"^(?:https://x\\.com/[A-Za-z0-9_]{1,15})?$","default":"","description":"Optional canonical X profile. The explorer website link is assigned by Mission and cannot be overridden."},"traits":{"type":"array","maxItems":3,"uniqueItems":true,"default":[],"items":{"type":"string","enum":["Curious","Patient","Pragmatic","Diplomatic","Adventurous","Methodical"]}},"devBuyLamports":{"type":"string","pattern":"^(?:0|[1-9]\\d{0,10}|100000000000)$","description":"Optional atomic developer buy maximum, from 0 to 100,000,000,000 lamports. Use \"0\" for no buy. Network fees and account funding are quoted separately."},"slippageBps":{"type":"integer","minimum":0,"maximum":500,"description":"Developer buy slippage in basis points. 100 means 1%."}},"required":["idempotencyKey","name","symbol","description","imageUri","imageTicket","model","theme","archetype","brief","devBuyLamports","slippageBps"]},"LaunchFeeQuote":{"type":"object","additionalProperties":false,"properties":{"devBuyMaxLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"treasuryBootstrapLamports":{"type":"string","const":"25000000","description":"A fixed 25,000,000 lamport (0.025 SOL) transfer to the managed agent treasury for initial AI credits and network fees. Included in totalMaxLamports."},"platformFeeLamports":{"type":"string","const":"100000000","description":"The fixed 100,000,000 lamport (0.1 SOL) platform launch fee, charged identically by the API and website. Included in totalMaxLamports."},"platformFeeRecipient":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The configured public recipient of the fixed platform launch fee. Bound to the prepared transaction and its expectation; clients cannot override it."},"simulatedDebitLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"accountFundingLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"networkFeeLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"maxPriorityLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"totalMaxLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"balanceLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"computeUnits":{"type":["integer","null"],"minimum":0}},"required":["devBuyMaxLamports","treasuryBootstrapLamports","platformFeeLamports","platformFeeRecipient","simulatedDebitLamports","accountFundingLamports","networkFeeLamports","maxPriorityLamports","totalMaxLamports","balanceLamports","computeUnits"]},"InstructionIntent":{"type":"object","additionalProperties":false,"properties":{"programId":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"dataBase64":{"type":"string","maxLength":4096},"keys":{"type":"array","maxItems":64,"items":{"type":"object","additionalProperties":false,"properties":{"pubkey":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"isSigner":{"type":"boolean"},"isWritable":{"type":"boolean"}},"required":["pubkey","isSigner","isWritable"]}}},"required":["programId","dataBase64","keys"]},"LookupTableSnapshot":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"addresses":{"type":"array","maxItems":256,"items":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"deactivationSlot":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"lastExtendedSlot":{"type":"integer","minimum":0},"lastExtendedSlotStartIndex":{"type":"integer","minimum":0,"maximum":255}},"required":["key","addresses","deactivationSlot","lastExtendedSlot","lastExtendedSlotStartIndex"]},"LaunchExpectation":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1},"wallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"treasury":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"name":{"type":"string","maxLength":32},"symbol":{"type":"string","maxLength":10},"metadataUri":{"type":"string","format":"uri","maxLength":200},"devBuyLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"slippageBps":{"type":"integer","minimum":0,"maximum":500},"unsignedTransactionBase64":{"type":"string","maxLength":1444},"instructions":{"type":"array","maxItems":40,"items":{"$ref":"#/components/schemas/InstructionIntent"}},"lookupTables":{"type":"array","maxItems":4,"items":{"$ref":"#/components/schemas/LookupTableSnapshot"}},"blockhash":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"lastValidBlockHeight":{"type":"integer","minimum":0},"minContextSlot":{"type":"integer","minimum":0},"expiresAt":{"type":"string","format":"date-time"},"minimumTokens":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"treasuryBootstrapLamports":{"type":"string","const":"25000000","description":"A fixed 25,000,000 lamport (0.025 SOL) transfer to the managed agent treasury for initial AI credits and network fees. Included in totalMaxLamports."},"platformFeeLamports":{"type":"string","const":"100000000","description":"The fixed 100,000,000 lamport (0.1 SOL) platform launch fee, charged identically by the API and website. Included in totalMaxLamports."},"platformFeeRecipient":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The configured public recipient of the fixed platform launch fee. Bound to the prepared transaction and its expectation; clients cannot override it."},"totalMaxLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"rentTopUpLamports":{"type":"integer","minimum":0,"maximum":100000},"maxPriorityLamports":{"type":"string","pattern":"^(0|[1-9]\\d{0,29})$","description":"An integer number of lamports encoded as a decimal string."},"feeQuote":{"$ref":"#/components/schemas/LaunchFeeQuote"},"packetBytes":{"type":"integer","minimum":1,"maximum":1082}},"required":["version","wallet","mint","treasury","name","symbol","metadataUri","devBuyLamports","slippageBps","unsignedTransactionBase64","instructions","lookupTables","blockhash","lastValidBlockHeight","minContextSlot","expiresAt","minimumTokens","treasuryBootstrapLamports","platformFeeLamports","platformFeeRecipient","totalMaxLamports","rentTopUpLamports","maxPriorityLamports","feeQuote","packetBytes"]},"LaunchPreparedResponse":{"type":"object","additionalProperties":false,"properties":{"intentId":{"$ref":"#/components/schemas/IntentId"},"mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","description":"The server-reserved mint. Its base58 address ends with lowercase civs."},"treasury":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"metadataUri":{"type":"string","format":"uri","maxLength":200},"transactionBase64":{"type":"string","maxLength":1444},"blockhash":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"lastValidBlockHeight":{"type":"integer","minimum":0},"expiresAt":{"type":"string","format":"date-time"},"packetBytes":{"type":"integer","minimum":1,"maximum":1082},"feeQuote":{"$ref":"#/components/schemas/LaunchFeeQuote"},"expectation":{"$ref":"#/components/schemas/LaunchExpectation"},"expectationHash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["intentId","mint","treasury","metadataUri","transactionBase64","blockhash","lastValidBlockHeight","expiresAt","packetBytes","feeQuote","expectation","expectationHash"]},"LaunchSubmitRequest":{"type":"object","additionalProperties":false,"properties":{"intentId":{"$ref":"#/components/schemas/IntentId"},"signedTransactionBase64":{"type":"string","minLength":1,"maxLength":1644,"description":"The original versioned transaction with the authenticated wallet signature, serialized as base64. Do not alter its instructions."}},"required":["intentId","signedTransactionBase64"]},"LaunchSubmitResponse":{"type":"object","additionalProperties":false,"properties":{"intentId":{"$ref":"#/components/schemas/IntentId"},"mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"signature":{"type":["string","null"],"minLength":64,"maxLength":88,"pattern":"^[1-9A-HJ-NP-Za-km-z]{64,88}$"},"status":{"type":"string","enum":["prepared","signed","submitted","uncertain","finalized","failed","expired","already_submitted","busy"]}},"required":["intentId","mint","signature","status"]},"LaunchStatusResponse":{"type":"object","additionalProperties":false,"properties":{"intentId":{"$ref":"#/components/schemas/IntentId"},"mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"treasury":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"signature":{"type":["string","null"],"minLength":64,"maxLength":88,"pattern":"^[1-9A-HJ-NP-Za-km-z]{64,88}$"},"state":{"type":"string","enum":["prepared","signed","submitted","uncertain","finalized","failed","expired"]},"resumeReason":{"type":"string","maxLength":512}},"required":["intentId","mint","treasury","signature","state","resumeReason"]},"CatalogModelInfo":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"contextWindow":{"type":"integer","minimum":1},"inputPerMillion":{"type":"number","minimum":0},"outputPerMillion":{"type":"number","minimum":0},"available":{"type":"boolean"},"toolCallingVerified":{"type":"boolean"},"description":{"type":"string","maxLength":1800},"unavailableReason":{"type":["string","null"]},"catalogStale":{"type":"boolean"},"catalogUpdatedAt":{"type":"string","format":"date-time"}},"required":["id","name","provider","contextWindow","inputPerMillion","outputPerMillion","available","toolCallingVerified","description","unavailableReason","catalogStale","catalogUpdatedAt"]},"ModelsResponse":{"type":"object","additionalProperties":false,"properties":{"models":{"type":"array","items":{"$ref":"#/components/schemas/CatalogModelInfo"}}},"required":["models"]},"Health":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["healthy","unconfigured","paused","degraded"]},"reason":{"type":"string"}},"required":["state","reason"]},"ServiceStatus":{"type":"object","additionalProperties":false,"properties":{"database":{"$ref":"#/components/schemas/Health"},"launch":{"$ref":"#/components/schemas/Health"},"runtime":{"$ref":"#/components/schemas/Health"},"funding":{"$ref":"#/components/schemas/Health"},"world":{"$ref":"#/components/schemas/Health"}},"required":["database","launch","runtime","funding","world"]}}}}