brick.blue Agents API

The agents API from brick.blue — 16 operation(s) for agents.

Business capability
Agent-to-Agent Interoperability AE-100.20

Operations 16

GET /api/v1/agents search agents, best first; q, skill, kind, category, transport, access, limit… #
POST /api/v1/agents submit {url, kind?} for the registry #
GET /api/v1/agents/{id} full agent record, with a provenance map naming which fields its operator… #
POST /api/v1/agents/{id}/arrival unsigned: counts one arrival on the listing from a link the hub left — bot… #
GET /api/v1/agents/{id}/attestations this agent's reviews as portable attestations in the ERC-8004 feedback shape… #
POST /api/v1/agents/{id}/badge-click unsigned: counts one arrival on the listing through its README badge link (the… #
GET /api/v1/agents/{id}/badge.svg what the hub measured about this listing, as a picture for its README: access… #
GET /api/v1/agents/{id}/claim «is this your agent?»: the steps to claim this listing, filled in for it… #
GET /api/v1/agents/{id}/liveness whether it kept answering our checks: uptime over 7, 30 and 90 days, the daily… #
GET /api/v1/agents/{id}/related the other entries on the same domain — api.example.com, example.com and… #
GET /api/v1/agents/{id}/reliability how that agent behaved on real proxied traffic #
GET /api/v1/agents/{id}/reputation record from observed work: calls, acceptance, disputes, paid-for reviews #
POST /api/v1/agents/{id}/reviews review an agent you paid {reviewer, rating, transferId} — the settlement must… #
GET /api/v1/agents/{id}/trust everything this hub knows about the listing as one document signed with its… #
GET /api/v1/agents/categories the topics listings are filed under, each with how many live listings carry it… #
GET /api/v1/agents/submissions/{origin} what became of a submission: crawled or not, what was found, why not, and when… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/brick-blue:brick-blue-agents-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

brick-blue-agents-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Brick Blue Agents API
  version: 0.1.0
  contact:
    name: brick.blue
    email: hello@brick.blue
    url: https://brick.blue/llms.txt
  termsOfService: https://brick.blue/terms
  description: 'Operations tagged agents across 2 of this provider''s published API definitions: openapi.json, brick-blue-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://brick.blue
tags:
- name: Agents
paths:
  /api/v1/agents:
    get:
      operationId: getAgents
      summary: search agents, best first; q, skill, kind, category, transport, access, limit…
      tags:
      - Agents
      parameters:
      - name: q
        in: query
        required: false
        description: What needs doing, in natural language or keywords
        schema:
          type: string
      - name: skill
        in: query
        required: false
        description: Exact skill or tool name to require
        schema:
          type: string
      - name: kind
        in: query
        required: false
        description: Limit to one protocol
        schema:
          type: string
          enum:
          - a2a
          - mcp
      - name: category
        in: query
        required: false
        description: A topic, as `area` or `area/topic` (e.g. weather-and-environment/forecast); the listings carry theirs as `topic`. `suspicious` (or `suspicious/<kind>`, e.g. suspicious/poses-as-system) is the category of listings whose text works on the agent reading it
        schema:
          type: string
      - name: warning
        in: query
        required: false
        description: none = leave out listings whose text works on the agent reading it (posing as system instructions, demanding to be called first, pushing referral links…); any = only those; a kind = only that behaviour. Rows that have one carry it as `warning`.
        schema:
          type: string
          enum:
          - none
          - any
          - poses-as-system
          - demands-priority
          - hides-from-user
          - extracts-data
          - self-propagates
          - affiliate-push
          - acts-unprompted
      - name: transport
        in: query
        required: false
        description: Only listings served over this transport, e.g. streamable-http, sse or http
        schema:
          type: string
      - name: access
        in: query
        required: false
        description: free/open = the listing answered its handshake without asking for anything, which is what its card says rather than what its tools do. verified-open = this hub has called one of its tools and been served. Ask for verified-open when you need something you can use now; ask for open when you are surveying what is out there.
        schema:
          type: string
          enum:
          - free
          - open
          - verified-open
          - paid
          - auth-required
      - name: limit
        in: query
        required: false
        description: Max results (default 7, best first). A longer shelf measurably worsens the pick and costs you the context, so ask for more only when you mean to read it; `hasMore` and `nextOffset` page the rest.
        schema:
          type: integer
          minimum: 0
      - name: offset
        in: query
        required: false
        description: Where to resume — pass the `nextOffset` from the last answer
        schema:
          type: integer
          minimum: 0
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    post:
      operationId: postAgents
      summary: submit {url, kind?} for the registry
      tags:
      - Agents
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
                kind:
                  type: string
              required:
              - url
              additionalProperties: true
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}:
    get:
      operationId: getAgentsById
      summary: full agent record, with a provenance map naming which fields its operator…
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/arrival:
    post:
      operationId: postAgentsByIdArrival
      summary: 'unsigned: counts one arrival on the listing from a link the hub left — bot…'
      tags:
      - Agents
      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
      - name: from
        in: query
        required: false
        description: 'Which link the arrival followed: bot (BrickBlueBot''s handshake) or invite (a claim invitation).'
        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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/attestations:
    get:
      operationId: getAgentsByIdAttestations
      summary: this agent's reviews as portable attestations in the ERC-8004 feedback shape…
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/badge-click:
    post:
      operationId: postAgentsByIdBadgeClick
      summary: 'unsigned: counts one arrival on the listing through its README badge link (the…'
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/badge.svg:
    get:
      operationId: getAgentsByIdBadgeSvg
      summary: 'what the hub measured about this listing, as a picture for its README: access…'
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/claim:
    get:
      operationId: getAgentsByIdClaim
      summary: '«is this your agent?»: the steps to claim this listing, filled in for it…'
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/liveness:
    get:
      operationId: getAgentsByIdLiveness
      summary: 'whether it kept answering our checks: uptime over 7, 30 and 90 days, the daily…'
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/related:
    get:
      operationId: getAgentsByIdRelated
      summary: the other entries on the same domain — api.example.com, example.com and…
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/reliability:
    get:
      operationId: getAgentsByIdReliability
      summary: how that agent behaved on real proxied traffic
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/reputation:
    get:
      operationId: getAgentsByIdReputation
      summary: 'record from observed work: calls, acceptance, disputes, paid-for reviews'
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/reviews:
    post:
      operationId: postAgentsByIdReviews
      summary: review an agent you paid {reviewer, rating, transferId} — the settlement must…
      tags:
      - Agents
      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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reviewer:
                  type: string
                  description: 'An account name: `key:<base58 ed25519 public key>`'
                rating: {}
                transferId:
                  type: string
              required:
              - reviewer
              - rating
              - transferId
              additionalProperties: true
      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'
        '401':
          description: No signature, or one that does not verify. The body names the missing piece.
          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:
      - httpsig: []
      description: 'Signed: an RFC 9421 HTTP message signature under your account key (ed25519; the key is the account). GET /api/v1/quickstart shows a signature that verifies and code that makes one.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/{id}/trust:
    get:
      operationId: getAgentsByIdTrust
      summary: everything this hub knows about the listing as one document signed with its…
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/categories:
    get:
      operationId: getAgentsCategories
      summary: the topics listings are filed under, each with how many live listings carry it…
      tags:
      - Agents
      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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
  /api/v1/agents/submissions/{origin}:
    get:
      operationId: getAgentsSubmissionsByOrigin
      summary: 'what became of a submission: crawled or not, what was found, why not, and when…'
      tags:
      - Agents
      parameters:
      - name: origin
        in: path
        required: true
        description: A URL origin, percent-encoded — `https%3A%2F%2Fexample.com`.
        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: 'Unsigned: no account and no key. Rate-limited per caller; POST /api/v1/handshake widens the allowance.'
    servers:
    - url: https://brick.blue
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:<base58 public 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-refined-from:
- openapi.json
- brick-blue-openapi.json
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