{"openapi":"3.1.0","info":{"title":"ProgramSky developer APIs","version":"1.18.0","summary":"Ethereum and Robinhood Explore feeds, Custom launch contracts and release discovery.","description":"The unauthenticated GET /api/explore/ethereum and GET /api/explore/robinhood endpoints serve chain-specific verified launch pages. Their response status distinguishes current, incomplete, saved and unavailable reads; module catalog filters do not restrict source submission ideas. The legacy /api/explore and /api/explore/token routes, including analytics and chart, retain their indexing-reset responses. At the separately hosted Custom Launch API, fresh writes use the public Ethereum V3.3 contract. Robinhood Chain V4 exposes a public self-serve launch path when live publicWrites, publicAuthorization and releaseReady discovery fields are all true. Clients must verify these gates before creating. Robinhood V4.1 requires a request-bound funding plan, an atomic initial buy meeting a $1 gross native ETH reference at permit authorization, and an exact server-verified native fee kernel. The kernel policy is 20 bps on the gross native leg once per successful swap, paid through native ETH claims to the fixed treasury. Per-launch fee and initial-buy receipts bind the exact prepared code and stamped pool. Source admission does not prove deployed vault state, a completed trade, collected revenue or third-party indexing. Require live publicWrites, publicAuthorization and releaseReady discovery before creating; the wallet signature remains separate. V2 and V1 history remain readable, while both legacy creation routes are write-fenced with non-retryable 409 CUSTOM_LAUNCH_V2_READ_ONLY and CUSTOM_LAUNCH_V1_READ_ONLY responses. CLI and model checks prepare a request; only the API server decides whether verified evidence permits a wallet handoff. Legacy Registry and GitHub submission intake is closed. An API key and the CLI never sign or broadcast a controller-wallet transaction.","contact":{"name":"Programmable","url":"https://programmable.market/docs/developers"}},"jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","servers":[{"url":"https://programmable.market","description":"Programmable production"}],"externalDocs":{"description":"Programmable developer documentation","url":"https://programmable.market/docs/developers"},"tags":[{"name":"Discovery","description":"Verified chain-specific launch feeds and the explicit reset contracts of legacy Explore routes."},{"name":"Operations","description":"Public, provider-free Explore indexing state."},{"name":"Registry","description":"Custom Registry public-read readiness and release binding."},{"name":"Metadata","description":"Machine-readable API discovery."},{"name":"Custom launch","description":"Fresh wallet-key, partner-root and bounded-partner-subkey writes use Ethereum V3.3. For Robinhood V4 self-serve writes, resolve the live discovery authority and require publicWrites, publicAuthorization and releaseReady to all be true. Its required 20 bps default policy is not a canonical onchain-enforcement or revenue claim. V2 and V1 remain available for existing history only. Manage wallet keys at programmable.market/developers/api-keys."}],"paths":{"/api/explore/ethereum":{"get":{"operationId":"listEthereumExploreLaunches","summary":"Read Ethereum launch pages","description":"Combines the verified Classic catalog and finalized Ethereum Router identities. ready means both sources are current; partial means one source is unavailable; stale means a saved source is being used. No source yields unavailable. updatedAt is the oldest included source observation. Market values are null. Unknown or repeated query parameters are rejected; no chain override is accepted. This presentation feed is not a complete archive or proof of tradability.","tags":["Discovery"],"security":[],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":999999,"default":1},"description":"A positive decimal page number, at most six digits. The reader clamps it to the available pages."},{"name":"pageSize","in":"query","schema":{"type":"integer","enum":[6,8,10,50],"default":10}},{"name":"q","in":"query","schema":{"type":"string","maxLength":128,"default":""},"description":"Search text, at most 128 UTF-16 code units."},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","oldest"],"default":"newest"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["all","classic","custom"],"default":"all"},"description":"Filter published launch sources in this presentation feed. These values do not restrict module source submissions."}],"responses":{"200":{"description":"Current, partial or saved verified identities.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/EthereumExplorePage"},{"properties":{"status":{"enum":["ready","partial","stale"]}}}]}}},"headers":{"X-Programmable-Indexing-Status":{"schema":{"enum":["ready","partial","stale"]}},"Cache-Control":{"schema":{"enum":["public, max-age=0, s-maxage=15","no-store"]}}}},"400":{"description":"Unsupported, duplicated or out-of-range query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainExploreInvalidQuery"}}}},"503":{"description":"No usable source, or a source conflict/read failure.","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/EthereumExplorePage"},{"properties":{"status":{"enum":["unavailable"]}}}]},{"$ref":"#/components/schemas/EthereumExploreUnavailable"}]}}},"headers":{"X-Programmable-Indexing-Status":{"schema":{"enum":["unavailable"]}},"Cache-Control":{"schema":{"enum":["no-store"]}}}}}}},"/api/explore/robinhood":{"get":{"operationId":"listRobinhoodExploreLaunches","summary":"Read Robinhood Chain launch pages","description":"Reads the saved verified Custom Router, exact Module Mode release indexes and finalized launch projections. Projected launches may have no primary asset or market; their original source, assurance and provider states remain separate. ready means each block source has reached its finalized cursor and the projection feed has a completed traversal within five minutes; routine projection refreshes preserve that completed observation; syncing means an admitted source is still catching up without completed coverage; stale means an observation is over five minutes old; unavailable means the snapshot cannot be read. updatedAt is the oldest source observation. Optional market observations drive highest/lowest sorting. Activity sorts by observed USD trading volume over the last 24 hours; missing values sort after known values. The verified main token retains the first slot on every page, independently of the query and mode. It is counted once in totalItems; matchingItems excludes the pin when it does not match the query or mode. Public reads do not fall through to RPC indexing. Unknown or repeated query parameters are rejected; no chain override is accepted. This presentation feed is not a complete archive or a publication authority.","tags":["Discovery"],"security":[],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"maximum":999999,"default":1},"description":"A positive decimal page number, at most six digits. The reader clamps it to the available pages."},{"name":"pageSize","in":"query","schema":{"type":"integer","enum":[6,8,10,50],"default":50}},{"name":"q","in":"query","schema":{"type":"string","maxLength":128,"default":""},"description":"Search text, at most 128 UTF-16 code units."},{"name":"sort","in":"query","schema":{"type":"string","enum":["activity","highest","lowest","newest","oldest"],"default":"newest"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["all","module","custom"],"default":"all"},"description":"Filter published launch sources in this presentation feed. These values do not restrict module source submissions."}],"responses":{"200":{"description":"Verified saved launch identities with optional presentations and markets.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RobinhoodExplorePage"},{"properties":{"status":{"enum":["ready","syncing","stale"]}}}]}}},"headers":{"X-Programmable-Indexing-Status":{"schema":{"enum":["ready","syncing","stale"]}},"Cache-Control":{"schema":{"enum":["public, max-age=0, s-maxage=15, stale-while-revalidate=30","no-store"]}}}},"400":{"description":"Unsupported, duplicated or out-of-range query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChainExploreInvalidQuery"}}}},"503":{"description":"No usable saved index. The response retains the empty page envelope.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RobinhoodExplorePage"},{"properties":{"status":{"enum":["unavailable"]}}}]}}},"headers":{"X-Programmable-Indexing-Status":{"schema":{"enum":["unavailable"]}},"Cache-Control":{"schema":{"enum":["no-store"]}}}}}}},"/api":{"get":{"operationId":"getPublicApiIndex","summary":"Read the public API index","description":"Returns canonical links and the safety boundary for the documented read-only surface.","tags":["Metadata"],"security":[],"responses":{"200":{"description":"Public API index.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}}}}},"/api/ops/health":{"get":{"operationId":"getOperationsHealth","summary":"Read website launch indexing health","description":"Reads the existing Ethereum and Robinhood launch catalogs with a five-second bound and a shared 15-second observation cache. The overall status describes these website indexes only. Codex roles are reported with direct provider health not checked. Follow the separate Custom Launch API readiness and capabilities URLs for launch and simulator availability. Legacy Explore reset routes retain their own status.","tags":["Operations"],"security":[],"responses":{"200":{"description":"Website launch indexes are ready or degraded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationsHealth"}}},"headers":{"Cache-Control":{"description":"Health responses are not stored by clients or shared caches.","schema":{"const":"no-store"}},"X-Programmable-Indexing-Status":{"description":"Overall website launch indexing status.","schema":{"enum":["ready","degraded","unavailable"]}}}},"503":{"description":"Both website launch indexes are unavailable; the same no-store and indexing-status headers apply.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OperationsHealth"}}}}}}},"/api/explore":{"get":{"operationId":"listVerifiedLaunches","summary":"Read the Explore index reset state","description":"Valid requests return a deterministic 503 while token indexing is intentionally reset. No catalog, ranking, search, market-data provider or fallback is read.","tags":["Discovery"],"security":[],"parameters":[{"name":"chain","in":"query","description":"Chain namespace retained for request validation.","schema":{"type":"integer","enum":[1,4663],"default":1}},{"name":"page","in":"query","description":"One-based result page retained for request validation.","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Results per page retained for request validation.","schema":{"type":"integer","minimum":1,"maximum":100,"default":9}},{"name":"q","in":"query","description":"One to 100 Unicode code points retained for request validation.","schema":{"type":"string","minLength":1,"maxLength":100}},{"name":"model","in":"query","description":"Launch category retained for request validation.","schema":{"type":"string","enum":["classic","custom"]}},{"name":"socials","in":"query","description":"Social-link filter retained for request validation.","schema":{"type":"string","enum":["yes","no"]}},{"name":"sort","in":"query","description":"Sort selection retained for request validation.","schema":{"type":"string","enum":["newest","oldest","trending","market-cap","market-cap-asc","highest-market-cap","lowest-market-cap"],"default":"newest"}},{"name":"rankingCommitment","in":"query","description":"Previously issued ranking commitment retained only for request validation during the reset.","schema":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}}],"responses":{"400":{"description":"Invalid query shape.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Explore token indexing is intentionally reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreIndexResetError"}}},"headers":{"Cache-Control":{"description":"Reset responses are never stored by clients or shared caches.","schema":{"const":"no-store"}},"X-Programmable-Indexing-Status":{"description":"Explore indexing is intentionally reset while it is rebuilt.","schema":{"const":"reset"}},"Retry-After":{"description":"Clients may retry after the one-hour reset interval.","schema":{"const":"3600"}}}}}}},"/api/explore/token":{"get":{"operationId":"getVerifiedToken","summary":"Read the token-detail index reset state","description":"Valid requests return a deterministic 503 while token indexing is intentionally reset. A 404 is not emitted because no completed identity lookup occurs.","tags":["Discovery"],"security":[],"parameters":[{"name":"chain","in":"query","description":"Chain namespace retained for request validation.","schema":{"type":"integer","enum":[1,4663],"default":1}},{"name":"address","in":"query","required":true,"description":"EVM token contract address on the selected chain.","schema":{"$ref":"#/components/schemas/EthereumAddress"},"example":"0x7987f03462200b3D8A072E02C89A8A41dCB124EE"}],"responses":{"400":{"description":"Invalid address or query shape.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Explore token indexing is intentionally reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreIndexResetError"}}},"headers":{"Cache-Control":{"description":"Reset responses are never stored by clients or shared caches.","schema":{"const":"no-store"}},"X-Programmable-Indexing-Status":{"description":"Explore indexing is intentionally reset while it is rebuilt.","schema":{"const":"reset"}},"Retry-After":{"description":"Clients may retry after the one-hour reset interval.","schema":{"const":"3600"}}}}}}},"/api/explore/token/analytics":{"get":{"operationId":"getVerifiedTokenAnalytics","summary":"Read the token-analytics index reset state","description":"Valid requests return a deterministic 503 while token analytics indexing is intentionally reset. No analytics provider or fallback is read.","tags":["Discovery"],"security":[],"parameters":[{"name":"chain","in":"query","description":"Ethereum only. Omit for chain 1.","schema":{"type":"integer","enum":[1],"default":1}},{"name":"address","in":"query","required":true,"description":"EVM token contract address.","schema":{"$ref":"#/components/schemas/EthereumAddress"},"example":"0x7987f03462200b3D8A072E02C89A8A41dCB124EE"},{"name":"section","in":"query","description":"Analytics section retained for request validation.","schema":{"type":"string","enum":["summary","holders","traders"],"default":"summary"}},{"name":"limit","in":"query","description":"Optional fixed ranking limit. When present, the exact decimal value 20 is required.","schema":{"type":"integer","const":20,"default":20}}],"responses":{"400":{"description":"Invalid analytics query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Explore token analytics indexing is intentionally reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExploreIndexResetError"}}},"headers":{"Cache-Control":{"description":"Reset responses are never stored by clients or shared caches.","schema":{"const":"no-store"}},"X-Programmable-Indexing-Status":{"description":"Explore indexing is intentionally reset while it is rebuilt.","schema":{"const":"reset"}},"Retry-After":{"description":"Clients may retry after the one-hour reset interval.","schema":{"const":"3600"}}}}}}},"/api/explore/token/chart":{"get":{"operationId":"getVerifiedTokenChart","summary":"Read the token-chart index reset state","description":"Valid requests return the provider-neutral market-chart-error.v2 response while token chart indexing is intentionally reset. No chart provider or fallback is read.","tags":["Discovery"],"security":[],"parameters":[{"name":"address","in":"query","required":true,"description":"EVM token contract address.","schema":{"$ref":"#/components/schemas/EthereumAddress"},"example":"0x7987f03462200b3D8A072E02C89A8A41dCB124EE"},{"name":"range","in":"query","description":"Requested bounded chart range.","schema":{"type":"string","enum":["1h","1d","1w","all"],"default":"all"}}],"responses":{"400":{"description":"Invalid chart query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"Explore token chart indexing is intentionally reset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketChartError"}}},"headers":{"Cache-Control":{"description":"Reset responses are never stored by clients or shared caches.","schema":{"const":"no-store"}},"X-Programmable-Indexing-Status":{"description":"Explore indexing is intentionally reset while it is rebuilt.","schema":{"const":"reset"}},"Retry-After":{"description":"Clients may retry after the one-hour reset interval.","schema":{"const":"3600"}}}}}}},"/api/custom-launch/registry/v2/readiness":{"get":{"operationId":"getCustomRegistryReadiness","summary":"Read Custom Registry readiness","description":"Reports whether the exact production Registry binding and provider quorum are verified for public reads.","tags":["Registry"],"security":[],"responses":{"200":{"description":"Registry public-read boundary is ready.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryReadiness"}}}},"503":{"description":"Registry public reads remain fail-closed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/custom-launch/registry/v2/manifest":{"get":{"operationId":"getCustomRegistryManifest","summary":"Read the Custom Registry release manifest","description":"Returns the exact chain, deployment, runtime, source, artifact, and finality commitments for the live Registry public-read surface.","tags":["Registry"],"security":[],"responses":{"200":{"description":"Exact live Registry release manifest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistryManifest"}}}},"503":{"description":"No verified live Registry manifest is available.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/custom-launches":{"get":{"operationId":"listCustomLaunches","summary":"List your Custom launch requests","description":"Returns newest-first bounded summaries for the exact wallet bound to the API key. Pagination is keyset-based, output is always null, and pending rows receive bounded best-effort chain reconciliation without hiding durable history on RPC failure. Read the single-resource route for the full prepared artifact and exact output.","tags":["Custom launch"],"servers":[{"url":"https://api.programmable.market","description":"Programmable Custom Launch API"}],"security":[{"CustomLaunchApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Page size. Defaults to 10 and never exceeds 25.","schema":{"type":"integer","minimum":1,"maximum":25,"default":10}},{"name":"cursor","in":"query","required":false,"description":"Opaque nextCursor returned by the previous page.","schema":{"type":"string","minLength":16,"maxLength":512,"pattern":"^[A-Za-z0-9_-]+$"}}],"responses":{"200":{"description":"Wallet-owned launch request page.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchListPage"}}}},"400":{"description":"Invalid pagination query.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"401":{"description":"API key is missing, malformed, expired, revoked, or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"403":{"description":"API key lacks custom-launch:read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"503":{"description":"Launch history is temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}}}},"post":{"operationId":"createCustomLaunch","deprecated":true,"summary":"V1 launch creation is read-only","description":"The V1 creation route is retained only as an explicit write fence. After successful API-key authentication and scope checks it returns 409 CUSTOM_LAUNCH_V1_READ_ONLY before reading an idempotency key or request body. This response is non-retryable. Use the live V1 GET operations for existing history and the standalone public V3.3 contract for fresh writes.","tags":["Custom launch"],"servers":[{"url":"https://api.programmable.market","description":"Programmable Custom Launch API"}],"security":[{"CustomLaunchApiKey":[]}],"responses":{"401":{"description":"API key is missing, malformed, expired, revoked, or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"403":{"description":"API key lacks the legacy custom-launch:create scope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"409":{"description":"V1 launch creation is read-only. Do not retry this request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"},"example":{"schemaVersion":"programmable.api-error.v1","error":{"code":"CUSTOM_LAUNCH_V1_READ_ONLY","message":"V1 launch creation is read-only; use the public V3.3 launch contract","requestId":"018f1f8e-7d93-7c2f-8d7f-e114942e7f25"}}}}}}}},"/v1/custom-launches/{launchId}":{"get":{"operationId":"getCustomLaunch","summary":"Read a Custom launch","description":"Returns one existing launch owned by the API key's wallet principal. After the controller wallet broadcasts a previously authorized transaction, polling this single-resource route performs request-driven Router reconciliation for authorized and submitted launches. There is no background reconciliation timer. A missing launch and another principal's launch both return 404.","tags":["Custom launch"],"servers":[{"url":"https://api.programmable.market","description":"Programmable Custom Launch API"}],"security":[{"CustomLaunchApiKey":[]}],"parameters":[{"name":"launchId","in":"path","required":true,"description":"Legacy path name for the API request UUID returned as both launchId and requestId. It is not the bytes32 onchainLaunchId.","schema":{"$ref":"#/components/schemas/CustomLaunchRequestId"}}],"responses":{"200":{"description":"Current durable launch state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchResource"}}}},"401":{"description":"API key is missing, malformed, expired, revoked, or unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"403":{"description":"API key lacks custom-launch:read.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"404":{"description":"Launch not found for this wallet principal.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"429":{"description":"The read rate limit was reached. Retry the same single-resource read after the indicated delay.","headers":{"Retry-After":{"description":"Delay in seconds or an HTTP date after which the request may be retried.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}},"503":{"description":"The Custom Launch API is temporarily unavailable.","headers":{"Retry-After":{"description":"Optional delay in seconds or an HTTP date after which the same request may be retried.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomLaunchApiError"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiDocument","summary":"Read this OpenAPI document","tags":["Metadata"],"security":[],"responses":{"200":{"description":"OpenAPI 3.1 description of the public read and Custom launch APIs.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"CustomLaunchApiKey":{"type":"http","scheme":"bearer","bearerFormat":"pm_live_<22-char-key-id>_<43-char-secret>","description":"Wallet-bound API key managed at https://programmable.market/developers/api-keys. Keys can create through V3.3 and read wallet-owned V2 and V1 history. A create scope does not override either legacy write fence. Keys are not wallets and cannot sign or broadcast transactions."}},"schemas":{"EthereumExplorePage":{"type":"object","properties":{"chainId":{"const":1},"status":{"enum":["ready","partial","stale","unavailable"]},"sources":{"type":"object","properties":{"classic":{"enum":["current","last-known-good","unavailable"]},"custom":{"enum":["current","last-known-good","unavailable"]}},"required":["classic","custom"],"additionalProperties":false},"sourceEvidence":{"type":"object","properties":{"classic":{"anyOf":[{"type":"object","properties":{"source":{"enum":["codex-classic-launches","canonical-launch-stamp-router"]},"asOfBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"asOfBlockHash":{"$ref":"#/components/schemas/Hex32"},"commitment":{"$ref":"#/components/schemas/Sha256Digest"},"generatedAt":{"type":"string","format":"date-time"},"releaseDigest":{"$ref":"#/components/schemas/Sha256Digest"},"provider":{"const":"codex"},"observedAt":{"type":"string","format":"date-time"}},"required":["source","asOfBlock","asOfBlockHash","commitment","generatedAt"],"additionalProperties":false},{"type":"null"}]},"custom":{"anyOf":[{"type":"object","properties":{"source":{"enum":["codex-classic-launches","canonical-launch-stamp-router"]},"asOfBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"asOfBlockHash":{"$ref":"#/components/schemas/Hex32"},"commitment":{"$ref":"#/components/schemas/Sha256Digest"},"generatedAt":{"type":"string","format":"date-time"},"releaseDigest":{"$ref":"#/components/schemas/Sha256Digest"},"provider":{"const":"codex"},"observedAt":{"type":"string","format":"date-time"}},"required":["source","asOfBlock","asOfBlockHash","commitment","generatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["classic","custom"],"additionalProperties":false},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"items":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"launchId":{"type":"string"},"tokenAddress":{"$ref":"#/components/schemas/EthereumAddress"},"hookAddress":{"$ref":"#/components/schemas/EthereumAddress"},"creator":{"$ref":"#/components/schemas/EthereumAddress"},"transactionHash":{"$ref":"#/components/schemas/Hex32"},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"launchedAt":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"decimals":{"anyOf":[{"type":"integer"},{"type":"null"}]},"category":{"enum":["classic","custom"]},"provenance":{"oneOf":[{"type":"object","properties":{"schemaVersion":{"const":"programmable.explore-launch-category-provenance.v1"},"category":{"const":"classic"},"source":{"const":"canonical-launch-read-model"},"recordId":{"type":"string"},"modelId":{"anyOf":[{"type":"string"},{"type":"null"}]},"modelVersion":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["schemaVersion","category","source","recordId","modelId","modelVersion"],"additionalProperties":false},{"type":"object","properties":{"schemaVersion":{"const":"programmable.explore-launch-category-provenance.v1"},"category":{"enum":["classic","custom"]},"source":{"const":"canonical-launch-stamp-router"},"launchId":{"$ref":"#/components/schemas/Hex32"},"stampHash":{"$ref":"#/components/schemas/Hex32"},"routerAddress":{"$ref":"#/components/schemas/EthereumAddress"},"transactionHash":{"$ref":"#/components/schemas/Hex32"},"blockHash":{"$ref":"#/components/schemas/Hex32"},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"transactionIndex":{"type":"integer","minimum":0},"logIndex":{"type":"integer","minimum":0}},"required":["schemaVersion","category","source","launchId","stampHash","routerAddress","transactionHash","blockHash","blockNumber","transactionIndex","logIndex"],"additionalProperties":false}]}},"required":["launchId","tokenAddress","hookAddress","launchedAt","name","symbol","decimals","category","provenance"],"additionalProperties":false},{"type":"object","properties":{"chainId":{"const":1},"confirmation":{"const":"confirming"},"observationExpiresAt":{"type":"integer","minimum":0},"category":{"const":"custom"},"mode":{"enum":["module","custom"]},"launchId":{"$ref":"#/components/schemas/Hex32"},"tokenAddress":{"$ref":"#/components/schemas/EthereumAddress"},"hookAddress":{"$ref":"#/components/schemas/EthereumAddress"},"creator":{"$ref":"#/components/schemas/EthereumAddress"},"transactionHash":{"$ref":"#/components/schemas/Hex32"},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"blockHash":{"$ref":"#/components/schemas/Hex32"},"poolId":{"$ref":"#/components/schemas/Hex32"},"quoteAsset":{"$ref":"#/components/schemas/EthereumAddress"},"launchedAt":{"type":"string","format":"date-time"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]},"decimals":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]}},"required":["chainId","confirmation","observationExpiresAt","category","mode","launchId","tokenAddress","hookAddress","creator","transactionHash","blockNumber","blockHash","poolId","quoteAsset","launchedAt","name","symbol","decimals"],"additionalProperties":false,"description":"Display-only receipt observation from two independent Ethereum providers. Expires at observationExpiresAt (Unix milliseconds). Not finalized provenance or authorization to trade. Replaced by the canonical item after verification."}]},"maxItems":50},"presentations":{"type":"array","items":{"type":"object","properties":{"tokenAddress":{"$ref":"#/components/schemas/EthereumAddress"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}},"required":["label","url"],"additionalProperties":false}},"market":{"anyOf":[{"type":"object","properties":{"poolId":{"type":"string"},"priceUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"marketCapUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"liquidityUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"volume24hUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"change24hPercent":{"anyOf":[{"type":"number"},{"type":"null"}]},"observedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string"},"fdvUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"valuationKind":{"enum":["market-cap","fdv"]},"source":{"enum":["codex","dexscreener","uniswap-v4"]},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"blockHash":{"$ref":"#/components/schemas/Hex32"},"quoteAsset":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/EthereumAddress"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","symbol"],"additionalProperties":false}},"required":["poolId","priceUsd","marketCapUsd","liquidityUsd","volume24hUsd","change24hPercent","observedAt","sourceUrl"],"additionalProperties":false},{"type":"null"}]}},"required":["tokenAddress","imageUrl","description","links","market"],"additionalProperties":false},"maxItems":50},"page":{"type":"object","properties":{"number":{"type":"integer","minimum":1},"size":{"enum":[6,8,10,50]},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"matchingItems":{"type":"integer","minimum":0,"description":"Query and filter matches. Present when the persistent pin does not match, so it is not counted as a search result."}},"required":["number","size","totalItems","totalPages","hasMore"],"additionalProperties":false}},"required":["chainId","status","sources","sourceEvidence","updatedAt","items","presentations","page"],"additionalProperties":false},"RobinhoodExplorePage":{"type":"object","properties":{"chainId":{"const":4663},"status":{"enum":["ready","syncing","stale","unavailable"]},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"items":{"type":"array","items":{"type":"object","properties":{"routerAddress":{"anyOf":[{"$ref":"#/components/schemas/EthereumAddress"},{"type":"null"}]},"launchId":{"type":"string"},"tokenAddress":{"$ref":"#/components/schemas/EthereumAddress","description":"Address used by the Coin route. For a projected launch without a primary asset, this identifies the first declared component and does not imply an ERC-20 role."},"hookAddress":{"anyOf":[{"$ref":"#/components/schemas/EthereumAddress"},{"type":"null"}]},"creator":{"$ref":"#/components/schemas/EthereumAddress"},"poolManager":{"anyOf":[{"$ref":"#/components/schemas/EthereumAddress"},{"type":"null"}]},"poolId":{"anyOf":[{"$ref":"#/components/schemas/Hex32"},{"type":"null"}]},"stampHash":{"anyOf":[{"$ref":"#/components/schemas/Hex32"},{"type":"null"}]},"transactionHash":{"$ref":"#/components/schemas/Hex32"},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"blockHash":{"$ref":"#/components/schemas/Hex32"},"logIndex":{"type":"integer","minimum":0},"launchedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]},"decimals":{"anyOf":[{"type":"integer"},{"type":"null"}]},"sourceKind":{"enum":["module-native-v1","module-native-v2","module-engine-v1","multi-role-v2","custom-launch-plan-v1"]},"primaryAssetAddress":{"anyOf":[{"$ref":"#/components/schemas/EthereumAddress"},{"type":"null"}]},"launchProjection":{"$ref":"https://programmable.market/openapi/custom-launch-v4.2.json#/components/schemas/LaunchProjectionV1"},"sourceAddress":{"$ref":"#/components/schemas/EthereumAddress"},"sourceReleaseDigest":{"$ref":"#/components/schemas/Hex32"},"recipeHash":{"$ref":"#/components/schemas/Hex32"},"runtime":{"$ref":"#/components/schemas/EthereumAddress"},"launchKey":{"$ref":"#/components/schemas/Hex32"},"verificationDigest":{"$ref":"#/components/schemas/Hex32"},"modulePackageIds":{"type":"array","items":{"$ref":"#/components/schemas/Hex32"}},"moduleFamilyIds":{"type":"array","items":{"$ref":"#/components/schemas/Hex32"}},"economicsPolicyId":{"type":"string"},"protocolFeeBps":{"const":10},"authorPoolFeeBps":{"enum":[0,20]},"platformFeeBps":{"enum":[10,30]},"feeEligibleFamilyIds":{"type":"array","items":{"$ref":"#/components/schemas/Hex32"}},"engineAddress":{"$ref":"#/components/schemas/EthereumAddress"},"engineRevisionId":{"$ref":"#/components/schemas/Hex32"},"engineFamilyId":{"$ref":"#/components/schemas/Hex32"},"engineManifestHash":{"$ref":"#/components/schemas/Hex32"},"engineRuntimeCodeHash":{"$ref":"#/components/schemas/Hex32"},"tokenRuntimeCodeHash":{"$ref":"#/components/schemas/Hex32"},"quoteAsset":{"$ref":"#/components/schemas/EthereumAddress"},"quoteDecimals":{"type":"integer","minimum":0},"configurationHash":{"$ref":"#/components/schemas/Hex32"},"constructorHash":{"$ref":"#/components/schemas/Hex32"},"initCodeHash":{"$ref":"#/components/schemas/Hex32"},"planHash":{"$ref":"#/components/schemas/Hex32"},"resourcesHash":{"$ref":"#/components/schemas/Hex32"},"primaryMarket":{"anyOf":[{"type":"object","properties":{"kind":{"const":"uniswap-v4"},"chainId":{"const":4663},"launchId":{"$ref":"#/components/schemas/Hex32"},"poolManager":{"$ref":"#/components/schemas/EthereumAddress"},"poolId":{"$ref":"#/components/schemas/Hex32"},"quoteAsset":{"$ref":"#/components/schemas/EthereumAddress"},"primaryToken":{"$ref":"#/components/schemas/EthereumAddress"},"hook":{"$ref":"#/components/schemas/EthereumAddress"},"initialTick":{"type":"integer"}},"required":["kind","chainId","launchId","poolManager","poolId","quoteAsset","primaryToken","hook","initialTick"],"additionalProperties":false},{"type":"null"}]}},"required":["routerAddress","launchId","tokenAddress","hookAddress","creator","poolManager","poolId","stampHash","transactionHash","blockNumber","blockHash","logIndex","launchedAt","name","symbol","decimals"],"additionalProperties":false},"maxItems":50},"page":{"type":"object","properties":{"number":{"type":"integer","minimum":1},"size":{"enum":[6,8,10,50]},"totalItems":{"type":"integer","minimum":0},"totalPages":{"type":"integer","minimum":0},"hasMore":{"type":"boolean"},"matchingItems":{"type":"integer","minimum":0,"description":"Query and filter matches. Present when the persistent pin does not match, so it is not counted as a search result."}},"required":["number","size","totalItems","totalPages","hasMore"],"additionalProperties":false},"sourceEvidence":{"anyOf":[{"type":"object","properties":{"router":{"type":"object","properties":{"source":{"const":"canonical-launch-stamp-router"},"sourceAddress":{"$ref":"#/components/schemas/EthereumAddress"},"binding":{"type":"string"},"startBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"cursor":{"anyOf":[{"type":"object","properties":{"number":{"$ref":"#/components/schemas/CanonicalUint256"},"hash":{"$ref":"#/components/schemas/Hex32"}},"required":["number","hash"],"additionalProperties":false},{"type":"null"}]},"finalizedBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"updatedAt":{"type":"string","format":"date-time"}},"required":["source","sourceAddress","binding","startBlock","cursor","finalizedBlock","updatedAt"],"additionalProperties":false},"modules":{"type":"array","items":{"type":"object","properties":{"source":{"enum":["module-native-v1","module-native-v2","module-engine-v1"]},"sourceAddress":{"$ref":"#/components/schemas/EthereumAddress"},"releaseDigest":{"$ref":"#/components/schemas/Hex32"},"startBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"cursor":{"anyOf":[{"type":"object","properties":{"number":{"$ref":"#/components/schemas/CanonicalUint256"},"hash":{"$ref":"#/components/schemas/Hex32"}},"required":["number","hash"],"additionalProperties":false},{"type":"null"}]},"finalizedBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"updatedAt":{"type":"string","format":"date-time"}},"required":["source","sourceAddress","releaseDigest","startBlock","cursor","finalizedBlock","updatedAt"],"additionalProperties":false}},"launchProjections":{"anyOf":[{"type":"object","properties":{"sourceUrl":{"const":"https://api.programmable.market/v4/chains/4663/finalized-launch-projections"},"updatedAt":{"type":"string","format":"date-time"},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"completedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Last fully verified traversal. Background page progress does not renew this timestamp."}},"required":["sourceUrl","updatedAt","nextCursor"],"additionalProperties":false},{"type":"null"}]}},"required":["router","modules","launchProjections"],"additionalProperties":false},{"type":"null"}]},"presentations":{"type":"array","items":{"type":"object","properties":{"tokenAddress":{"$ref":"#/components/schemas/EthereumAddress"},"imageUrl":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"links":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"url":{"type":"string"}},"required":["label","url"],"additionalProperties":false}},"market":{"anyOf":[{"type":"object","properties":{"poolId":{"type":"string"},"priceUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"marketCapUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"liquidityUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"volume24hUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"change24hPercent":{"anyOf":[{"type":"number"},{"type":"null"}]},"observedAt":{"type":"string","format":"date-time"},"sourceUrl":{"type":"string"},"fdvUsd":{"anyOf":[{"type":"number"},{"type":"null"}]},"valuationKind":{"enum":["market-cap","fdv"]},"source":{"enum":["codex","dexscreener","uniswap-v4"]},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"blockHash":{"$ref":"#/components/schemas/Hex32"},"quoteAsset":{"type":"object","properties":{"address":{"$ref":"#/components/schemas/EthereumAddress"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","symbol"],"additionalProperties":false}},"required":["poolId","priceUsd","marketCapUsd","liquidityUsd","volume24hUsd","change24hPercent","observedAt","sourceUrl"],"additionalProperties":false},{"type":"null"}]}},"required":["tokenAddress","imageUrl","description","links","market"],"additionalProperties":false},"maxItems":50}},"required":["chainId","status","updatedAt","items","page","sourceEvidence","presentations"],"additionalProperties":false},"ChainExploreInvalidQuery":{"type":"object","properties":{"error":{"const":"invalid_query"}},"required":["error"],"additionalProperties":false},"EthereumExploreUnavailable":{"type":"object","properties":{"error":{"const":"Launches are temporarily unavailable"},"status":{"const":"unavailable"}},"required":["error","status"],"additionalProperties":false},"EthereumAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","examples":["0x7987f03462200b3D8A072E02C89A8A41dCB124EE"]},"Hex32":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"LowerHex32":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"NonzeroLowerHex32":{"type":"string","pattern":"^0x(?!0{64}$)[0-9a-f]{64}$"},"Sha256Digest":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"},"CanonicalUint256":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$","maxLength":78,"description":"Base-10 uint256 with no sign or leading zeroes."},"CanonicalIdentifier":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:@/+\\-]{0,255}$"},"CustomLaunchRequestId":{"type":"string","format":"uuid","description":"Durable API request identifier. This is distinct from the bytes32 onchain launch identifier."},"HexData":{"type":"string","pattern":"^0x(?:[0-9a-fA-F]{2})*$"},"HookPermission":{"type":"string","enum":["beforeInitialize","afterInitialize","beforeAddLiquidity","afterAddLiquidity","beforeRemoveLiquidity","afterRemoveLiquidity","beforeSwap","afterSwap","beforeDonate","afterDonate","beforeSwapReturnDelta","afterSwapReturnDelta","afterAddLiquidityReturnDelta","afterRemoveLiquidityReturnDelta"]},"SourceBundleEntryV2":{"type":"object","required":["path","kind","mode","byteLength","contentSha256","symlinkTarget"],"properties":{"path":{"type":"string","minLength":1,"description":"NFC-normalized relative path. Empty segments, dot segments, backslashes, controls, and encoded slash or backslash are rejected."},"kind":{"type":"string","enum":["file","symlink"]},"mode":{"type":"string","enum":["100644","100755","120000"]},"byteLength":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)$","maxLength":20,"description":"Base-10 uint64 byte length."},"contentSha256":{"$ref":"#/components/schemas/Sha256Digest"},"symlinkTarget":{"type":["string","null"]}},"allOf":[{"if":{"properties":{"kind":{"const":"file"}}},"then":{"properties":{"mode":{"type":"string","enum":["100644","100755"]},"symlinkTarget":{"type":"null"}}},"else":{"properties":{"mode":{"const":"120000"},"symlinkTarget":{"type":"string"}}}}],"additionalProperties":false},"SourceBundleManifestV2":{"type":"object","required":["schemaVersion","entries"],"properties":{"schemaVersion":{"const":"2.0.0"},"entries":{"type":"array","minItems":1,"description":"Complete, non-empty entries in strictly increasing, unique UTF-8 path-byte order. The platform recomputes the frozen manifest digest and requires it to match sourceDescriptor.sourceBundleDigest; it does not fetch or compile source files.","items":{"$ref":"#/components/schemas/SourceBundleEntryV2"}}},"additionalProperties":false},"DeterministicSourceBundleV2":{"type":"object","required":["schemaVersion","kind","controllerWallet","sourceLineageNonce","sourceBundleDigest","bundleContentSha256","publicOriginCommitment"],"properties":{"schemaVersion":{"const":"2.0.0"},"kind":{"const":"deterministic-source-bundle"},"controllerWallet":{"$ref":"#/components/schemas/EthereumAddress","description":"Must equal launchWallet after address normalization."},"sourceLineageNonce":{"$ref":"#/components/schemas/CanonicalUint256"},"sourceBundleDigest":{"$ref":"#/components/schemas/LowerHex32"},"bundleContentSha256":{"$ref":"#/components/schemas/Sha256Digest"},"publicOriginCommitment":{"$ref":"#/components/schemas/LowerHex32"}},"additionalProperties":false},"GraphAddressLocatorV1":{"type":"object","required":["targetId","byteOffset","encoding"],"properties":{"targetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"byteOffset":{"type":"integer","minimum":0},"encoding":{"type":"string","enum":["abi-address-word","packed-address-20"]}},"additionalProperties":false},"CustomGraphTargetV1":{"type":"object","required":["targetId","applicantSalt","creationBytecode","constructorArguments","initializerCalldata","constructorAddressLocators","initializerAddressLocators","deploymentValueWei","initializerValueWei","expectedRuntimeCodeHash","componentKind","declaredHookPermissions"],"properties":{"targetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"applicantSalt":{"$ref":"#/components/schemas/Hex32"},"creationBytecode":{"type":"string","pattern":"^0x(?:[0-9a-fA-F]{2})+$","description":"Non-empty EVM creation bytecode. Creation bytecode plus constructor arguments is limited to 49,152 bytes."},"constructorArguments":{"$ref":"#/components/schemas/HexData"},"initializerCalldata":{"$ref":"#/components/schemas/HexData","description":"Limited to 131,072 bytes after address patching."},"constructorAddressLocators":{"type":"array","maxItems":256,"items":{"$ref":"#/components/schemas/GraphAddressLocatorV1"}},"initializerAddressLocators":{"type":"array","maxItems":256,"items":{"$ref":"#/components/schemas/GraphAddressLocatorV1"}},"deploymentValueWei":{"$ref":"#/components/schemas/CanonicalUint256"},"initializerValueWei":{"$ref":"#/components/schemas/CanonicalUint256"},"expectedRuntimeCodeHash":{"type":"string","pattern":"^0x(?!0{64}$)[0-9a-fA-F]{64}$"},"componentKind":{"type":"string","enum":["token","hook","other"]},"declaredHookPermissions":{"oneOf":[{"type":"array","maxItems":14,"items":{"$ref":"#/components/schemas/HookPermission"}},{"type":"null"}]}},"allOf":[{"if":{"properties":{"componentKind":{"const":"hook"}}},"then":{"properties":{"declaredHookPermissions":{"type":"array","maxItems":14,"uniqueItems":true,"items":{"$ref":"#/components/schemas/HookPermission"}}}},"else":{"properties":{"declaredHookPermissions":{"type":"null"}}}}],"additionalProperties":false},"CustomGraphBundleV1":{"type":"object","required":["schemaVersion","sourceBundleSha256","targets","pool"],"properties":{"schemaVersion":{"const":"programmable.custom-graph-bundle.v1"},"sourceBundleSha256":{"$ref":"#/components/schemas/Sha256Digest","description":"Must equal sourceDescriptor.bundleContentSha256."},"targets":{"type":"array","minItems":1,"maxItems":16,"description":"Closed target graph with exactly one token target and one hook target. Constructor dependencies must be acyclic.","items":{"$ref":"#/components/schemas/CustomGraphTargetV1"}},"pool":{"type":"object","required":["tokenTargetId","hookTargetId","fee","tickSpacing"],"properties":{"tokenTargetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"hookTargetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"fee":{"oneOf":[{"type":"integer","minimum":0,"maximum":1000000},{"const":8388608}]},"tickSpacing":{"type":"integer","minimum":1,"maximum":32767}},"additionalProperties":false}},"description":"Aggregate init code and initializer calldata are limited to 524,288 bytes. Predicted hook-address permission bits must equal declaredHookPermissions.","additionalProperties":false},"AgentLaunchAttestationCheckV1":{"type":"object","required":["checkId","evidenceSha256"],"properties":{"checkId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"evidenceSha256":{"$ref":"#/components/schemas/Sha256Digest"}},"additionalProperties":false},"AgentLaunchAttestationV1":{"type":"object","required":["schemaVersion","subjectGraphBundleHash","agentId","checkedAt","checks"],"properties":{"schemaVersion":{"const":"programmable.agent-launch-attestation.v1"},"subjectGraphBundleHash":{"$ref":"#/components/schemas/Sha256Digest","description":"SHA-256 of the canonical normalized graph bundle. It must match the submitted graph bundle."},"agentId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"checkedAt":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"},"checks":{"type":"array","minItems":1,"maxItems":64,"uniqueItems":true,"items":{"$ref":"#/components/schemas/AgentLaunchAttestationCheckV1"}}},"description":"Required agent self-attestation with evidence digests for the submitted graph subject. It is excluded from permit and launch authorization. Programmable does not fetch or assess the evidence, adopt the attestation, or make a safety, audit, approval, compilation, or simulation claim.","additionalProperties":false},"ExactSourceCompilationUnitV1":{"type":"object","description":"One exact Solidity Standard JSON compilation input. The decoded UTF-8 bytes, not a reconstructed object, are the hash preimage. The input is closed to language, sources and settings; every source entry contains only inline content and no URL.","required":["compilationUnitId","compilerVersion","standardJsonInputBase64","standardJsonInputSha256"],"properties":{"compilationUnitId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"compilerVersion":{"type":"string","pattern":"^0\\.[0-9]+\\.[0-9]+\\+commit\\.[0-9a-f]{8}$","description":"Exact solc build identifier, including the eight-character commit suffix."},"standardJsonInputBase64":{"type":"string","minLength":4,"maxLength":6990508,"pattern":"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$","description":"Canonical base64 of the exact UTF-8 Solidity Standard JSON input bytes. Decoded input is limited to 5,242,880 bytes per compilation unit and across all units in the request."},"standardJsonInputSha256":{"$ref":"#/components/schemas/Sha256Digest"}},"additionalProperties":false},"ExactSourceComponentV1":{"type":"object","description":"Exact compiler target identity and resolved constructor arguments for one graph target.","required":["targetId","compilationUnitId","sourcePath","contractName","constructorArguments"],"properties":{"targetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"compilationUnitId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"sourcePath":{"type":"string","minLength":1},"contractName":{"$ref":"#/components/schemas/CanonicalIdentifier"},"constructorArguments":{"type":"string","pattern":"^0x(?:[0-9a-f]{2})*$","description":"Lowercase ABI-encoded constructor arguments after graph address locators are resolved."}},"additionalProperties":false},"ExactSourceVerificationBundleV1":{"type":"object","description":"Optional exact-source material bound to the prepared artifact. Compilation units are uniquely sorted by UTF-8 compilationUnitId; components are uniquely sorted by UTF-8 targetId and exactly cover every graph target. Decoded Standard JSON is limited to 5,242,880 bytes per compilation unit and in aggregate.","required":["schemaVersion","compilationUnits","components"],"properties":{"schemaVersion":{"const":"programmable.exact-source-verification-bundle.v1"},"compilationUnits":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/components/schemas/ExactSourceCompilationUnitV1"}},"components":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/components/schemas/ExactSourceComponentV1"}}},"additionalProperties":false},"CustomLaunchCreateRequest":{"type":"object","required":["schemaVersion","launchWallet","chainId","nonce","sourceDescriptor","sourceBundleManifest","graphBundle","agentAttestation"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-create-request.v1"},"launchWallet":{"$ref":"#/components/schemas/EthereumAddress","description":"Must equal the API key's bound wallet."},"chainId":{"const":"1"},"nonce":{"$ref":"#/components/schemas/NonzeroLowerHex32"},"sourceDescriptor":{"$ref":"#/components/schemas/DeterministicSourceBundleV2"},"sourceBundleManifest":{"$ref":"#/components/schemas/SourceBundleManifestV2"},"graphBundle":{"$ref":"#/components/schemas/CustomGraphBundleV1"},"agentAttestation":{"$ref":"#/components/schemas/AgentLaunchAttestationV1"},"verificationBundle":{"$ref":"#/components/schemas/ExactSourceVerificationBundleV1","description":"Optional for V1 compatibility. When present, the exact bundle is cryptographically bound to the prepared artifact and enables post-finality exact-match verification."}},"additionalProperties":false},"CustomLaunchFailure":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string","description":"Stable failure code. PERMIT_EXPIRED is terminal and requires a new nonce and Idempotency-Key."},"message":{"type":"string"},"retryable":{"type":"boolean"}},"additionalProperties":false},"PreparedLaunchStampRequest":{"type":"object","required":["launchId","token","tokenRuntimeCodeHash","poolKey","hookRuntimeCodeHash","components"],"properties":{"launchId":{"$ref":"#/components/schemas/LowerHex32","description":"The bytes32 onchain launch identifier."},"token":{"$ref":"#/components/schemas/EthereumAddress"},"tokenRuntimeCodeHash":{"$ref":"#/components/schemas/LowerHex32"},"poolKey":{"type":"object","required":["currency0","currency1","fee","tickSpacing","hooks"],"properties":{"currency0":{"$ref":"#/components/schemas/EthereumAddress"},"currency1":{"$ref":"#/components/schemas/EthereumAddress"},"fee":{"type":"integer","minimum":0,"maximum":8388608},"tickSpacing":{"type":"integer"},"hooks":{"$ref":"#/components/schemas/EthereumAddress"}},"additionalProperties":false},"hookRuntimeCodeHash":{"$ref":"#/components/schemas/LowerHex32"},"components":{"type":"array","minItems":1,"items":{"type":"object","required":["resultIndex","account","runtimeCodeHash","kind","scope"],"properties":{"resultIndex":{"type":"integer","minimum":0,"maximum":255},"account":{"$ref":"#/components/schemas/EthereumAddress"},"runtimeCodeHash":{"$ref":"#/components/schemas/LowerHex32"},"kind":{"type":"integer","enum":[0,1,2]},"scope":{"const":1}},"additionalProperties":false}}},"additionalProperties":false},"PreparedLaunchPermit":{"type":"object","required":["chainId","router","launchWallet","kind","routePayloadHash","expectedResultHash","stampRequestHash","nonce","validAfter","deadline","valueWei"],"properties":{"chainId":{"const":"1"},"router":{"$ref":"#/components/schemas/EthereumAddress"},"launchWallet":{"$ref":"#/components/schemas/EthereumAddress"},"kind":{"const":1},"routePayloadHash":{"$ref":"#/components/schemas/LowerHex32"},"expectedResultHash":{"$ref":"#/components/schemas/LowerHex32"},"stampRequestHash":{"$ref":"#/components/schemas/LowerHex32"},"nonce":{"$ref":"#/components/schemas/NonzeroLowerHex32"},"validAfter":{"$ref":"#/components/schemas/CanonicalUint256"},"deadline":{"$ref":"#/components/schemas/CanonicalUint256"},"valueWei":{"$ref":"#/components/schemas/CanonicalUint256"}},"additionalProperties":false},"PreparedLaunchArtifact":{"type":"object","description":"Hash-bound prepared launch artifact. Stable signing and provenance fields are typed here; route construction details remain part of the returned artifact and are covered by artifactHash.","required":["schemaVersion","graphBundleHash","sourceBundleSha256","chainBindings","callerConstraints","timing","route","predictedComponents","market","stampRequest","stampRequestHash","permit","permitDigest","unsignedRouterTransaction","claims","artifactHash"],"properties":{"schemaVersion":{"const":"programmable.prepared-custom-graph-launch.v1"},"graphBundleHash":{"$ref":"#/components/schemas/Sha256Digest"},"sourceBundleSha256":{"$ref":"#/components/schemas/Sha256Digest"},"chainBindings":{"type":"object","additionalProperties":true},"callerConstraints":{"type":"object","additionalProperties":true},"timing":{"type":"object","additionalProperties":true},"route":{"type":"object","additionalProperties":true},"predictedComponents":{"type":"array","items":{"type":"object","additionalProperties":true}},"market":{"type":"object","additionalProperties":true},"stampRequest":{"$ref":"#/components/schemas/PreparedLaunchStampRequest"},"stampRequestHash":{"$ref":"#/components/schemas/LowerHex32"},"permit":{"$ref":"#/components/schemas/PreparedLaunchPermit"},"permitDigest":{"$ref":"#/components/schemas/LowerHex32"},"unsignedRouterTransaction":{"type":"object","required":["chainId","from","to","valueWei","functionName","selector","calldataWithEmptySignature","signatureState","preimageHash"],"properties":{"chainId":{"const":"1"},"from":{"$ref":"#/components/schemas/EthereumAddress"},"to":{"$ref":"#/components/schemas/EthereumAddress"},"valueWei":{"$ref":"#/components/schemas/CanonicalUint256"},"functionName":{"const":"launchAndStampV1"},"selector":{"const":"0xe5f6b8cd"},"calldataWithEmptySignature":{"$ref":"#/components/schemas/HexData"},"signatureState":{"const":"permit-authority-signature-required"},"preimageHash":{"$ref":"#/components/schemas/Sha256Digest"}},"additionalProperties":false},"claims":{"type":"object","required":["provenance","safety","approval"],"properties":{"provenance":{"const":"prepared-for-atomic-router-stamp"},"safety":{"const":"not-asserted"},"approval":{"const":"not-asserted"}},"additionalProperties":false},"artifactHash":{"$ref":"#/components/schemas/Sha256Digest"}},"additionalProperties":false},"AgentLaunchAttestationResult":{"type":"object","description":"Normalized caller-supplied agent self-attestation. Programmable validates its shape and subject binding but does not assess the evidence or adopt the claims.","required":["schemaVersion","subjectGraphBundleHash","agentId","checkedAt","checks","attribution","platformVerification","safetyClaim","approvalClaim"],"properties":{"schemaVersion":{"const":"programmable.agent-launch-attestation.v1"},"subjectGraphBundleHash":{"$ref":"#/components/schemas/Sha256Digest"},"agentId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"checkedAt":{"type":"string","format":"date-time"},"checks":{"type":"array","minItems":1,"maxItems":64,"items":{"$ref":"#/components/schemas/AgentLaunchAttestationCheckV1"}},"attribution":{"const":"agent-self-attested"},"platformVerification":{"const":"not-performed-by-this-attestation"},"safetyClaim":{"const":"not-made"},"approvalClaim":{"const":"not-made"}},"additionalProperties":false},"SignedPreparedLaunchPermit":{"type":"object","description":"Platform permit-authority signature. This is not a controller-wallet transaction signature.","required":["schemaVersion","artifactHash","chainId","router","authoritySafe","signerAddress","permitDigest","safeMessageDigest","signature","validAfter","deadline"],"properties":{"schemaVersion":{"const":"programmable.signed-prepared-launch-permit.v1"},"artifactHash":{"$ref":"#/components/schemas/Sha256Digest"},"chainId":{"const":"1"},"router":{"$ref":"#/components/schemas/EthereumAddress"},"authoritySafe":{"$ref":"#/components/schemas/EthereumAddress"},"signerAddress":{"$ref":"#/components/schemas/EthereumAddress"},"permitDigest":{"$ref":"#/components/schemas/LowerHex32"},"safeMessageDigest":{"$ref":"#/components/schemas/LowerHex32"},"signature":{"$ref":"#/components/schemas/HexData"},"validAfter":{"$ref":"#/components/schemas/CanonicalUint256"},"deadline":{"$ref":"#/components/schemas/CanonicalUint256"}},"additionalProperties":false},"CustomLaunchWalletTransaction":{"type":"object","description":"Exact permit-attached Router transaction for the separate controller-wallet signer to review, sign and broadcast.","required":["schemaVersion","chainId","from","to","valueWei","functionName","selector","calldata","signatureState","requiresControllerWalletSignature","broadcastByService"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-wallet-transaction.v1"},"chainId":{"const":"1"},"from":{"$ref":"#/components/schemas/EthereumAddress"},"to":{"$ref":"#/components/schemas/EthereumAddress"},"valueWei":{"$ref":"#/components/schemas/CanonicalUint256"},"functionName":{"const":"launchAndStampV1"},"selector":{"const":"0xe5f6b8cd"},"calldata":{"$ref":"#/components/schemas/HexData"},"signatureState":{"const":"permit-authority-signature-attached"},"requiresControllerWalletSignature":{"const":true},"broadcastByService":{"const":false}},"additionalProperties":false},"CustomLaunchObservationWindow":{"type":"object","description":"Bounded Mainnet Router log window captured during preparation. Single-resource GET polling reconciles only inside this window.","required":["schemaVersion","chainId","router","fromBlock","toBlock"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-observation-window.v1"},"chainId":{"const":"1"},"router":{"$ref":"#/components/schemas/EthereumAddress"},"fromBlock":{"$ref":"#/components/schemas/CanonicalUint256"},"toBlock":{"$ref":"#/components/schemas/CanonicalUint256"}},"additionalProperties":false},"CustomLaunchOnchainEvidence":{"type":"object","description":"Canonical Router event and same-block launchStamp getter evidence matched to the prepared artifact. Finalized means confirmationDepth is at least 64.","required":["schemaVersion","finalityState","chainId","router","onchainLaunchId","transactionHash","blockNumber","blockHash","logIndex","token","hook","poolManager","poolId","stampHash","confirmationDepth","requiredConfirmationDepth","observedAtBlockNumber"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-onchain-evidence.v1"},"finalityState":{"type":"string","enum":["submitted","finalized"]},"chainId":{"const":"1"},"router":{"$ref":"#/components/schemas/EthereumAddress"},"onchainLaunchId":{"$ref":"#/components/schemas/LowerHex32"},"transactionHash":{"$ref":"#/components/schemas/LowerHex32"},"blockNumber":{"$ref":"#/components/schemas/CanonicalUint256"},"blockHash":{"$ref":"#/components/schemas/LowerHex32"},"logIndex":{"type":"integer","minimum":0},"token":{"$ref":"#/components/schemas/EthereumAddress"},"hook":{"$ref":"#/components/schemas/EthereumAddress"},"poolManager":{"$ref":"#/components/schemas/EthereumAddress"},"poolId":{"$ref":"#/components/schemas/LowerHex32"},"stampHash":{"$ref":"#/components/schemas/LowerHex32"},"confirmationDepth":{"$ref":"#/components/schemas/CanonicalUint256"},"requiredConfirmationDepth":{"const":"64"},"observedAtBlockNumber":{"$ref":"#/components/schemas/CanonicalUint256"}},"additionalProperties":false},"CustomLaunchPreparedOutput":{"type":"object","description":"Prepared artifact before the platform permit is signed. No wallet transaction or observation window is available yet.","required":["schemaVersion","artifact","agentAttestation","signedPermit","walletTransaction"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-authorization-result.v1"},"artifact":{"$ref":"#/components/schemas/PreparedLaunchArtifact"},"agentAttestation":{"$ref":"#/components/schemas/AgentLaunchAttestationResult"},"signedPermit":{"type":"null"},"walletTransaction":{"type":"null"}},"additionalProperties":false},"CustomLaunchAuthorizedOutput":{"type":"object","description":"Permit-attached wallet handoff plus bounded reconciliation state. onchain is null until single-resource polling observes a canonical Router stamp.","required":["schemaVersion","artifact","agentAttestation","signedPermit","walletTransaction","observationWindow","onchain"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-authorization-result.v1"},"artifact":{"$ref":"#/components/schemas/PreparedLaunchArtifact"},"agentAttestation":{"$ref":"#/components/schemas/AgentLaunchAttestationResult"},"signedPermit":{"$ref":"#/components/schemas/SignedPreparedLaunchPermit"},"walletTransaction":{"$ref":"#/components/schemas/CustomLaunchWalletTransaction"},"observationWindow":{"$ref":"#/components/schemas/CustomLaunchObservationWindow"},"onchain":{"oneOf":[{"$ref":"#/components/schemas/CustomLaunchOnchainEvidence"},{"type":"null"}]}},"additionalProperties":false},"CustomLaunchOutput":{"description":"Typed durable output for prepared, authorized, submitted and finalized launch states.","oneOf":[{"$ref":"#/components/schemas/CustomLaunchPreparedOutput"},{"$ref":"#/components/schemas/CustomLaunchAuthorizedOutput"}]},"SourceVerificationComponentV1":{"type":"object","required":["targetId","address","status","provider"],"properties":{"targetId":{"$ref":"#/components/schemas/CanonicalIdentifier"},"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"status":{"type":"string","enum":["queued","retrying","exact_match","needs_attention"]},"provider":{"type":["string","null"],"enum":["sourcify","etherscan","blockscout",null]}},"additionalProperties":false},"SourceVerificationStatusV1":{"type":"object","description":"Server-authored exact-source verification state. Only literal exact_match for every exclusive component means Source verified; clients must not infer or submit this object.","required":["schemaVersion","status","components","updatedAt"],"properties":{"schemaVersion":{"const":"programmable.source-verification-status.v1"},"status":{"type":"string","enum":["queued","retrying","exact_match","needs_attention"]},"components":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/components/schemas/SourceVerificationComponentV1"}},"updatedAt":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"}},"additionalProperties":false},"CustomLaunchResource":{"type":"object","description":"Durable API request state. launchId is the legacy alias of requestId; onchainLaunchId is the distinct Router bytes32 identifier and is present whenever durable output retains a prepared artifact. Poll this resource after wallet broadcast to drive request-scoped reconciliation.","required":["schemaVersion","launchId","requestId","onchainLaunchId","routeId","ownerWallet","status","requestHash","createdAt","updatedAt","output","failure"],"properties":{"schemaVersion":{"const":"programmable.custom-launch.v1"},"launchId":{"$ref":"#/components/schemas/CustomLaunchRequestId","description":"Deprecated-compatible alias of requestId. It is not an onchain identifier.","deprecated":true},"requestId":{"$ref":"#/components/schemas/CustomLaunchRequestId"},"onchainLaunchId":{"description":"Router bytes32 launch identifier. It is null before preparation and when a terminal failure clears the durable output.","oneOf":[{"$ref":"#/components/schemas/LowerHex32"},{"type":"null"}]},"routeId":{"const":"custom-launch:create:v1"},"ownerWallet":{"$ref":"#/components/schemas/EthereumAddress"},"status":{"type":"string","description":"authorized means the permit-attached transaction awaits a separate wallet signature and broadcast. submitted means exact canonical Router event/getter evidence was observed below 64 confirmations. finalized means the same evidence reached at least 64 confirmations.","enum":["received","validating","prepared","authorized","submitted","finalized","failed","cancelled"]},"requestHash":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","description":"Server-side canonical idempotency request digest. It is distinct from a caller's local SHA-256 of the exact HTTP request bytes."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"output":{"description":"Null before preparation and after a terminal failure. prepared returns CustomLaunchPreparedOutput; authorized, submitted and finalized return CustomLaunchAuthorizedOutput.","oneOf":[{"$ref":"#/components/schemas/CustomLaunchOutput"},{"type":"null"}]},"failure":{"oneOf":[{"$ref":"#/components/schemas/CustomLaunchFailure"},{"type":"null"}]},"sourceVerification":{"description":"Optional server-authored post-finality verification state. It is absent or null for legacy requests, requests without an exact-source bundle, and requests that have not created verification jobs.","oneOf":[{"$ref":"#/components/schemas/SourceVerificationStatusV1"},{"type":"null"}]}},"additionalProperties":false},"CustomLaunchListPage":{"type":"object","description":"Newest-first wallet-owned summary page. Each item uses the CustomLaunchResource shape but always has output=null; use the single-resource route for the prepared artifact. launchId remains the legacy alias of requestId; neither should be confused with onchainLaunchId.","required":["schemaVersion","launches","nextCursor"],"properties":{"schemaVersion":{"const":"programmable.custom-launch-list.v1"},"launches":{"type":"array","maxItems":25,"items":{"$ref":"#/components/schemas/CustomLaunchResource"}},"nextCursor":{"oneOf":[{"type":"string","minLength":16,"maxLength":512,"pattern":"^[A-Za-z0-9_-]+$"},{"type":"null"}]}},"additionalProperties":false},"CustomLaunchApiError":{"type":"object","required":["schemaVersion","error"],"properties":{"schemaVersion":{"const":"programmable.api-error.v1"},"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string","description":"Stable API error code, including IDEMPOTENCY_CONFLICT, NONCE_CONFLICT and PERMIT_EXPIRED."},"message":{"type":"string"},"requestId":{"type":"string","format":"uuid","description":"HTTP correlation identifier for this error response, not a Custom launch resource requestId."},"details":{}},"additionalProperties":false}},"additionalProperties":false},"ApiError":{"type":"object","required":["error"],"properties":{"error":{"oneOf":[{"type":"string"},{"type":"object","required":["code","message","resolution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"resolution":{"type":"string"}},"additionalProperties":false}]}},"additionalProperties":true},"ApiIndex":{"type":"object","required":["schemaVersion","status","openapi","documentation","llms","scope"],"properties":{"schemaVersion":{"const":"programmable.public-api-index.v1"},"status":{"const":"ready"},"openapi":{"type":"string","format":"uri"},"documentation":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"scope":{"type":"object","required":["access","actionsExcluded","identityPolicy"],"properties":{"access":{"const":"unauthenticated-read-only"},"actionsExcluded":{"type":"array","items":{"type":"string"}},"identityPolicy":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false},"OperationsHealth":{"type":"object","description":"Observed website catalog availability, separate from direct provider health and Custom Launch API readiness. Ready requires both indexes to be ready; unavailable requires both to be unavailable; all other combinations are degraded. An empty current catalog is valid. checkedAt is the cached observation time and updatedAt is each catalog's source time.","required":["schemaVersion","scope","status","checkedAt","indexes","providers","customLaunchReadiness"],"properties":{"schemaVersion":{"const":"programmable.operations-health.v2"},"scope":{"const":"website-launch-indexes"},"status":{"enum":["ready","degraded","unavailable"]},"checkedAt":{"type":"string","format":"date-time"},"indexes":{"type":"array","minItems":2,"maxItems":2,"items":false,"prefixItems":[{"type":"object","required":["chainId","status","updatedAt","catalogUrl"],"additionalProperties":false,"properties":{"chainId":{"const":1},"status":{"enum":["ready","partial","stale","unavailable"]},"updatedAt":{"type":["string","null"],"format":"date-time"},"catalogUrl":{"const":"https://programmable.market/api/explore/ethereum"}}},{"type":"object","required":["chainId","status","updatedAt","catalogUrl"],"additionalProperties":false,"properties":{"chainId":{"const":4663},"status":{"enum":["ready","syncing","stale","unavailable"]},"updatedAt":{"type":["string","null"],"format":"date-time"},"catalogUrl":{"const":"https://programmable.market/api/explore/robinhood"}}}]},"providers":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","required":["name","roles","health"],"additionalProperties":false,"properties":{"name":{"const":"codex"},"health":{"const":"not-checked"},"roles":{"const":["ethereum-classic-launch-discovery","ethereum-and-robinhood-market-data"]}}}},"customLaunchReadiness":{"type":"array","minItems":2,"maxItems":2,"items":false,"prefixItems":[{"type":"object","required":["chainId","readinessUrl","capabilitiesUrl"],"additionalProperties":false,"properties":{"chainId":{"const":1},"readinessUrl":{"const":"https://api.programmable.market/readyz"},"capabilitiesUrl":{"const":"https://api.programmable.market/v3/capabilities"}}},{"type":"object","required":["chainId","readinessUrl","capabilitiesUrl"],"additionalProperties":false,"properties":{"chainId":{"const":4663},"readinessUrl":{"const":"https://api.programmable.market/v4/chains/4663/custom-launch-plans/readiness"},"capabilitiesUrl":{"const":"https://api.programmable.market/v4/chains/4663/custom-launch-capabilities"}}}]}},"additionalProperties":false},"ExploreIndexResetError":{"type":"object","description":"Deterministic Explore response while token indexing is intentionally reset.","required":["error"],"properties":{"error":{"const":"Token data is temporarily unavailable"},"status":{"const":"index_rebuilding"}},"additionalProperties":false},"MarketChartError":{"type":"object","description":"Provider-neutral chart response while token chart indexing is intentionally reset.","required":["schemaVersion","source","status","generatedAt","address","range","reason","error"],"properties":{"schemaVersion":{"const":"programmable.market-chart-error.v2"},"source":{"const":"programmable"},"status":{"const":"unavailable"},"generatedAt":{"type":"string","format":"date-time"},"address":{"$ref":"#/components/schemas/EthereumAddress"},"range":{"type":"string","enum":["1h","1d","1w","all"]},"reason":{"const":"identity-unavailable"},"error":{"const":"Price history is temporarily unavailable"}},"additionalProperties":false},"RegistryReadiness":{"type":"object","required":["schemaVersion","status","registryStatus","generation","chainId","runtimeBindings","providerQuorum","checkedAt"],"properties":{"schemaVersion":{"const":"programmable.custom-registry-readiness.v2"},"status":{"const":"ready"},"registryStatus":{"const":"live"},"generation":{"const":"2"},"chainId":{"const":"1"},"manifestPath":{"const":"/api/custom-launch/registry/v2/manifest"},"runtimeBindings":{"const":"verified"},"providerQuorum":{"const":"verified"},"checkedAt":{"type":"string","format":"date-time"}},"additionalProperties":false},"RegistryManifest":{"type":"object","required":["schemaVersion","status","generation","chainId","caip2","publicReadEnabled","indexingEnabled","registry","release","finality"],"properties":{"schemaVersion":{"const":"programmable.custom-registry-public-manifest.v2"},"status":{"const":"live"},"generation":{"const":"2"},"chainId":{"const":"1"},"caip2":{"const":"eip155:1"},"publicReadEnabled":{"const":true},"indexingEnabled":{"const":true},"registry":{"type":"object","required":["address","runtimeCodeKeccak256","deploymentTransactionHash","deploymentBlock","deploymentBlockHash"],"properties":{"address":{"$ref":"#/components/schemas/EthereumAddress"},"runtimeCodeKeccak256":{"$ref":"#/components/schemas/Hex32"},"deploymentTransactionHash":{"$ref":"#/components/schemas/Hex32"},"deploymentBlock":{"type":"string","pattern":"^[1-9][0-9]*$"},"deploymentBlockHash":{"$ref":"#/components/schemas/Hex32"}},"additionalProperties":false},"release":{"type":"object","additionalProperties":{"type":"string"}},"finality":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":false}}},"x-programmable-availability":{"exploreIndexing":{"scope":"legacy-routes-only","paths":["/api/explore","/api/explore/token","/api/explore/token/analytics","/api/explore/token/chart"],"status":"reset","publicReadStatus":503,"providerCalls":false,"fallbacks":false,"backgroundWorkers":false},"chainExplore":{"authenticationRequired":false,"ethereum":{"path":"/api/explore/ethereum","chainId":1,"statuses":["ready","partial","stale","unavailable"]},"robinhood":{"path":"/api/explore/robinhood","chainId":4663,"statuses":["ready","syncing","stale","unavailable"]},"availability":"Read each response status and source evidence. Documentation does not establish current provider availability or public launch authorization.","categoryBoundary":"mode filters published launch sources only; module source intake has no business-category allowlist."},"v1Reads":"live","v1Create":{"status":"read-only","httpStatus":409,"errorCode":"CUSTOM_LAUNCH_V1_READ_ONLY","retryable":false},"v2ReleaseCandidate":{"status":"retired-to-read-compatibility","release":"2.0.0","publicAuthorization":false,"openApiUrl":"https://programmable.market/openapi/custom-launch-v2.json"},"v2":{"reads":"live","create":"read-only","createHttpStatus":409,"createErrorCode":"CUSTOM_LAUNCH_V2_READ_ONLY","retryable":false,"preparedAndSimulatingReads":"observation-only","readMayAuthorize":false,"authorizedAndSubmittedReconciliation":"bounded","openApiUrl":"https://programmable.market/openapi/custom-launch-v2.json"},"v3":{"status":"live","profileId":"programmable.direct-native-hook-graph.v1","profileRevision":3,"profileVersion":"3.3.0","freshWritesOnly":true,"compatibleProfileVersions":["3.2.0","3.1.0","3.0.0","2.0.0"],"productionLaunchAuthorized":true,"createHttpStatus":202,"replayHttpStatus":200,"retryAfter":"honor-on-429-or-503","openApiUrl":"https://programmable.market/openapi/custom-launch-v3.json","openApiDocumentStatus":"preparatory-not-live","activationAuthority":"https://programmable.market/.well-known/programmable.json","pendingProfile":{"profileVersion":"3.4.0","cliVersion":"3.3.9","released":false,"installable":false,"acceptedForFreshWrites":false,"activationRequires":"backend-and-well-known"}},"v4":{"status":"live","runtimeStatus":"routes-deployed","activationStage":"public-api-wallet-handoff","activationScope":"api-until-wallet","publication":{"indexingStatus":"unproven","canaryStatus":"not-performed","externalIndexingGuaranteed":false},"targetLaunchPath":"public-self-serve","apiVersion":"4","profileVersion":"4.1.0","cliVersion":"4.1.0","sourceCandidate":false,"released":true,"installable":true,"release":{"repository":"programmablehq/PROGRAMMABLE","tag":"programmable-launch-v4.1.0","version":"4.1.0","source":{"commitSha":"b17e40b9ff20bb16feb857bf77451b0a590e7105","ref":"refs/heads/production","treeSha":"373bceebe355e4f26eb8ffb265bff91630224ab6"},"assets":[{"name":"programmable-launch-4.1.0.cdx.json","sha256":"sha256:8382eb1fc17c45ea744806409528c8509bcb01b676f39848b8f060934450bcf7"},{"name":"programmable-launch-4.1.0.release.json","sha256":"sha256:8bbfb2864db15e3657a5cff0139b00a9aa950aaff248dcf515a3ed7ca9998460"},{"name":"programmable-launch-4.1.0.tgz","sha256":"sha256:9d7d26a74b0b4aaa3b3d8acddc80f821cbd79511ee1ada6acc7b935aeb21cac5"},{"name":"programmable-launch-4.1.0.tgz.sha256","sha256":"sha256:7074478e3f73da0f3db84114717046e60a71e259e867ef5416d33ef651dfc0a8"}],"releaseUrl":"https://github.com/programmablehq/PROGRAMMABLE/releases/tag/programmable-launch-v4.1.0","tarballUrl":"https://github.com/programmablehq/PROGRAMMABLE/releases/download/programmable-launch-v4.1.0/programmable-launch-4.1.0.tgz","checksumUrl":"https://github.com/programmablehq/PROGRAMMABLE/releases/download/programmable-launch-v4.1.0/programmable-launch-4.1.0.tgz.sha256"},"releaseReady":true,"publicAuthorization":false,"publicWrites":false,"chainId":4663,"caip2":"eip155:4663","openApiUrl":"https://programmable.market/openapi/custom-launch-v4.1.json","packConfigSchemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/pack-config.json","sourceVerificationSchemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/source-verification-status.json","capabilitiesPath":"/v4/chains/4663/capabilities","readinessPath":"/v4/chains/4663/readiness","finalizedMetadataPath":"/v4/chains/4663/finalized-custom-launches","statusPath":"/v4/chains/4663/custom-launches/{launchId}","terminalIndexerGuideUrl":"https://programmable.market/developer-reference/robinhood-terminal-indexer","terminalIndexerFixtureUrl":"https://programmable.market/fixtures/robinhood-terminal-indexer-v1.json","launchStampRouterAbiUrl":"https://programmable.market/contracts/robinhood/ProgrammableLaunchStampRouterV1.abi.json","launchStampRouterAbiSha256":"sha256:bb4e728e9f9c850eb01f928e8a798ac206a82e241a8d93b3b3c686635c88ed86","launchStampRouterProfileNormalizedAbiSha256":"sha256:ab25262ce1cb907eba1cb820492754c0cd5d7278eb5fd6a024ba24c767323ac0","launchStampRouterProfileNormalizedAbiHashing":"jq -cS plus trailing LF","statusCommand":"programmable-launch status REQUEST_UUID --api-version 4 --chain-id 4663 --watch --until finalized","statuses":["received","validating","action_required","authorized","awaiting_wallet_signature","wallet_action_required","submitted","sequencer_soft_confirmed","ethereum_posted","finalized","failed"],"actionRequiredMeaning":"server-authored-remediation-not-wallet-action","cliWalletAuthority":false,"platformFeePolicyStatus":"required-exact-native-fee-kernel","feeBehaviorClaim":false,"universalFeeBehaviorClaim":false,"platformFeePolicy":{"required":true,"status":"required-exact-native-fee-kernel","appliesTo":"new-robinhood-v4.1-api-custom-launches-only","changesExistingLaunches":false,"changesEthereumLaunches":false,"rateBps":20,"ratePpm":2000,"ratePercent":"0.20%","recipient":"0xD88539d3c4C460136a733A3Fd60cf6BF269079da","basis":"gross-native-leg-once-per-successful-swap","feeCurrency":"native-ETH","accountingMode":"pool-manager-native-claims","rounding":"ceil-per-trade","accrual":"pool-manager-native-claims","claimMechanism":"permissionless-fixed-recipient","enforcement":"exact-kernel-proof-required-before-wallet-handoff","claimScope":"exact-verified-kernel-and-stamped-poolkey-only","separateFromCreatorAndLpFees":true,"childRuntimeObservation":"required-after-deployment","transfersToTreasuryImmediatelyPerTrade":false,"canonicalOnchainEnforcementProven":false,"guaranteedRevenue":false,"feeBehaviorClaim":false,"universalFeeBehaviorClaim":false},"genericFeeClaiming":"not-live","externalIndexingGuaranteed":false,"releaseBlockers":[],"sourceVerificationStartsAfter":"finalized","sourceVerificationIndependentFromFinality":true,"indexingTradingAndPublicationIndependent":true,"createRequestSchemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/create-request.json","guideUrl":"https://programmable.market/developers/custom-launch-api-v1.md","admissionDescriptorUrl":"https://github.com/programmablehq/Launch-Policy/blob/main/policy/custom-launch-admission-v4.1.json","advertisedFundingModes":["wallet-transaction-value"],"initialBuyQuotePath":"/v4/chains/4663/initial-buy-quote","fundingPlan":{"required":true,"schemaVersion":"programmable.robinhood-funding-plan.v1","schemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/funding-plan.json","capitalSourceChoices":["buyer-funded","creator-funded","hybrid","custom"],"pricingModelChoices":["concentrated-liquidity","custom-curve","auction","custom"],"allocationFields":["initialLiquidityWei","initialBuyWei","reserveWei","otherLaunchValueWei"],"allocationSum":"equals-funding.valueWei-without-double-counting","budgets":["maxLaunchValueWei","maxGasCostWei"],"gasAdditionalToLaunchValue":true,"buildOnlyCreatesPermits":false,"declarationsProveLiquidityOrSolvency":false},"initialBuy":{"required":true,"minimumUsd":"1","assessmentTime":"permit-authorization","assessmentBase":"gross-native-initial-buy-at-admission","feeTreatment":"included-in-initial-buy","gasTreatment":"additional-not-included-in-initial-buy","execution":"atomic-full-native-input-and-minimum-token-output","recipient":"launch-wallet","minimumTokensOutRequired":true,"quotePath":"/v4/chains/4663/initial-buy-quote","quoteAuthentication":"none","quoteSchemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/initial-buy-quote.json","reviewSchemaUrl":"https://programmable.market/schemas/custom-launch/v4.1/initial-buy-review.json","referenceChainId":1,"executionChainId":4663,"referenceFeed":"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419","referenceDecimals":8,"maximumQuoteAgeSeconds":60,"staleFallback":false,"walletExecutionUsdValueGuaranteed":false,"firstTradeIndexingGuaranteed":false,"budgetIncreaseWithoutUserApproval":false},"nativeFeeClaiming":{"mechanism":"permissionless-fixed-recipient","scope":"exact-native-fee-vault-only","requiresPostDeploymentVaultVerification":true,"apiKeyScopeGranted":false,"transactionBroadcastByApi":false}},"legacyIntake":{"registry":"closed","github":"closed"}},"x-programmable-boundary":{"identity":"Chain-specific Explore feeds expose verified Ethereum Classic/Router identities and Robinhood Custom/Module release identities. They are presentation feeds, not complete archives. No token identity is served by the legacy reset routes.","excluded":"Unverified launch identities and entries excluded by each chain's presentation policy. These filters are not an allowlist for module source intake.","marketData":"Ethereum Explore market values remain null. Robinhood Explore can include separate market observations; absent values stay null. The legacy reset routes read no market, ranking, search, analytics or chart data.","router":"Chain-specific feeds retain exact Router and Module source evidence. Module sources are not assigned fabricated Router stamps. Feed visibility remains separate from review approval, catalog admission and tradability; legacy reset routes publish no Router evidence.","market":"Router verification requires pool initialization and fixed runtime and pool bindings, not active liquidity or tradability; the Custom graph owns liquidity behavior.","actions":"Fresh Ethereum V3.3 creation and lifecycle reads preserve exact idempotent request bytes, bounded best-effort reconciliation of pending history rows and precise single-resource polling. Robinhood V4 Router and backend are deployed and ready and target public self-serve, and live discovery derives API availability from the verified release and wallet-handoff evidence; indexing and publication remain independent. Robinhood V4.1 requires a request-bound funding plan, an atomic initial buy meeting a $1 gross native ETH reference at permit authorization, and an exact server-verified native fee kernel. The kernel policy is 20 bps on the gross native leg once per successful swap, paid through native ETH claims to the fixed treasury. Per-launch fee and initial-buy receipts bind the exact prepared code and stamped pool. Source admission does not prove deployed vault state, a completed trade, collected revenue or third-party indexing. Require live publicWrites, publicAuthorization and releaseReady discovery before creating; the wallet signature remains separate. V2 and V1 history remain readable and both legacy creation routes remain write-fenced. CLI, client and model output is preparation only; the API server independently enforces objective static hard blocks and exact Router simulation. Missing behavior execution leaves routability, liquidity and fee claims unverified, while an authenticated executed hard-invariant failure blocks wallet handoff. Exact-source provider verification starts after finality, runs independently and never revises launch finality. API keys never sign, broadcast, trade, claim fees, manage buybacks, or write profiles. The CLI also never signs or broadcasts."},"x-programmable-wallet-authorization-gate":{"decisionAuthority":"api-server","clientChecks":"preparation-only","localOrModelApprovalAccepted":false,"requiredForProfileVersion":"3.4.0","walletHandoffRequiresVerifiedEvidence":false,"mandatoryServerGates":["static-hard-block-policy","exact-router-simulation"],"configurationIsExecutionEvidence":false,"requiredPlatformFeeConformanceStatus":"verified","nonFeeVectorsMayRemainUnverified":true,"evidenceAuthority":"platform-runtime-executor","signedExecutionReceiptRequired":true,"notConfiguredDisposition":"claims_remain_unverified","unavailableDisposition":"claims_remain_unverified","executedFeeFailureDisposition":"blocks_wallet_handoff","executedHardInvariantFailureDisposition":"blocks_wallet_handoff","feeBehaviorClaim":false,"tenBpsClaimRequiresExactPerLaunchVerifiedFeePathEvidence":true,"claimScope":"exact-launch-and-stamped-poolkey-only"},"x-programmable-api-scopes":{"custom-launch:create":{"state":"v1-v2-write-fenced-v3.3-live-v4-public-api-wallet-handoff","description":"Fresh public writes use Ethereum V3.3. Robinhood V4.1 requires a request-bound funding plan, an atomic initial buy meeting a $1 gross native ETH reference at permit authorization, and an exact server-verified native fee kernel. The kernel policy is 20 bps on the gross native leg once per successful swap, paid through native ETH claims to the fixed treasury. Per-launch fee and initial-buy receipts bind the exact prepared code and stamped pool. Source admission does not prove deployed vault state, a completed trade, collected revenue or third-party indexing. Require live publicWrites, publicAuthorization and releaseReady discovery before creating; the wallet signature remains separate. V2 and V1 POST remain non-retryable write fences with CUSTOM_LAUNCH_V2_READ_ONLY and CUSTOM_LAUNCH_V1_READ_ONLY."},"custom-launch:read":{"state":"grantable","description":"Read Custom launches owned by the key's wallet principal."},"fees:claim":{"state":"reserved-disabled","description":"Not grantable or callable for arbitrary Custom hooks. FADE uses a separately bound adapter."},"buybacks:manage":{"state":"reserved-disabled","description":"Not grantable or callable for arbitrary Custom hooks. FADE uses a separately bound adapter."},"evolution":"New scopes and endpoints are additive. Existing keys never inherit a scope activated later."}}