Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet.
Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge.
Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read.
Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header.
Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job’s result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.
Ed25519-signed statement of the verdict. Present when the Selo deployment has a signing key.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Selo","description":"CI for x402. Selo pays your endpoint before your users do.","colors":{"primary":"#EA580C","light":"#FB923C","dark":"#C2410C"},"logo":{"light":"https://mintcdn.com/selo/uDDPP6e9J3oqq-so/logo/light.svg?fit=max\u0026auto=format\u0026n=uDDPP6e9J3oqq-so\u0026q=85\u0026s=34ba3a87bcb123757ba48be31d19069d","dark":"https://mintcdn.com/selo/uDDPP6e9J3oqq-so/logo/dark.svg?fit=max\u0026auto=format\u0026n=uDDPP6e9J3oqq-so\u0026q=85\u0026s=c204c3bd2d3bcf1dcc90d2a9f7fb1f7d","href":"https://useselo.xyz"},"favicon":"https://mintcdn.com/selo/uDDPP6e9J3oqq-so/favicon.png?fit=max\u0026auto=format\u0026n=uDDPP6e9J3oqq-so\u0026q=85\u0026s=523f923af3f56c58eb8696b88a9f4fd7","api":{"playground":{"display":"simple"},"examples":{"languages":["curl","javascript","python"]}},"navbar":{"links":[{"href":"https://github.com/Enoch208/selo","label":"GitHub"}],"primary":{"type":"button","label":"Open Selo","href":"https://useselo.xyz"}},"footer":{"socials":{"x":"https://x.com/useselo_","github":"https://github.com/Enoch208/selo","website":"https://useselo.xyz"}},"seo":{"metatags":{"og:site_name":"Selo docs"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://useselo.xyz"},{"anchor":"GitHub","icon":"github","href":"https://github.com/Enoch208/selo"},{"anchor":"Pilot guide","icon":"flag-checkered","href":"https://github.com/Enoch208/selo/blob/main/docs/PILOT_GUIDE.md"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"selo","hasAudioNarration":false,"actualSubdomain":"selo","customDomains":["docs.useselo.xyz"],"gitSource":{"type":"github","owner":"enoch208","repo":"docs-adrianne","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":"","_id":"6adfade67d7c0e994635dbe7"},"chroma":{"latestBuiltDeploymentHistoryId":"6adfb6c6e2a550116c3cb359","collectionId":"36784781-278b-473b-a258-a7b58f1f6d68","liveDeploymentHistoryId":"6adfb6c6e2a550116c3cb359","schemaVersion":"v3"},"entitlements":{},"buildId":"6adfb6c6e2a550116c3cb359","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Documentation","count":25},{"language":"default","tag":"API reference","count":14},{"language":"default","tag":"Endpoints","count":11},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"CLI reference","count":7},{"language":"default","tag":"Concepts","count":7},{"language":"default","tag":"selo CLI","count":6},{"language":"default","tag":"Resources","count":5},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Overview","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/release-tests/run-a-release-test","slug":"/api-reference/release-tests/run-a-release-test","pageMetadata":{"title":"Run a release test","description":"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet.\n\n1. Send the request without payment. Selo validates the body and the preflight first, then answers `402` with a `PAYMENT-REQUIRED` header: base64 JSON offering one `exact` requirement of `1000000` atomic USDC (ASA `31566704`) on `algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=`, tagged `x402-global-challenge`.\n2. Sign that requirement with an x402 v2 client and send the same request again with the `PAYMENT-SIGNATURE` header (base64 JSON payment payload). The x402 v1 header `X-PAYMENT` is not read.\n3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a `PAYMENT-RESPONSE` header.\n\nSend an `Idempotency-Key`. A repeat with the same `preflightId` and key returns the first job's result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/release-test","href":"/api-reference/release-tests/run-a-release-test","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n ol: \"ol\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet.\"\n }), \"\\n\", _jsxs(_components.ol, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"Send the request without payment. Selo validates the body and the preflight first, then answers \", _jsx(_components.code, {\n children: \"402\"\n }), \" with a \", _jsx(_components.code, {\n children: \"PAYMENT-REQUIRED\"\n }), \" header: base64 JSON offering one \", _jsx(_components.code, {\n children: \"exact\"\n }), \" requirement of \", _jsx(_components.code, {\n children: \"1000000\"\n }), \" atomic USDC (ASA \", _jsx(_components.code, {\n children: \"31566704\"\n }), \") on \", _jsx(_components.code, {\n children: \"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=\"\n }), \", tagged \", _jsx(_components.code, {\n children: \"x402-global-challenge\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Sign that requirement with an x402 v2 client and send the same request again with the \", _jsx(_components.code, {\n children: \"PAYMENT-SIGNATURE\"\n }), \" header (base64 JSON payment payload). The x402 v1 header \", _jsx(_components.code, {\n children: \"X-PAYMENT\"\n }), \" is not read.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a \", _jsx(_components.code, {\n children: \"PAYMENT-RESPONSE\"\n }), \" header.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send an \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \". A repeat with the same \", _jsx(_components.code, {\n children: \"preflightId\"\n }), \" and key returns the first job’s result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Run a release test","description":"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet.\n\n1. Send the request without payment. Selo validates the body and the preflight first, then answers `402` with a `PAYMENT-REQUIRED` header: base64 JSON offering one `exact` requirement of `1000000` atomic USDC (ASA `31566704`) on `algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=`, tagged `x402-global-challenge`.\n2. Sign that requirement with an x402 v2 client and send the same request again with the `PAYMENT-SIGNATURE` header (base64 JSON payment payload). The x402 v1 header `X-PAYMENT` is not read.\n3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a `PAYMENT-RESPONSE` header.\n\nSend an `Idempotency-Key`. A repeat with the same `preflightId` and key returns the first job's result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/release-test","href":"/api-reference/release-tests/run-a-release-test","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Release tests"],"operationId":"runReleaseTest","summary":"Run a release test","description":"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet.\n\n1. Send the request without payment. Selo validates the body and the preflight first, then answers `402` with a `PAYMENT-REQUIRED` header: base64 JSON offering one `exact` requirement of `1000000` atomic USDC (ASA `31566704`) on `algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=`, tagged `x402-global-challenge`.\n2. Sign that requirement with an x402 v2 client and send the same request again with the `PAYMENT-SIGNATURE` header (base64 JSON payment payload). The x402 v1 header `X-PAYMENT` is not read.\n3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a `PAYMENT-RESPONSE` header.\n\nSend an `Idempotency-Key`. A repeat with the same `preflightId` and key returns the first job's result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.","parameters":["5c6a7a1d-b464-4eaf-adfd-4d3b91204627","b438cd7c-22a0-4eba-bdb0-55826783d1fe"],"requestBody":"dcf2222e-9693-4720-b1a0-0937ea1aae2f","responses":{"200":"b8b7cd99-df62-4805-9025-0ed2046b19db","400":"e32ca4dd-a536-4119-8bdf-23a576117f92","402":"d8d9c3d7-d49d-48f4-807a-51173747fd17","403":"56e81afc-4035-4dda-8e7e-5e91628c7839","404":"905ae931-05f2-4cbb-885a-b81ba4f0627e","409":"ab677aef-b003-4a43-b5ea-84b85c07024b","413":"4b7aee85-3e52-4ace-8053-682da84c08b1","422":"dff69096-804e-4303-ac8f-066c00dc234f","500":"58462be2-b008-493a-8fe1-0cf63f4ce0cf","502":"361e215a-9982-4cca-919c-67053fa64314"},"method":"post","type":"path","servers":["fbe7f743-573d-4126-9bae-6b7b65ed90a1"],"security":[],"path":"/v1/release-test","baseUrlOptions":["https://api.useselo.xyz"],"title":"Run a release test","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"5c6a7a1d-b464-4eaf-adfd-4d3b91204627":{"name":"Idempotency-Key","in":"header","required":false,"description":"8 to 128 characters of `A-Z`, `a-z`, `0-9`, `_` or `-`. Scoped to the `preflightId`.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$","minLength":8,"maxLength":128,"isRequired":false,"description":"8 to 128 characters of `A-Z`, `a-z`, `0-9`, `_` or `-`. Scoped to the `preflightId`.","uniqueKey":"","typeLabel":"string"},"example":"release-2026-10-26-a"},"b438cd7c-22a0-4eba-bdb0-55826783d1fe":{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"Base64-encoded JSON x402 v2 payment payload that pays the requirement from the 402. Omit it on the first request to receive the challenge.","schema":{"type":"string","isRequired":false,"description":"Base64-encoded JSON x402 v2 payment payload that pays the requirement from the 402. Omit it on the first request to receive the challenge.","uniqueKey":"","typeLabel":"string"},"example":"\u003cbase64 JSON payment payload>"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["preflightId","profile"],"properties":{"preflightId":{"type":"string","minLength":1,"maxLength":64,"description":"ID of an eligible, unexpired preflight.","isRequired":true,"uniqueKey":"preflightId","typeLabel":"string"},"profile":{"type":"string","enum":["quick"],"description":"Release test profile. `quick` is the only profile.","isRequired":true,"uniqueKey":"profile","typeLabel":"enum\u003cstring>"},"expected":{"type":"object","additionalProperties":false,"description":"What the paid response must look like. Omitted fields are not checked, except `status`, which defaults to 200.","properties":{"status":{"type":"integer","minimum":100,"maximum":599,"default":200,"description":"Expected HTTP status of the paid response.","uniqueKey":"expected.status","typeLabel":"integer"},"contentType":{"type":"string","maxLength":200,"pattern":"^[A-Za-z0-9][A-Za-z0-9!#$\u0026^_.+-]*/[A-Za-z0-9][A-Za-z0-9!#$\u0026^_.+-]*$","description":"Expected media type, `type/subtype`, compared case-insensitively.","uniqueKey":"expected.contentType","typeLabel":"string"},"jsonSchema":{"type":"object","additionalProperties":true,"description":"JSON Schema the paid response body must satisfy. Compiled with Ajv 8 in strict mode; at most 16 KiB (16384 bytes) serialized. A schema that does not compile is rejected with 400.","uniqueKey":"expected.jsonSchema","typeLabel":"object"}},"uniqueKey":"expected","typeLabel":"object"},"deploymentId":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,128}$","description":"Your release identifier, for example a commit SHA. Stored on the job and attested as `asserted_by_client`: Selo records it, it does not verify it.","uniqueKey":"deploymentId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"contract":{"title":"contract","value":{"preflightId":"pfl_…","profile":"quick","expected":{"status":200,"contentType":"application/json","jsonSchema":{"type":"object","required":["orderId","receiptId","fulfilled"],"properties":{"orderId":{"type":"string","pattern":"^ord_[0-9a-f]{24}$"},"receiptId":{"type":"string","pattern":"^rcpt_[0-9a-f]{24}$"},"fulfilled":{"const":true}}}},"deploymentId":"fixed-v2"}},"minimal":{"title":"minimal","value":{"preflightId":"pfl_…","profile":"quick"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"b8b7cd99-df62-4805-9025-0ed2046b19db":{"description":"The release test finished, or this request matched an existing finished job (no new payment settled). `verdict` is the gate decision.","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded JSON settlement result. Present when this request settled the payment; absent when the reply is the stored result of an earlier request.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/X402SettleResponse"}}}},"content":{"application/json":{"schema":{"type":"object","required":["jobId","verdict","target","checks","warnings","inconclusiveReason","money","reportUrl"],"properties":{"jobId":{"type":"string","pattern":"^job_[0-9A-HJKMNP-TV-Z]{26}$","isRequired":true,"uniqueKey":"jobId","typeLabel":"string"},"verdict":{"type":"string","enum":["PASS","FAIL","INCONCLUSIVE"],"description":"Release verdict computed by the deterministic verdict reducer.","isRequired":true,"uniqueKey":"verdict","typeLabel":"enum\u003cstring>"},"target":{"type":"string","description":"The tested URL.","isRequired":true,"uniqueKey":"target","typeLabel":"string"},"checks":{"type":"array","items":{"type":"object","required":["id","status","code","blocking","summary","evidence"],"properties":{"id":{"type":"string","enum":["handshake","paid_delivery","response_contract","discovery_contract","retry_safety"],"description":"The five release checks, always reported in this order.","isRequired":true,"uniqueKey":"checks.items.[INDEX].id","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PASS","WARN","FAIL","INCONCLUSIVE"],"description":"Outcome of one check.","isRequired":true,"uniqueKey":"checks.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Result code, for example `HANDSHAKE_VALID`, `SCHEMA_MISMATCH` or `NOT_RUN`. For `retry_safety` it is a `RetryOutcome`.","isRequired":true,"uniqueKey":"checks.items.[INDEX].code","typeLabel":"string"},"blocking":{"type":"boolean","description":"Whether the check can decide the verdict. Every check in the `quick` profile is blocking.","isRequired":true,"uniqueKey":"checks.items.[INDEX].blocking","typeLabel":"boolean"},"summary":{"type":"string","description":"One sentence describing what Selo observed.","isRequired":true,"uniqueKey":"checks.items.[INDEX].summary","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"string","pattern":"^evd_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"checks.items.[INDEX].evidence.items.[INDEX]","typeLabel":"string"},"description":"IDs of the evidence records behind this result. A PASS without evidence counts as INCONCLUSIVE.","isRequired":true,"uniqueKey":"checks.items.[INDEX].evidence","typeLabel":"string[]"}},"uniqueKey":"checks.items.[INDEX]","typeLabel":"object"},"minItems":5,"maxItems":5,"description":"All five checks, in fixed order.","isRequired":true,"uniqueKey":"checks","typeLabel":"object[]"},"warnings":{"type":"array","items":{"type":"string","uniqueKey":"warnings.items.[INDEX]","typeLabel":"string"},"description":"One line per WARN check (and per non-blocking FAIL or INCONCLUSIVE), formatted `\u003ccheck id>: \u003csummary>`.","isRequired":true,"uniqueKey":"warnings","typeLabel":"string[]"},"inconclusiveReason":{"oneOf":[{"type":"string","description":"Why a job ended INCONCLUSIVE. `null` on PASS and FAIL.","enum":["NETWORK_UNAVAILABLE","FACILITATOR_UNAVAILABLE","TARGET_TIMEOUT","BUDGET_EXHAUSTED","PAYMENT_UNRESOLVED","EVIDENCE_INCOMPLETE","AUTHORIZATION_LAPSED","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"inconclusiveReason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"inconclusiveReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"inconclusiveReason","typeLabel":"enum\u003cstring> | null"},"money":{"type":"object","required":["seloInboundTxId","downstreamSpendUsdc","downstreamTxIds"],"properties":{"seloInboundTxId":{"type":"string","description":"Algorand transaction ID of your payment to Selo.","isRequired":true,"uniqueKey":"money.seloInboundTxId","typeLabel":"string"},"downstreamSpendUsdc":{"type":"string","pattern":"^[0-9]+\\.[0-9]{2,6}$","description":"USDC Selo paid the target and saw settle.","isRequired":true,"uniqueKey":"money.downstreamSpendUsdc","typeLabel":"string"},"downstreamTxIds":{"type":"array","items":{"type":"string","uniqueKey":"money.downstreamTxIds.items.[INDEX]","typeLabel":"string"},"description":"Algorand transaction IDs of Selo's settled payments to the target.","isRequired":true,"uniqueKey":"money.downstreamTxIds","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"money","typeLabel":"object"},"reportUrl":{"type":"string","description":"Private report link, `https://api.useselo.xyz/v1/reports/\u003ctoken>`. Anyone with it can read the report.","isRequired":true,"uniqueKey":"reportUrl","typeLabel":"string"},"attestation":{"type":"object","description":"Ed25519-signed statement of the verdict. Present when the Selo deployment has a signing key.","required":["payload","signature"],"properties":{"payload":{"type":"object","description":"The signed statement. Selo signs the canonical JSON of this object (keys sorted at every level, no whitespace).","required":["schemaVersion","issuer","jobId","testedTarget","deployment","testedAt","completedAt","seloVersion","verdict","inconclusiveReason","checks","expectedContractSha256","targetChallengeSha256","payments","evidenceSha256","evidence"],"properties":{"schemaVersion":{"type":"string","const":"selo.release.v1","isRequired":true,"uniqueKey":"attestation.payload.schemaVersion","typeLabel":"string"},"issuer":{"type":"string","description":"Origin of the Selo deployment that signed, `https://api.useselo.xyz`.","isRequired":true,"uniqueKey":"attestation.payload.issuer","typeLabel":"string"},"jobId":{"type":"string","pattern":"^job_[0-9A-HJKMNP-TV-Z]{26}$","isRequired":true,"uniqueKey":"attestation.payload.jobId","typeLabel":"string"},"testedTarget":{"type":"object","required":["url","method"],"properties":{"url":{"type":"string","isRequired":true,"uniqueKey":"attestation.payload.testedTarget.url","typeLabel":"string"},"method":{"type":"string","enum":["GET","POST"],"description":"HTTP method Selo uses to call the target.","isRequired":true,"uniqueKey":"attestation.payload.testedTarget.method","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"attestation.payload.testedTarget","typeLabel":"object"},"deployment":{"oneOf":[{"type":"object","required":["id","verification"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,128}$","isRequired":true,"uniqueKey":"attestation.payload.deployment.oneOf.0.id","typeLabel":"string"},"verification":{"type":"string","const":"asserted_by_client","isRequired":true,"uniqueKey":"attestation.payload.deployment.oneOf.0.verification","typeLabel":"string"}},"description":"The `deploymentId` you sent, or `null`.","isRequired":true,"uniqueKey":"attestation.payload.deployment.oneOf.0","typeLabel":"object"},{"type":"null","required":["id","verification"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,128}$"},"verification":{"type":"string","const":"asserted_by_client"}},"description":"The `deploymentId` you sent, or `null`.","isRequired":true,"uniqueKey":"attestation.payload.deployment.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.deployment","typeLabel":"object | null"},"testedAt":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"attestation.payload.testedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"attestation.payload.testedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.testedAt","typeLabel":"string\u003cdate-time> | null"},"completedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"attestation.payload.completedAt","typeLabel":"string\u003cdate-time>"},"seloVersion":{"type":"string","description":"Git commit of the Selo build, or `unknown`.","isRequired":true,"uniqueKey":"attestation.payload.seloVersion","typeLabel":"string"},"verdict":{"type":"string","enum":["PASS","FAIL","INCONCLUSIVE"],"description":"Release verdict computed by the deterministic verdict reducer.","isRequired":true,"uniqueKey":"attestation.payload.verdict","typeLabel":"enum\u003cstring>"},"inconclusiveReason":{"oneOf":[{"type":"string","description":"Why a job ended INCONCLUSIVE. `null` on PASS and FAIL.","enum":["NETWORK_UNAVAILABLE","FACILITATOR_UNAVAILABLE","TARGET_TIMEOUT","BUDGET_EXHAUSTED","PAYMENT_UNRESOLVED","EVIDENCE_INCOMPLETE","AUTHORIZATION_LAPSED","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"attestation.payload.inconclusiveReason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"attestation.payload.inconclusiveReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.inconclusiveReason","typeLabel":"enum\u003cstring> | null"},"checks":{"type":"array","items":{"type":"object","required":["id","status","code","blocking","evidence"],"properties":{"id":{"type":"string","enum":["handshake","paid_delivery","response_contract","discovery_contract","retry_safety"],"description":"The five release checks, always reported in this order.","isRequired":true,"uniqueKey":"attestation.payload.checks.items.[INDEX].id","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["PASS","WARN","FAIL","INCONCLUSIVE"],"description":"Outcome of one check.","isRequired":true,"uniqueKey":"attestation.payload.checks.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"code":{"type":"string","isRequired":true,"uniqueKey":"attestation.payload.checks.items.[INDEX].code","typeLabel":"string"},"blocking":{"type":"boolean","isRequired":true,"uniqueKey":"attestation.payload.checks.items.[INDEX].blocking","typeLabel":"boolean"},"evidence":{"type":"array","items":{"type":"string","pattern":"^evd_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"attestation.payload.checks.items.[INDEX].evidence.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"attestation.payload.checks.items.[INDEX].evidence","typeLabel":"string[]"}},"uniqueKey":"attestation.payload.checks.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"attestation.payload.checks","typeLabel":"object[]"},"expectedContractSha256":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the canonical JSON of the `expected` contract, or `null` when none was sent.","isRequired":true,"uniqueKey":"attestation.payload.expectedContractSha256.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the canonical JSON of the `expected` contract, or `null` when none was sent.","isRequired":true,"uniqueKey":"attestation.payload.expectedContractSha256.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.expectedContractSha256","typeLabel":"string | null"},"targetChallengeSha256":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the target's 402 challenge Selo recorded.","isRequired":true,"uniqueKey":"attestation.payload.targetChallengeSha256.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the target's 402 challenge Selo recorded.","isRequired":true,"uniqueKey":"attestation.payload.targetChallengeSha256.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.targetChallengeSha256","typeLabel":"string | null"},"payments":{"type":"object","required":["network","asset","inboundTxId","inboundAmountUsdc","downstream"],"properties":{"network":{"type":"string","description":"CAIP-2 network ID.","isRequired":true,"uniqueKey":"attestation.payload.payments.network","typeLabel":"string"},"asset":{"type":"string","description":"USDC asset ID.","isRequired":true,"uniqueKey":"attestation.payload.payments.asset","typeLabel":"string"},"inboundTxId":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"attestation.payload.payments.inboundTxId.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"attestation.payload.payments.inboundTxId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.payments.inboundTxId","typeLabel":"string | null"},"inboundAmountUsdc":{"oneOf":[{"type":"string","description":"USDC amount as a decimal string with 2 to 6 decimals, for example `1.00` or `0.01`.","pattern":"^[0-9]+\\.[0-9]{2,6}$","isRequired":true,"uniqueKey":"attestation.payload.payments.inboundAmountUsdc.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"attestation.payload.payments.inboundAmountUsdc.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.payments.inboundAmountUsdc","typeLabel":"string | null"},"downstream":{"type":"array","items":{"type":"object","required":["status","amountUsdc","txId"],"properties":{"status":{"type":"string","enum":["RESERVED","SETTLED","RELEASED","UNRESOLVED"],"description":"State of one downstream payment. `RESERVED`: budget held before signing. `SETTLED`: confirmed on chain. `RELEASED`: definitely not paid, budget returned. `UNRESOLVED`: outcome unknown, amount held and never released by a timeout.","isRequired":true,"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"amountUsdc":{"type":"string","pattern":"^[0-9]+\\.[0-9]{2,6}$","description":"USDC amount as a decimal string with 2 to 6 decimals, for example `1.00` or `0.01`.","isRequired":true,"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX].amountUsdc","typeLabel":"string"},"txId":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX].txId.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX].txId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX].txId","typeLabel":"string | null"}},"uniqueKey":"attestation.payload.payments.downstream.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"attestation.payload.payments.downstream","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"attestation.payload.payments","typeLabel":"object"},"evidenceSha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the canonical JSON of `evidence`.","isRequired":true,"uniqueKey":"attestation.payload.evidenceSha256","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"object","required":["id","kind","sha256"],"properties":{"id":{"type":"string","pattern":"^evd_[0-9A-HJKMNP-TV-Z]{26}$","isRequired":true,"uniqueKey":"attestation.payload.evidence.items.[INDEX].id","typeLabel":"string"},"kind":{"type":"string","description":"Evidence kind: `authorization_snapshot`, `target_challenge`, `paid_response`, `downstream_payment`, `response_contract`, `catalog_record` or `replay_response`.","isRequired":true,"uniqueKey":"attestation.payload.evidence.items.[INDEX].kind","typeLabel":"string"},"sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the sanitized evidence record.","isRequired":true,"uniqueKey":"attestation.payload.evidence.items.[INDEX].sha256","typeLabel":"string"}},"uniqueKey":"attestation.payload.evidence.items.[INDEX]","typeLabel":"object"},"description":"Every evidence record of the job, sorted by ID.","isRequired":true,"uniqueKey":"attestation.payload.evidence","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"attestation.payload","typeLabel":"object"},"signature":{"type":"object","required":["algorithm","keyId","value"],"properties":{"algorithm":{"type":"string","const":"Ed25519","isRequired":true,"uniqueKey":"attestation.signature.algorithm","typeLabel":"string"},"keyId":{"type":"string","pattern":"^selo-ed25519-[0-9a-f]{16}$","description":"Matches a `keyId` in the attestation key set.","isRequired":true,"uniqueKey":"attestation.signature.keyId","typeLabel":"string"},"value":{"type":"string","pattern":"^[A-Za-z0-9_-]+$","description":"Ed25519 signature over the UTF-8 bytes of the payload's canonical JSON, base64url without padding.","isRequired":true,"uniqueKey":"attestation.signature.value","typeLabel":"string"}},"isRequired":true,"uniqueKey":"attestation.signature","typeLabel":"object"}},"uniqueKey":"attestation","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"pass":{"title":"pass","value":{"jobId":"job_51AZ2WJZ78RF1WZC316Q1K38GG","verdict":"PASS","target":"https://demo.useselo.xyz/v1/orders","checks":[{"id":"handshake","status":"PASS","code":"HANDSHAKE_VALID","blocking":true,"summary":"Target issued a valid x402 v2 challenge with a supported requirement for network algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8= and asset 31566704.","evidence":["evd_B23GQN052SFAET2QME89MVYX5G"]},{"id":"paid_delivery","status":"PASS","code":"PAID_AND_DELIVERED","blocking":true,"summary":"Downstream payment settled and target returned 200 with transaction QEUF5D33T4YHYP3KKIY2PGCYF55XXSUYKS5GXFBAVAZ4IEZOE3ZQ.","evidence":["evd_6K2ASNC2G3JG43Q0XE0MSXJATM","evd_PYNAQNMTD7KQJSJ0ZM6D618AK4"]},{"id":"response_contract","status":"PASS","code":"CONTRACT_MATCHED","blocking":true,"summary":"Observed response matched the expected status 200 and content type application/json.","evidence":["evd_6K2ASNC2G3JG43Q0XE0MSXJATM","evd_EKR9NXGB5HRGPQ4ZBN3WM914FW"]},{"id":"discovery_contract","status":"PASS","code":"DISCOVERY_CONSISTENT","blocking":true,"summary":"Live challenge and catalog record agree on method, URL, payment terms and carry usable metadata.","evidence":["evd_TE2XZJB33D4CXHV2EMW84SS6BG"]},{"id":"retry_safety","status":"PASS","code":"PASS_REPLAY_REJECTED","blocking":true,"summary":"Replaying the identical signed payment header was rejected with status 402.","evidence":["evd_7ZVACZFH5PNMZAQ5T82YZN7Z9R"]}],"warnings":[],"inconclusiveReason":null,"money":{"seloInboundTxId":"EPBEZR22SZ5LYKFM7UJYCSFG5IWNA6QYZ6XHUA6KGTTDDQQ5UIJA","downstreamSpendUsdc":"0.01","downstreamTxIds":["QEUF5D33T4YHYP3KKIY2PGCYF55XXSUYKS5GXFBAVAZ4IEZOE3ZQ"]},"reportUrl":"https://api.useselo.xyz/v1/reports/\u003creport token>","attestation":{"payload":{"schemaVersion":"selo.release.v1","issuer":"https://api.useselo.xyz","jobId":"job_51AZ2WJZ78RF1WZC316Q1K38GG","testedTarget":{"url":"https://demo.useselo.xyz/v1/orders","method":"POST"},"deployment":{"id":"fixed-v2","verification":"asserted_by_client"},"testedAt":"2026-10-26T10:24:02.883Z","completedAt":"2026-10-26T10:24:12.218Z","seloVersion":"71080ad","verdict":"PASS","inconclusiveReason":null,"checks":[{"id":"handshake","status":"PASS","code":"HANDSHAKE_VALID","blocking":true,"evidence":["evd_B23GQN052SFAET2QME89MVYX5G"]},{"id":"paid_delivery","status":"PASS","code":"PAID_AND_DELIVERED","blocking":true,"evidence":["evd_6K2ASNC2G3JG43Q0XE0MSXJATM","evd_PYNAQNMTD7KQJSJ0ZM6D618AK4"]},{"id":"response_contract","status":"PASS","code":"CONTRACT_MATCHED","blocking":true,"evidence":["evd_6K2ASNC2G3JG43Q0XE0MSXJATM","evd_EKR9NXGB5HRGPQ4ZBN3WM914FW"]},{"id":"discovery_contract","status":"PASS","code":"DISCOVERY_CONSISTENT","blocking":true,"evidence":["evd_TE2XZJB33D4CXHV2EMW84SS6BG"]},{"id":"retry_safety","status":"PASS","code":"PASS_REPLAY_REJECTED","blocking":true,"evidence":["evd_7ZVACZFH5PNMZAQ5T82YZN7Z9R"]}],"expectedContractSha256":"6e5b149b1088d214be6a1c097e2e06bf1127fe529c544731023abea7b03e7170","targetChallengeSha256":"39793a689d67cb18a7a59fca4a2d6211575e577bc2496accee3c93bd0ca2e7cc","payments":{"network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","asset":"31566704","inboundTxId":"EPBEZR22SZ5LYKFM7UJYCSFG5IWNA6QYZ6XHUA6KGTTDDQQ5UIJA","inboundAmountUsdc":"1.00","downstream":[{"status":"SETTLED","amountUsdc":"0.01","txId":"QEUF5D33T4YHYP3KKIY2PGCYF55XXSUYKS5GXFBAVAZ4IEZOE3ZQ"}]},"evidenceSha256":"49d787f15e7001a408f495aa59f4b16214dca58838e9e99ddd4790f6d6565a96","evidence":[{"id":"evd_6K2ASNC2G3JG43Q0XE0MSXJATM","kind":"paid_response","sha256":"7815cd18d10df182be8f325d6d7a3b67800060da3efeff5c9c01fd409794398b"},{"id":"evd_7ZVACZFH5PNMZAQ5T82YZN7Z9R","kind":"replay_response","sha256":"a72223caf72ed2bd2d24114062b7cb15655f0d0e9c8cd4442a3bac9e791cae85"},{"id":"evd_B23GQN052SFAET2QME89MVYX5G","kind":"target_challenge","sha256":"39793a689d67cb18a7a59fca4a2d6211575e577bc2496accee3c93bd0ca2e7cc"},{"id":"evd_EKR9NXGB5HRGPQ4ZBN3WM914FW","kind":"response_contract","sha256":"f3f8cef64a663df7d7c192ff542878b6653df048b227305e50457bab0fab4bd0"},{"id":"evd_MVWEZKMTNT45MWX6RDA8G6HRQ0","kind":"authorization_snapshot","sha256":"207c2d476ea56e68e5bb88fa34ac5a943912be83251088a30f93f99c515626da"},{"id":"evd_PYNAQNMTD7KQJSJ0ZM6D618AK4","kind":"downstream_payment","sha256":"cca974ffefb3a23f9528745f1c205e58fc5687e8ef18a0bab527f110fedf609e"},{"id":"evd_SXXV98XNSNVMPPPF7R7YR2RSC8","kind":"authorization_snapshot","sha256":"208afc651b36a13f9b93c2decb89cc70558559c709d67ca83606ae65bb2f54e1"},{"id":"evd_TE2XZJB33D4CXHV2EMW84SS6BG","kind":"catalog_record","sha256":"4503636c21768df0807c0dfd88ba1813a9f2fdf9629bdf59fce723ed21e25712"}]},"signature":{"algorithm":"Ed25519","keyId":"selo-ed25519-728fcf85650b128f","value":"E3lC29kTmj4Ts8SVoEDFabdAGGAO7ZZs4n9p2P7HUWGePMfi4aO75xQ-v7cynT1T4nT6mB2iQZYAzXe2YIbeBg"}}}},"fail":{"title":"fail","value":{"jobId":"job_189NZ481HFH77CRGF60AEF22RG","verdict":"FAIL","target":"https://demo.useselo.xyz/v1/orders","checks":[{"id":"handshake","status":"PASS","code":"HANDSHAKE_VALID","blocking":true,"summary":"Target issued a valid x402 v2 challenge with a supported requirement for network algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8= and asset 31566704.","evidence":["evd_Z9C3SD9CX9WNS38JFYYGT9K60R"]},{"id":"paid_delivery","status":"PASS","code":"PAID_AND_DELIVERED","blocking":true,"summary":"Downstream payment settled and target returned 200 with transaction RZR6XUIA3GTHW6ABAHUIXRDCNYYXIHQVQYGN2T5PAMDO37DDDOLQ.","evidence":["evd_C3YHMHPAX7S53BNXWHAG5H2MA4","evd_4J9CPWEE2MZGT9CFWNYY6WR4VR"]},{"id":"response_contract","status":"FAIL","code":"SCHEMA_MISMATCH","blocking":true,"summary":"Response body did not match the expected schema: must have required property 'receiptId'","evidence":["evd_C3YHMHPAX7S53BNXWHAG5H2MA4","evd_SM1RPAAJH2ZZNMTA11SJK431ZW"]},{"id":"discovery_contract","status":"INCONCLUSIVE","code":"CATALOG_UNAVAILABLE","blocking":true,"summary":"The Bazaar catalog could not be reached to cross-check this resource.","evidence":["evd_EJ2B9QAS9RHK6T58EW5ZZKNDMM"]},{"id":"retry_safety","status":"PASS","code":"PASS_REPLAY_REJECTED","blocking":true,"summary":"Replaying the identical signed payment header was rejected with status 402.","evidence":["evd_WVP86FB9SGXNYYK5FGVMD6V1RG"]}],"warnings":[],"inconclusiveReason":null,"money":{"seloInboundTxId":"SVGTX3U6XQLSGJP7L7X7KNPSDLWFBSA3JK7AFNHPWENIWP4YVIEQ","downstreamSpendUsdc":"0.01","downstreamTxIds":["RZR6XUIA3GTHW6ABAHUIXRDCNYYXIHQVQYGN2T5PAMDO37DDDOLQ"]},"reportUrl":"https://api.useselo.xyz/v1/reports/\u003creport token>","attestation":{"payload":{"schemaVersion":"selo.release.v1","issuer":"https://api.useselo.xyz","jobId":"job_189NZ481HFH77CRGF60AEF22RG","testedTarget":{"url":"https://demo.useselo.xyz/v1/orders","method":"POST"},"deployment":{"id":"broken-v1","verification":"asserted_by_client"},"testedAt":"2026-10-26T09:43:01.922Z","completedAt":"2026-10-26T09:43:09.258Z","seloVersion":"b769634","verdict":"FAIL","inconclusiveReason":null,"checks":[{"id":"handshake","status":"PASS","code":"HANDSHAKE_VALID","blocking":true,"evidence":["evd_Z9C3SD9CX9WNS38JFYYGT9K60R"]},{"id":"paid_delivery","status":"PASS","code":"PAID_AND_DELIVERED","blocking":true,"evidence":["evd_C3YHMHPAX7S53BNXWHAG5H2MA4","evd_4J9CPWEE2MZGT9CFWNYY6WR4VR"]},{"id":"response_contract","status":"FAIL","code":"SCHEMA_MISMATCH","blocking":true,"evidence":["evd_C3YHMHPAX7S53BNXWHAG5H2MA4","evd_SM1RPAAJH2ZZNMTA11SJK431ZW"]},{"id":"discovery_contract","status":"INCONCLUSIVE","code":"CATALOG_UNAVAILABLE","blocking":true,"evidence":["evd_EJ2B9QAS9RHK6T58EW5ZZKNDMM"]},{"id":"retry_safety","status":"PASS","code":"PASS_REPLAY_REJECTED","blocking":true,"evidence":["evd_WVP86FB9SGXNYYK5FGVMD6V1RG"]}],"expectedContractSha256":"6e5b149b1088d214be6a1c097e2e06bf1127fe529c544731023abea7b03e7170","targetChallengeSha256":"5efad9f413c7fd81a8b533887b9f28788322628ea7876796a6bd2b6a16c7fdcc","payments":{"network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","asset":"31566704","inboundTxId":"SVGTX3U6XQLSGJP7L7X7KNPSDLWFBSA3JK7AFNHPWENIWP4YVIEQ","inboundAmountUsdc":"1.00","downstream":[{"status":"SETTLED","amountUsdc":"0.01","txId":"RZR6XUIA3GTHW6ABAHUIXRDCNYYXIHQVQYGN2T5PAMDO37DDDOLQ"}]},"evidenceSha256":"c2a9b8746f89dd557865ad4bd6bc79e9fafdf891c3763eef246aa51fb8a52c83","evidence":[{"id":"evd_4J9CPWEE2MZGT9CFWNYY6WR4VR","kind":"downstream_payment","sha256":"cc6e48537139f26d0e3d2d4cadf666ce89ffc07a0c4830c116e38afb2945f458"},{"id":"evd_8HCAE38TGE111B2BXFEY0QMKRW","kind":"authorization_snapshot","sha256":"02baba31af9c657ac17906f6c6aee56f2a7c25905b42a7cf34f5463d0b08c95d"},{"id":"evd_C3YHMHPAX7S53BNXWHAG5H2MA4","kind":"paid_response","sha256":"e67b250cbb92954c1e098307b6709dbe474e25d9743344233414950f6187a6f7"},{"id":"evd_EJ2B9QAS9RHK6T58EW5ZZKNDMM","kind":"catalog_record","sha256":"77ae5d181bdd2002b067f10f2aae0fc5b0562b39ed1036770fc9c982b37d4b2f"},{"id":"evd_MC9R0VM5PTZDZJ62NQNFDBE8CW","kind":"authorization_snapshot","sha256":"f277c070af27ed5c8642b95d9c354e70613ad12fbb9f4426656c66f4fb36bcb7"},{"id":"evd_SM1RPAAJH2ZZNMTA11SJK431ZW","kind":"response_contract","sha256":"5df97c8b2371600b267d2cc3600ea49964a64e0145f9a3bda4ffb36b5750b89c"},{"id":"evd_WVP86FB9SGXNYYK5FGVMD6V1RG","kind":"replay_response","sha256":"f1ff2bceb92be880f056ca6225fecd177ceee10560d8a74762615defeb00ff22"},{"id":"evd_Z9C3SD9CX9WNS38JFYYGT9K60R","kind":"target_challenge","sha256":"5efad9f413c7fd81a8b533887b9f28788322628ea7876796a6bd2b6a16c7fdcc"}]},"signature":{"algorithm":"Ed25519","keyId":"selo-ed25519-728fcf85650b128f","value":"R78F8R3mz7TntBJwiKb7M6Lq4BmBmOYJEWKFRrOqjDqwFCOTrr-11n2d4VHrGqTYMq-HcXd2X0skuR4uyaDpBg"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"e32ca4dd-a536-4119-8bdf-23a576117f92":{"description":"The body, the `Idempotency-Key` header or the `expected` contract is invalid.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"VALIDATION_FAILED":{"title":"VALIDATION_FAILED","value":{"error":"VALIDATION_FAILED","message":"✖ Invalid input: expected \"quick\"\n → at profile"}},"IDEMPOTENCY_KEY":{"title":"IDEMPOTENCY_KEY","value":{"error":"VALIDATION_FAILED","message":"Idempotency-Key must be 8-128 characters of A-Z, a-z, 0-9, _ or -"}},"CONTRACT":{"title":"CONTRACT","value":{"error":"VALIDATION_FAILED","message":"expected: status must be an integer between 100 and 599, received 700"}}},"exampleType":"examples"}},"exampleType":"examples"},"d8d9c3d7-d49d-48f4-807a-51173747fd17":{"description":"Payment required. Returned when no `PAYMENT-SIGNATURE` was sent, when the payment was refused at verification, or when settlement definitely failed. The body is an empty JSON object.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON x402 v2 challenge. Present when Selo asks for payment: no payment was sent, or the payment was refused at verification, in which case `error` says why.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/X402PaymentRequired"}},"example":"\u003cbase64 JSON challenge>"},"PAYMENT-RESPONSE":{"description":"Base64-encoded JSON settlement result with `success: false`. Present instead of `PAYMENT-REQUIRED` when settlement definitely failed; nothing was charged and no job remains.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/X402SettleResponse"}}},"Cache-Control":{"description":"`no-store`.","schema":{"type":"string"},"example":"no-store"}},"content":{"application/json":{"schema":{"type":"object","maxProperties":0,"uniqueKey":"","typeLabel":"object"},"example":{},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"examples"}},"exampleType":"examples"},"56e81afc-4035-4dda-8e7e-5e91628c7839":{"description":"The preflight's authorization is no longer verified and unexpired.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"AUTHORIZATION_INVALID":{"title":"AUTHORIZATION_INVALID","value":{"error":"AUTHORIZATION_INVALID","message":"Authorization auth_… is not a verified, unexpired authorization for this target"}}},"exampleType":"examples"}},"exampleType":"examples"},"905ae931-05f2-4cbb-885a-b81ba4f0627e":{"description":"No preflight with this ID.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"PREFLIGHT_NOT_FOUND":{"title":"PREFLIGHT_NOT_FOUND","value":{"error":"PREFLIGHT_NOT_FOUND","message":"Preflight pfl_… does not exist"}}},"exampleType":"examples"}},"exampleType":"examples"},"ab677aef-b003-4a43-b5ea-84b85c07024b":{"description":"The preflight expired, or the request matched a job that is still running or finished without a report.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Error body for a paid request that already created a job.","required":["error","message","jobId"],"properties":{"error":{"type":"string","description":"Error code.","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"jobId":{"type":"string","description":"The job this request created or matched, `job_` plus 26 characters.","isRequired":true,"uniqueKey":"oneOf.1.jobId","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"The matched job finished without a report. Start a new preflight to retest.","required":["error","message","jobId","status","inconclusiveReason"],"properties":{"error":{"type":"string","const":"JOB_TERMINAL","isRequired":true,"uniqueKey":"oneOf.2.error","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.message","typeLabel":"string"},"jobId":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.jobId","typeLabel":"string"},"status":{"type":"string","enum":["READY","INBOUND_SETTLED","QUEUED","RUNNING_PREFLIGHT_RECHECK","RUNNING","ANALYZING","PASS","FAIL","INCONCLUSIVE","REPORT_WRITTEN"],"description":"Internal state of a release job. A job whose report is available is `REPORT_WRITTEN`.","isRequired":true,"uniqueKey":"oneOf.2.status","typeLabel":"enum\u003cstring>"},"inconclusiveReason":{"oneOf":[{"type":"string","description":"Why a job ended INCONCLUSIVE. `null` on PASS and FAIL.","enum":["NETWORK_UNAVAILABLE","FACILITATOR_UNAVAILABLE","TARGET_TIMEOUT","BUDGET_EXHAUSTED","PAYMENT_UNRESOLVED","EVIDENCE_INCOMPLETE","AUTHORIZATION_LAPSED","INTERNAL_ERROR"],"isRequired":true,"uniqueKey":"oneOf.2.inconclusiveReason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.2.inconclusiveReason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.2.inconclusiveReason","typeLabel":"enum\u003cstring> | null"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"PREFLIGHT_EXPIRED":{"title":"PREFLIGHT_EXPIRED","value":{"error":"PREFLIGHT_EXPIRED","message":"Preflight pfl_… has expired; run a new preflight"}},"JOB_IN_PROGRESS":{"title":"JOB_IN_PROGRESS","value":{"error":"JOB_IN_PROGRESS","message":"A release test for this request is already running; retry to fetch its result","jobId":"job_…"}},"JOB_IN_PROGRESS_CLAIM":{"title":"JOB_IN_PROGRESS_CLAIM","value":{"error":"JOB_IN_PROGRESS","message":"A request with the same idempotency key is being resolved; retry shortly"}},"JOB_TERMINAL":{"title":"JOB_TERMINAL","value":{"error":"JOB_TERMINAL","message":"This release test already finished without a report; start a new preflight to retest","jobId":"job_…","status":"INCONCLUSIVE","inconclusiveReason":"INTERNAL_ERROR"}}},"exampleType":"examples"}},"exampleType":"examples"},"4b7aee85-3e52-4ace-8053-682da84c08b1":{"description":"The request body is larger than 64 KiB (65536 bytes).","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"PAYLOAD_TOO_LARGE":{"title":"PAYLOAD_TOO_LARGE","value":{"error":"PAYLOAD_TOO_LARGE","message":"Request body exceeds 65536 bytes"}}},"exampleType":"examples"}},"exampleType":"examples"},"dff69096-804e-4303-ac8f-066c00dc234f":{"description":"The preflight is not eligible, or the target's price is above the per-job spend limit.","content":{"application/json":{"schema":{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"PREFLIGHT_INELIGIBLE":{"title":"PREFLIGHT_INELIGIBLE","value":{"error":"PREFLIGHT_INELIGIBLE","message":"Preflight pfl_… is not eligible (NO_PAYMENT_CHALLENGE)"}},"PRICE_OVER_BUDGET":{"title":"PRICE_OVER_BUDGET","value":{"error":"PRICE_OVER_BUDGET","message":"The target price exceeds the per-job downstream spend limit"}}},"exampleType":"examples"}},"exampleType":"examples"},"58462be2-b008-493a-8fe1-0cf63f4ce0cf":{"description":"Selo failed after your payment settled (`jobId` present, job flagged for reconciliation or recorded as INCONCLUSIVE), or failed before charging (no `jobId`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Error body for a paid request that already created a job.","required":["error","message","jobId"],"properties":{"error":{"type":"string","description":"Error code.","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"},"jobId":{"type":"string","description":"The job this request created or matched, `job_` plus 26 characters.","isRequired":true,"uniqueKey":"oneOf.0.jobId","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"INBOUND_RECORD_FAILED":{"title":"INBOUND_RECORD_FAILED","value":{"error":"INBOUND_RECORD_FAILED","message":"Your payment settled but Selo could not record it; the job will not run and is flagged for reconciliation","jobId":"job_…"}},"INTERNAL_AFTER_SETTLEMENT":{"title":"INTERNAL_AFTER_SETTLEMENT","value":{"error":"INTERNAL","message":"Selo failed after settling your payment; the job is recorded as INCONCLUSIVE","jobId":"job_…"}},"INTERNAL":{"title":"INTERNAL","value":{"error":"INTERNAL","message":"Internal server error"}}},"exampleType":"examples"}},"exampleType":"examples"},"361e215a-9982-4cca-919c-67053fa64314":{"description":"The facilitator could not verify the payment (nothing charged), or did not confirm the settlement outcome (job held; do not pay again).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Error body returned by every failing request.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code, for example `VALIDATION_FAILED`.","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. Do not parse it.","isRequired":true,"uniqueKey":"oneOf.0.message","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The facilitator did not confirm the outcome of your payment. The job is held for reconciliation and does not run. Do not pay again for this request.","required":["error","message","jobId","txId"],"properties":{"error":{"type":"string","const":"INBOUND_SETTLEMENT_UNRESOLVED","isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.message","typeLabel":"string"},"jobId":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.jobId","typeLabel":"string"},"txId":{"oneOf":[{"type":"string","description":"Settlement transaction ID if the facilitator reported one, otherwise `null`.","isRequired":true,"uniqueKey":"oneOf.1.txId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Settlement transaction ID if the facilitator reported one, otherwise `null`.","isRequired":true,"uniqueKey":"oneOf.1.txId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.txId","typeLabel":"string | null"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"FACILITATOR_UNAVAILABLE":{"title":"FACILITATOR_UNAVAILABLE","value":{"error":"FACILITATOR_UNAVAILABLE","message":"The payment facilitator could not verify the payment; nothing was charged"}},"INBOUND_SETTLEMENT_UNRESOLVED":{"title":"INBOUND_SETTLEMENT_UNRESOLVED","value":{"error":"INBOUND_SETTLEMENT_UNRESOLVED","message":"The facilitator did not confirm the outcome of your payment; the job is held for reconciliation and will not run. Do not pay again for this request.","jobId":"job_…","txId":null}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{},"servers":{"fbe7f743-573d-4126-9bae-6b7b65ed90a1":{"url":"https://api.useselo.xyz","description":"Production, Algorand Mainnet"}}},"originalFileLocation":"openapi.json"},"subdomain":"selo","siteName":"Selo","title":"Run a release test - Selo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T20:23:38.234Z","originalFileLocation":"api-reference/release-tests/run-a-release-test.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet. 1. Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge. 2. Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read. 3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header. Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job\u0026#x27;s result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Selo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Run a release test - Selo\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet. 1. Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge. 2. Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read. 3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header. Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job\u0026#x27;s result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Selo docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://selo.mintlify.app/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=Run+a+release+test\u0026amp;description=Run+a+paid+release+test.+This+route+is+protected+by+x402+v2+and+costs+1.00+USDC+on+Algorand+Mainnet.%0A%0A1.+Send+the+request+without+payment.+Selo+validates+the+bo\u0026amp;theme=ae71d371ce055a9e660ed9fc\u0026amp;signature=d14920e7b5770d25f277f3a1a1e0188867fe2425d63e82ecac4ff344ccf75df6\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Run a release test - Selo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet. 1. Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge. 2. Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read. 3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header. Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job\u0026#x27;s result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://selo.mintlify.app/_mintlify/api/og/v2?division=Endpoints\u0026amp;title=Run+a+release+test\u0026amp;description=Run+a+paid+release+test.+This+route+is+protected+by+x402+v2+and+costs+1.00+USDC+on+Algorand+Mainnet.%0A%0A1.+Send+the+request+without+payment.+Selo+validates+the+bo\u0026amp;theme=ae71d371ce055a9e660ed9fc\u0026amp;signature=d14920e7b5770d25f277f3a1a1e0188867fe2425d63e82ecac4ff344ccf75df6\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/selo/YPlIrdVM6zaS6GtN/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Selo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#EA580C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/release-tests/run-a-release-test.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.useselo.xyz/#organization\",\"name\":\"Selo\",\"url\":\"https://docs.useselo.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/selo/uDDPP6e9J3oqq-so/logo/light.svg?fit=max\u0026auto=format\u0026n=uDDPP6e9J3oqq-so\u0026q=85\u0026s=34ba3a87bcb123757ba48be31d19069d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.useselo.xyz#website\",\"name\":\"Selo\",\"url\":\"https://docs.useselo.xyz\",\"publisher\":{\"@id\":\"https://docs.useselo.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test#webpage\",\"url\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test\",\"name\":\"Run a release test\",\"description\":\"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet. 1. Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge. 2. Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read. 3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header. Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job's result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\",\"dateModified\":\"2026-10-26T20:23:38.234Z\",\"isPartOf\":{\"@id\":\"https://docs.useselo.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.useselo.xyz/api-reference/authorizations/create-an-authorization\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run a release test\",\"item\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test#apireference\",\"headline\":\"Run a release test\",\"name\":\"Run a release test\",\"description\":\"Run a paid release test. This route is protected by x402 v2 and costs 1.00 USDC on Algorand Mainnet. 1. Send the request without payment. Selo validates the body and the preflight first, then answers 402 with a PAYMENT-REQUIRED header: base64 JSON offering one exact requirement of 1000000 atomic USDC (ASA 31566704) on algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=, tagged x402-global-challenge. 2. Sign that requirement with an x402 v2 client and send the same request again with the PAYMENT-SIGNATURE header (base64 JSON payment payload). The x402 v1 header X-PAYMENT is not read. 3. Selo verifies the payment with the facilitator, claims the job, settles, and records the settlement transaction on the job. Only then does it pay your endpoint and run the five checks. The response arrives when the job finishes (wall clock 60 seconds), with a PAYMENT-RESPONSE header. Send an Idempotency-Key. A repeat with the same preflightId and key returns the first job's result and never settles a second payment, even if it carries a newly signed payment. Without the header, Selo deduplicates on the signed payment itself.\",\"url\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useselo.xyz/api-reference/release-tests/run-a-release-test#webpage\"},\"dateModified\":\"2026-10-26T20:23:38.234Z\",\"publisher\":{\"@id\":\"https://docs.useselo.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.useselo.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Selo\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Selo","nav":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://useselo.xyz"},{"anchor":"GitHub","icon":"github","href":"https://github.com/Enoch208/selo"},{"anchor":"Pilot guide","icon":"flag-checkered","href":"https://github.com/Enoch208/selo/blob/main/docs/PILOT_GUIDE.md"}]},"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"CLI reference","icon":"terminal","pages":[{"title":"CLI reference","href":"/cli/overview"}]},{"tab":"API reference","icon":"code","groups":[{"group":"Overview","pages":[{"title":"API overview","icon":"code","sidebarTitle":"Overview","href":"/api-reference/introduction"},{"title":"Errors and reason codes","icon":"triangle-exclamation","sidebarTitle":"Errors and reasons","href":"/api-reference/errors"},{"title":"Objects","icon":"brackets-curly","sidebarTitle":"Objects","href":"/api-reference/objects"}]},{"group":"Endpoints","pages":[{"title":"Create an authorization","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/authorizations","href":"/api-reference/authorizations/create-an-authorization"},{"title":"Verify an authorization","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/authorizations/{authorizationId}/verify","href":"/api-reference/authorizations/verify-an-authorization"},{"title":"Get an authorization","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/authorizations/{authorizationId}","href":"/api-reference/authorizations/get-an-authorization"},{"title":"Run a preflight","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/preflight","href":"/api-reference/preflight/run-a-preflight"},{"title":"Get a preflight","description":"Read a stored preflight, eligible or not, with status 200. The response is not re-evaluated: compare `expiresAt` with the current time before paying.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/preflight/{preflightId}","href":"/api-reference/preflight/get-a-preflight"},{"title":"Run a release test","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/release-test","href":"/api-reference/release-tests/run-a-release-test"},{"title":"Get a private report","description":"Read the full report of a finished release test. The token is the last path segment of `reportUrl`. The token is the only credential: anyone who has the link can read the report, so keep it out of logs and public CI output. Responses carry `noindex`, `no-store` and `no-referrer` headers.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reports/{token}","href":"/api-reference/reports/get-a-private-report"},{"title":"Get attestation keys","deprecated":null,"version":null,"openapi":"/openapi.json get /.well-known/selo-attestation-keys.json","href":"/api-reference/attestation-keys/get-attestation-keys"},{"title":"Get llms.txt","deprecated":null,"version":null,"openapi":"/openapi.json get /llms.txt","href":"/api-reference/discovery/get-llmstxt"},{"title":"Get the agent card","deprecated":null,"version":null,"openapi":"/openapi.json get /.well-known/agent-card.json","href":"/api-reference/discovery/get-the-agent-card"},{"title":"Check health","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/health/check-health"}]}]}]},"title":"Run a release test - Selo","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}