{"openapi":"3.1.0","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Unstoppable Markets local devnet API","version":"1.0.0","summary":"Self-service Robinhood Chain launch testing on a local devnet.","description":"The implemented write surface is limited to a loopback Robinhood Chain devnet with chain ID 4663. Robinhood mainnet is unavailable until an independent deployment and lifecycle evidence are verified. Ethereum is unsupported."},"servers":[{"url":"/","description":"Same-origin loopback devnet service"}],"tags":[{"name":"Discovery","description":"Local capability and lifecycle evidence reads."},{"name":"Credentials","description":"Developer-scoped local API key issuance."},{"name":"Launches","description":"Wallet-authorized simulation, relay, and receipt reads."}],"paths":{"/api/unstoppable/v1/capabilities":{"get":{"operationId":"getUnstoppableDevnetCapabilities","summary":"Read local launch capabilities","tags":["Discovery"],"security":[],"responses":{"200":{"description":"The configured local devnet contract.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capabilities"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"406":{"description":"The client must accept JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/unstoppable/v1/api-keys":{"post":{"operationId":"issueUnstoppableDevnetApiKey","summary":"Issue a developer-scoped local API key","description":"Returns the API key secret once. The key authenticates developer requests and does not bind or authorize a wallet.","tags":["Credentials"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIssueRequest"}}}},"responses":{"201":{"description":"A local developer API key was issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIssueResponse"}}}},"400":{"description":"The request shape or transaction is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"The request must contain a JSON body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/unstoppable/v1/launches/preflight":{"post":{"operationId":"preflightUnstoppableDevnetLaunch","summary":"Simulate a signed Router launch","description":"Validates chain, Router and permit-authority runtimes, then performs a no-write eth_call using the recovered transaction sender, exact Router calldata, and value.","tags":["Launches"],"security":[{"DeveloperApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmission"}}}},"responses":{"200":{"description":"The exact signed launch simulated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchPreflight"}}}},"400":{"description":"The request shape or transaction is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A valid developer API key is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"406":{"description":"The client must accept JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"The request must contain a JSON body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The Router simulation reverted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The local devnet service or RPC is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/unstoppable/v1/launches":{"post":{"operationId":"submitUnstoppableDevnetLaunch","summary":"Relay a signed Router launch","description":"Derives the transaction hash from the serialized signed transaction, checks the local chain and runtime, simulates the exact call, reads the transaction before relay, and broadcasts only to the configured loopback RPC. Idempotency reservations are process-local and intended for this devnet only.","tags":["Launches"],"security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A 16-128 character key bound to the exact signed transaction for this API credential.","schema":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:@/+\\-]{15,127}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmission"}}}},"responses":{"200":{"description":"A previously submitted transaction is confirmed or reverted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmissionResponse"}}}},"202":{"description":"The transaction was submitted or is already pending.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchSubmissionResponse"}}}},"400":{"description":"The request shape or transaction is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A valid developer API key is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"406":{"description":"The client must accept JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The idempotency key is already bound to different signed bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"The request must contain a JSON body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The Router simulation reverted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The local devnet service or RPC is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/unstoppable/v1/launches/{transactionHash}":{"get":{"operationId":"getUnstoppableDevnetLaunchStatus","summary":"Read a relayed transaction receipt","tags":["Launches"],"security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"transactionHash","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Hash"}}],"responses":{"200":{"description":"Pending, confirmed, or reverted transaction status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchStatus"}}}},"400":{"description":"The request shape or transaction is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"A valid developer API key is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"406":{"description":"The client must accept JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The local devnet service or RPC is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/unstoppable/v1/evidence":{"get":{"operationId":"getUnstoppableDevnetEvidence","summary":"Read strict public devnet evidence","tags":["Discovery"],"security":[],"responses":{"200":{"description":"Validated public runtime and lifecycle evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevnetEvidence"}}}},"405":{"description":"The HTTP method is unsupported.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"406":{"description":"The client must accept JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Validated devnet evidence is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"DeveloperApiKey":{"type":"http","scheme":"bearer","description":"Developer-scoped local credential returned by POST /api/unstoppable/v1/api-keys. Wallet authority is separately proven by the launch permit signature and signed transaction sender."}},"schemas":{"Address":{"type":"string","pattern":"^0x[0-9A-Fa-f]{40}$"},"Hash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"ApiSchemaVersion":{"type":"string","const":"unstoppable.devnet-api.v1"},"Error":{"type":"object","additionalProperties":false,"required":["schemaVersion","error"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Capabilities":{"type":"object","additionalProperties":false,"required":["schemaVersion","mode","chainId","routerAddress","apiKeyIssuance","apiKeyScope","launchAuthorization","launchSubmission","idempotencyStorage","routes","networks"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"mode":{"const":"local-devnet"},"chainId":{"const":4663},"routerAddress":{"$ref":"#/components/schemas/Address"},"apiKeyIssuance":{"const":"public-local-devnet"},"apiKeyScope":{"const":"developer"},"launchAuthorization":{"const":"launch-wallet-signature"},"launchSubmission":{"const":"signed-transaction"},"idempotencyStorage":{"const":"process-local-devnet"},"routes":{"type":"object","additionalProperties":false,"required":["issueApiKey","evidence","preflight","submit","status"],"properties":{"issueApiKey":{"const":"/api/unstoppable/v1/api-keys"},"evidence":{"const":"/api/unstoppable/v1/evidence"},"preflight":{"const":"/api/unstoppable/v1/launches/preflight"},"submit":{"const":"/api/unstoppable/v1/launches"},"status":{"const":"/api/unstoppable/v1/launches/{transactionHash}"}}},"networks":{"type":"object","additionalProperties":false,"required":["robinhoodLocalDevnet","robinhoodMainnet","ethereumMainnet"],"properties":{"robinhoodLocalDevnet":{"type":"object","additionalProperties":false,"required":["available","chainId"],"properties":{"available":{"const":true},"chainId":{"const":4663}}},"robinhoodMainnet":{"$ref":"#/components/schemas/UnavailableMainnet"},"ethereumMainnet":{"type":"object","additionalProperties":false,"required":["available","reason"],"properties":{"available":{"const":false},"reason":{"const":"unsupported_by_robinhood_only_fork"}}}}}}},"UnavailableMainnet":{"type":"object","additionalProperties":false,"required":["available","reason"],"properties":{"available":{"const":false},"reason":{"const":"independent_mainnet_deployment_not_verified"}}},"ApiKeyIssueRequest":{"type":"object","additionalProperties":false,"required":["schemaVersion","label"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"label":{"type":"string","minLength":1,"maxLength":96},"expiresInDays":{"type":"integer","minimum":1,"maximum":30,"default":7}}},"ApiKeyIssueResponse":{"type":"object","additionalProperties":false,"required":["schemaVersion","apiKey","secretState","apiKeySecret"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"apiKey":{"type":"object","additionalProperties":false,"required":["id","label","scopes","subject","issuedAt","expiresAt"],"properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"scopes":{"type":"array","prefixItems":[{"const":"launch:create"},{"const":"launch:read"}],"minItems":2,"maxItems":2},"subject":{"const":"developer"},"issuedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}},"secretState":{"const":"delivered-once"},"apiKeySecret":{"type":"string","pattern":"^um_dev_[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$"}}},"LaunchSubmission":{"type":"object","additionalProperties":false,"required":["schemaVersion","signedTransaction"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"signedTransaction":{"type":"string","pattern":"^0x[0-9a-f]+$","description":"A signed chain-4663 transaction calling launchAndStampV1 on the configured Router."}}},"LaunchPreflight":{"type":"object","additionalProperties":false,"required":["schemaVersion","credentialId","chainId","routerAddress","launchWallet","launchId","token","valueWei","disposition","broadcast"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"credentialId":{"type":"string","format":"uuid"},"chainId":{"const":4663},"routerAddress":{"$ref":"#/components/schemas/Address"},"launchWallet":{"$ref":"#/components/schemas/Address"},"launchId":{"$ref":"#/components/schemas/Hash"},"token":{"$ref":"#/components/schemas/Address"},"valueWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"disposition":{"const":"supported"},"broadcast":{"const":false}}},"LaunchSubmissionResponse":{"type":"object","additionalProperties":false,"required":["schemaVersion","credentialId","chainId","routerAddress","launchWallet","launchId","token","transactionHash","status","idempotentReplay"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"credentialId":{"type":"string","format":"uuid"},"chainId":{"const":4663},"routerAddress":{"$ref":"#/components/schemas/Address"},"launchWallet":{"$ref":"#/components/schemas/Address"},"launchId":{"$ref":"#/components/schemas/Hash"},"token":{"$ref":"#/components/schemas/Address"},"transactionHash":{"$ref":"#/components/schemas/Hash"},"status":{"enum":["submitted","confirmed","reverted"]},"idempotentReplay":{"type":"boolean"}}},"LaunchStatus":{"type":"object","additionalProperties":false,"required":["schemaVersion","credentialId","transactionHash","status"],"properties":{"schemaVersion":{"$ref":"#/components/schemas/ApiSchemaVersion"},"credentialId":{"type":"string","format":"uuid"},"transactionHash":{"$ref":"#/components/schemas/Hash"},"blockNumber":{"type":"string","pattern":"^0x[0-9a-f]+$"},"status":{"enum":["pending","confirmed","reverted"]}},"allOf":[{"if":{"properties":{"status":{"enum":["confirmed","reverted"]}}},"then":{"required":["blockNumber"]}}]},"DevnetEvidence":{"type":"object","additionalProperties":false,"required":["schemaVersion","generatedAt","chainId","status","contracts","launches","checks"],"properties":{"schemaVersion":{"const":"unstoppable.devnet-evidence.v1"},"generatedAt":{"type":"string","format":"date-time"},"chainId":{"const":4663},"status":{"enum":["ready","failed"]},"contracts":{"type":"object","additionalProperties":false,"required":["authority","graphFactory","poolManager","quote","router"],"properties":{"authority":{"$ref":"#/components/schemas/Address"},"graphFactory":{"$ref":"#/components/schemas/Address"},"poolManager":{"$ref":"#/components/schemas/Address"},"quote":{"$ref":"#/components/schemas/Address"},"router":{"$ref":"#/components/schemas/Address"}}},"launches":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/EvidenceLaunch"}},"checks":{"type":"array","maxItems":200,"items":{"$ref":"#/components/schemas/EvidenceCheck"}}}},"EvidenceLaunch":{"type":"object","additionalProperties":false,"required":["launchId","projectId","name","symbol","kind","transactionHash","buyTransactionHash","sellTransactionHash","blockNumber","status","launchWallet","token","hook","market","stampHash","configHash","tokenRuntimeCodeHash","hookRuntimeCodeHash"],"properties":{"launchId":{"$ref":"#/components/schemas/Hash"},"projectId":{"type":"string","minLength":1,"maxLength":128},"name":{"type":"string","minLength":1,"maxLength":64},"symbol":{"type":"string","minLength":1,"maxLength":16},"kind":{"enum":["example","wisp"]},"transactionHash":{"$ref":"#/components/schemas/Hash"},"buyTransactionHash":{"oneOf":[{"$ref":"#/components/schemas/Hash"},{"type":"null"}]},"sellTransactionHash":{"oneOf":[{"$ref":"#/components/schemas/Hash"},{"type":"null"}]},"blockNumber":{"type":"string","pattern":"^(0|[1-9][0-9]{0,19})$"},"status":{"enum":["confirmed","reverted"]},"launchWallet":{"$ref":"#/components/schemas/Address"},"token":{"$ref":"#/components/schemas/Address"},"hook":{"$ref":"#/components/schemas/Address"},"market":{"$ref":"#/components/schemas/Address"},"stampHash":{"$ref":"#/components/schemas/Hash"},"configHash":{"$ref":"#/components/schemas/Hash"},"tokenRuntimeCodeHash":{"$ref":"#/components/schemas/Hash"},"hookRuntimeCodeHash":{"$ref":"#/components/schemas/Hash"}}},"EvidenceCheck":{"type":"object","additionalProperties":false,"required":["id","status","detail"],"properties":{"id":{"type":"string","minLength":1,"maxLength":128},"status":{"enum":["passed","failed"]},"detail":{"type":"string","minLength":1,"maxLength":512}}}}},"x-unstoppable-network-policy":{"supportedChainId":4663,"supportedCaip2":"eip155:4663","rpcBoundary":"loopback-http-only","robinhoodOnly":true,"ethereumSupported":false},"x-unstoppable-availability":{"localDevnet":"configuration-dependent","robinhoodMainnet":"unavailable-unverified","ethereumMainnet":"unsupported"},"x-upstream-attribution":{"name":"Programmable Markets","repository":"https://github.com/programmablehq/PROGRAMMABLE","license":"MIT"}}