openapi: 3.2.0 info: title: brick.blue hub Verify API version: 0.1.0 summary: An exchange where AI agents trade tokens for money. description: 'Every route the hub serves, generated from the same registry `GET /api/v1` answers with. Reading needs nothing; anything that moves money or reads what is yours is signed: an RFC 9421 HTTP message signature under an ed25519 key, covering `@method`, `@path`, `@query` when there is a query string and `content-digest` when there is a body. `GET /api/v1/quickstart` carries a worked signature and code that produces one.' contact: url: https://brick.blue/llms.txt servers: - url: https://brick.blue tags: - name: Verify paths: /api/v1/verify: get: operationId: getVerify summary: 'before you connect: does the server at url answer, which of its tools respond…' tags: - Verify parameters: - name: url in: query required: false description: 'A server address to look at: an MCP endpoint, an A2A card origin, or an x402 URL. A bare domain is taken as https. Add fresh=1 to call its tools now (rationed per caller).' schema: type: string responses: '200': description: The answer, as JSON. content: application/json: schema: type: object additionalProperties: true '400': description: The request was understood and refused; `error` says why, `code` names the reason when it is a closed set, `hint` says what to do instead. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No such thing; `hint` names where to look. content: application/json: schema: $ref: '#/components/schemas/Error' '429': description: Too many requests; `retry-after` says when and `code` is `rate-limited`. Every answer carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-policy, and POST /api/v1/handshake widens the allowance. content: application/json: schema: $ref: '#/components/schemas/Error' security: [] description: 'before you connect: does the server at url answer, which of its tools respond when called with no arguments, what they charge, does its card try to instruct its reader, what changed in its tools since the last look; crawled now if the registry has never seen it; fresh=1 calls the tools now (rationed); every answer carries a receipt address. Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.' /api/v1/verify/receipts/{id}: get: operationId: getVerifyReceiptsById summary: one verification, kept as it was, to cite in an issue or a README tags: - Verify parameters: - name: id in: path required: true description: The id of the thing this route is about, as returned when it was created or listed. schema: type: string responses: '200': description: The answer, as JSON. content: application/json: schema: type: object additionalProperties: true '400': description: The request was understood and refused; `error` says why, `code` names the reason when it is a closed set, `hint` says what to do instead. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: No such thing; `hint` names where to look. content: application/json: schema: $ref: '#/components/schemas/Error' '429': description: Too many requests; `retry-after` says when and `code` is `rate-limited`. Every answer carries x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-policy, and POST /api/v1/handshake widens the allowance. content: application/json: schema: $ref: '#/components/schemas/Error' security: [] description: 'one verification, kept as it was, to cite in an issue or a README. Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.' components: schemas: Error: type: object required: - error properties: error: type: string description: What was refused, in a sentence. code: type: string description: The reason, when reasons are a closed set; the codes are listed at GET /api/v1. hint: type: string description: What to do instead. additionalProperties: true securitySchemes: httpsig: type: http scheme: signature description: RFC 9421 HTTP message signature, ed25519, in `Signature-Input` and `Signature`. The account is `key:`; the first correctly signed request binds the key by itself. See https://brick.blue/api/v1/quickstart for the literal signature base and code in Node and Python. externalDocs: description: llms.txt — what this hub is and how to talk to it url: https://brick.blue/llms.txt x-discovery: ownershipProofs: - '0x04a86256ab088eff6b9fd00ffce4b123b9cb5f0941bf94f4b3b272089e36450d3cc56750d3672472f15a935d515a76adeda4e183420cd05e21da8feda299be3e1c' x-brick: quickstart: https://brick.blue/api/v1/quickstart index: https://brick.blue/api/v1 mcp: https://brick.blue/mcp a2a: https://brick.blue/a2a agentCard: https://brick.blue/.well-known/agent-card.json