{
  "openapi": "3.1.0",
  "info": {
    "title": "Programmable Custom Launch API",
    "version": "1.4.0",
    "summary": "Read existing wallet-bound V1 Custom launch history on Ethereum Mainnet.",
    "description": "V1 list and single-resource reads remain live for existing wallet-bound launch requests. V1 creation is write-fenced: every authenticated POST /v1/custom-launches returns 409 CUSTOM_LAUNCH_V1_READ_ONLY and must not be retried. Public V3.3 general-hook creation and lifecycle reads are defined by the separate V3 contract; V2 remains readable for its existing resources while V2 creation is also write-fenced. Legacy Registry and GitHub submission intake is closed. Existing finalized resources and server-authored exact-source verification remain readable. An API key is not wallet signing authority."
  },
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "servers": [
    {
      "url": "https://api.programmable.market",
      "description": "Programmable Custom Launch API"
    }
  ],
  "externalDocs": {
    "description": "Custom Launch API V1 developer guide",
    "url": "https://programmable.market/developers/custom-launch-api-v1.md"
  },
  "security": [
    {
      "CustomLaunchApiKey": []
    }
  ],
  "paths": {
    "/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.",
        "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/CustomLaunchListPageV1"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      },
      "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 separate public V3.3 contract for fresh writes.",
        "responses": {
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "description": "V1 launch creation is read-only. Do not retry this request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
                },
                "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 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.",
        "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/CustomLaunchRequestIdV1"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current durable launch state.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomLaunchResourceV1"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "description": "Launch not found for this principal.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
                }
              }
            }
          },
          "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/CustomLaunchApiErrorV1"
                }
              }
            }
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "CustomLaunchApiKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "pm_live_<22-char-key-id>_<43-char-secret>",
        "description": "Wallet-bound key created at https://programmable.market/developers/api-keys. Existing keys can read their wallet-owned V1 history. A custom-launch:create scope does not override the V1 write fence."
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Invalid request, Idempotency-Key or pagination query.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "API key is missing, malformed, expired, revoked or unknown.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Required scope or linked-wallet binding is missing.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      },
      "PayloadTooLarge": {
        "description": "Request body exceeds 8,388,608 bytes (8 MiB).",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      },
      "UnsupportedMediaType": {
        "description": "Content-Type must be application/json.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      },
      "Unavailable": {
        "description": "The API read path is temporarily unavailable.",
        "headers": {
          "Retry-After": {
            "description": "Delay in seconds or an HTTP date after which the read may be retried.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CustomLaunchApiErrorV1"
            }
          }
        }
      }
    },
    "schemas": {
      "EthereumAddress": {
        "type": "string",
        "pattern": "^0x[0-9a-fA-F]{40}$"
      },
      "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
      },
      "CanonicalIdentifier": {
        "type": "string",
        "minLength": 1,
        "maxLength": 256,
        "pattern": "^[A-Za-z0-9][A-Za-z0-9._:@/+\\-]{0,255}$"
      },
      "CustomLaunchRequestIdV1": {
        "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})*$"
      },
      "SourceBundleEntryV2": {
        "type": "object",
        "required": [
          "path",
          "kind",
          "mode",
          "byteLength",
          "contentSha256",
          "symlinkTarget"
        ],
        "properties": {
          "path": {
            "type": "string",
            "minLength": 1
          },
          "kind": {
            "type": "string",
            "enum": [
              "file",
              "symlink"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "100644",
              "100755",
              "120000"
            ]
          },
          "byteLength": {
            "type": "string",
            "pattern": "^(?:0|[1-9][0-9]*)$",
            "maxLength": 20
          },
          "contentSha256": {
            "$ref": "#/components/schemas/Sha256Digest"
          },
          "symlinkTarget": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "kind": {
                  "const": "file"
                }
              }
            },
            "then": {
              "properties": {
                "mode": {
                  "enum": [
                    "100644",
                    "100755"
                  ]
                },
                "symlinkTarget": {
                  "type": "null"
                }
              }
            },
            "else": {
              "properties": {
                "mode": {
                  "const": "120000"
                },
                "symlinkTarget": {
                  "type": "string"
                }
              }
            }
          }
        ],
        "additionalProperties": false
      },
      "SourceBundleManifestV2": {
        "type": "object",
        "description": "Complete non-empty manifest in strictly increasing UTF-8 path-byte order. The platform recomputes the frozen manifest digest and matches it to sourceDescriptor.sourceBundleDigest; it does not fetch or compile source files.",
        "required": [
          "schemaVersion",
          "entries"
        ],
        "properties": {
          "schemaVersion": {
            "const": "2.0.0"
          },
          "entries": {
            "type": "array",
            "minItems": 1,
            "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"
          },
          "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
      },
      "HookPermissionV1": {
        "type": "string",
        "enum": [
          "beforeInitialize",
          "afterInitialize",
          "beforeAddLiquidity",
          "afterAddLiquidity",
          "beforeRemoveLiquidity",
          "afterRemoveLiquidity",
          "beforeSwap",
          "afterSwap",
          "beforeDonate",
          "afterDonate",
          "beforeSwapReturnDelta",
          "afterSwapReturnDelta",
          "afterAddLiquidityReturnDelta",
          "afterRemoveLiquidityReturnDelta"
        ]
      },
      "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/LowerHex32"
          },
          "creationBytecode": {
            "type": "string",
            "pattern": "^0x(?:[0-9a-fA-F]{2})+$"
          },
          "constructorArguments": {
            "$ref": "#/components/schemas/HexData"
          },
          "initializerCalldata": {
            "$ref": "#/components/schemas/HexData"
          },
          "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,
                "uniqueItems": true,
                "items": {
                  "$ref": "#/components/schemas/HookPermissionV1"
                }
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "componentKind": {
                  "const": "hook"
                }
              }
            },
            "then": {
              "properties": {
                "declaredHookPermissions": {
                  "type": "array",
                  "maxItems": 14,
                  "uniqueItems": true,
                  "items": {
                    "$ref": "#/components/schemas/HookPermissionV1"
                  }
                }
              }
            },
            "else": {
              "properties": {
                "declaredHookPermissions": {
                  "type": "null"
                }
              }
            }
          }
        ],
        "additionalProperties": false
      },
      "CustomGraphBundleV1": {
        "type": "object",
        "description": "One acyclic executable graph with exactly one token and one hook. The sourceBundleSha256 must equal sourceDescriptor.bundleContentSha256. Aggregate input is limited to 524,288 bytes.",
        "required": [
          "schemaVersion",
          "sourceBundleSha256",
          "targets",
          "pool"
        ],
        "properties": {
          "schemaVersion": {
            "const": "programmable.custom-graph-bundle.v1"
          },
          "sourceBundleSha256": {
            "$ref": "#/components/schemas/Sha256Digest"
          },
          "targets": {
            "type": "array",
            "minItems": 1,
            "maxItems": 16,
            "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
          }
        },
        "additionalProperties": false
      },
      "AgentLaunchAttestationCheckV1": {
        "type": "object",
        "required": [
          "checkId",
          "evidenceSha256"
        ],
        "properties": {
          "checkId": {
            "$ref": "#/components/schemas/CanonicalIdentifier"
          },
          "evidenceSha256": {
            "$ref": "#/components/schemas/Sha256Digest"
          }
        },
        "additionalProperties": false
      },
      "AgentLaunchAttestationV1": {
        "type": "object",
        "description": "Required agent self-attestation for the exact graph. Programmable validates shape, evidence-digest presence and graph-subject binding but does not fetch or assess evidence or adopt a safety claim.",
        "required": [
          "schemaVersion",
          "subjectGraphBundleHash",
          "agentId",
          "checkedAt",
          "checks"
        ],
        "properties": {
          "schemaVersion": {
            "const": "programmable.agent-launch-attestation.v1"
          },
          "subjectGraphBundleHash": {
            "$ref": "#/components/schemas/Sha256Digest"
          },
          "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"
            }
          }
        },
        "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 the resolved constructor arguments used 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
      },
      "CustomLaunchCreateRequestV1": {
        "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"
          },
          "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
      },
      "CustomLaunchFailureV1": {
        "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
      },
      "PreparedLaunchStampRequestV1": {
        "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
      },
      "PreparedLaunchPermitV1": {
        "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
      },
      "PreparedLaunchArtifactV1": {
        "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"
          },
          "verificationBundleHash": {
            "$ref": "#/components/schemas/Sha256Digest"
          },
          "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/PreparedLaunchStampRequestV1"
          },
          "stampRequestHash": {
            "$ref": "#/components/schemas/LowerHex32"
          },
          "permit": {
            "$ref": "#/components/schemas/PreparedLaunchPermitV1"
          },
          "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
      },
      "AgentLaunchAttestationResultV1": {
        "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
      },
      "SignedPreparedLaunchPermitV1": {
        "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
      },
      "CustomLaunchWalletTransactionV1": {
        "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
      },
      "CustomLaunchObservationWindowV1": {
        "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
      },
      "FinalizedProviderObservationV1": {
        "type": "object",
        "required": [
          "provider",
          "finalizedBlockNumber",
          "finalizedBlockHash",
          "commonBlockHash"
        ],
        "properties": {
          "provider": {
            "enum": [
              "primary",
              "secondary"
            ]
          },
          "finalizedBlockNumber": {
            "$ref": "#/components/schemas/CanonicalUint256"
          },
          "finalizedBlockHash": {
            "$ref": "#/components/schemas/LowerHex32"
          },
          "commonBlockHash": {
            "$ref": "#/components/schemas/LowerHex32"
          }
        },
        "additionalProperties": false
      },
      "FinalizedCheckpointV1": {
        "type": "object",
        "required": [
          "schemaVersion",
          "blockNumber",
          "blockHash",
          "quorumSize",
          "observations"
        ],
        "properties": {
          "schemaVersion": {
            "const": "programmable.ethereum-finalized-checkpoint-quorum.v1"
          },
          "blockNumber": {
            "$ref": "#/components/schemas/CanonicalUint256"
          },
          "blockHash": {
            "$ref": "#/components/schemas/LowerHex32"
          },
          "quorumSize": {
            "const": 2
          },
          "observations": {
            "type": "array",
            "prefixItems": [
              {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/FinalizedProviderObservationV1"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "provider": {
                        "const": "primary"
                      }
                    }
                  }
                ]
              },
              {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/FinalizedProviderObservationV1"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "provider": {
                        "const": "secondary"
                      }
                    }
                  }
                ]
              }
            ],
            "minItems": 2,
            "maxItems": 2
          }
        },
        "additionalProperties": false
      },
      "CustomLaunchOnchainEvidenceV1": {
        "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"
          },
          "finalizedCheckpoint": {
            "$ref": "#/components/schemas/FinalizedCheckpointV1"
          }
        },
        "additionalProperties": false
      },
      "CustomLaunchPreparedOutputV1": {
        "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/PreparedLaunchArtifactV1"
          },
          "agentAttestation": {
            "$ref": "#/components/schemas/AgentLaunchAttestationResultV1"
          },
          "signedPermit": {
            "type": "null"
          },
          "walletTransaction": {
            "type": "null"
          }
        },
        "additionalProperties": false
      },
      "CustomLaunchAuthorizedOutputV1": {
        "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/PreparedLaunchArtifactV1"
          },
          "agentAttestation": {
            "$ref": "#/components/schemas/AgentLaunchAttestationResultV1"
          },
          "signedPermit": {
            "$ref": "#/components/schemas/SignedPreparedLaunchPermitV1"
          },
          "walletTransaction": {
            "$ref": "#/components/schemas/CustomLaunchWalletTransactionV1"
          },
          "observationWindow": {
            "$ref": "#/components/schemas/CustomLaunchObservationWindowV1"
          },
          "onchain": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CustomLaunchOnchainEvidenceV1"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "CustomLaunchOutputV1": {
        "description": "Typed durable output for prepared, authorized, submitted and finalized launch states.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/CustomLaunchPreparedOutputV1"
          },
          {
            "$ref": "#/components/schemas/CustomLaunchAuthorizedOutputV1"
          }
        ]
      },
      "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
      },
      "CustomLaunchResourceV1": {
        "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/CustomLaunchRequestIdV1",
            "description": "Deprecated-compatible alias of requestId. It is not an onchain identifier.",
            "deprecated": true
          },
          "requestId": {
            "$ref": "#/components/schemas/CustomLaunchRequestIdV1"
          },
          "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 CustomLaunchPreparedOutputV1; authorized, submitted and finalized return CustomLaunchAuthorizedOutputV1.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/CustomLaunchOutputV1"
              },
              {
                "type": "null"
              }
            ]
          },
          "failure": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CustomLaunchFailureV1"
              },
              {
                "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
      },
      "CustomLaunchListPageV1": {
        "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/CustomLaunchResourceV1"
            }
          },
          "nextCursor": {
            "oneOf": [
              {
                "type": "string",
                "minLength": 16,
                "maxLength": 512,
                "pattern": "^[A-Za-z0-9_-]+$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      },
      "CustomLaunchApiErrorV1": {
        "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. The V1 write fence returns CUSTOM_LAUNCH_V1_READ_ONLY. Existing read routes can return their documented authentication, authorization, lookup, rate-limit and availability codes."
              },
              "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
      }
    }
  },
  "x-programmable-availability": {
    "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"
    },
    "legacyIntake": {
      "registry": "closed",
      "github": "closed"
    }
  },
  "x-programmable-scopes": {
    "custom-launch:create": "v1-v2-write-fenced-v3.3-live",
    "custom-launch:read": "grantable",
    "fees:claim": "reserved-disabled",
    "buybacks:manage": "reserved-disabled"
  },
  "x-programmable-boundary": {
    "source": "caller-declared commitment",
    "attestation": "agent-self-attested",
    "platform": "validates manifest digest, graph, attestation subject, evidence digest and permit bindings only",
    "wallet": "controller wallet or separately wallet-authorized agent signs and broadcasts",
    "reconciliation": "request-driven after wallet broadcast: the single-resource GET reconciles exact state and the bounded history GET makes a best-effort pass over pending rows",
    "finality": "canonical Router event and same-block getter evidence at 64 confirmations",
    "indexing": "eligible for Programmable discovery after finality; third-party discovery and listing remain consumer-controlled",
    "market": "Router verification requires pool initialization and fixed runtime and pool bindings, not active liquidity or tradability; the Custom graph owns liquidity behavior",
    "claims": "no compilation, simulation, source-to-bytecode verification, evidence assessment, audit, approval or safety attestation"
  }
}
