> ## Documentation Index
> Fetch the complete documentation index at: https://docs.useselo.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Get attestation keys

> Public Ed25519 keys that verify the `attestation` on release test responses. Match `signature.keyId` to a key, then verify the signature over the canonical JSON of `payload`. Cacheable for 5 minutes.



## OpenAPI

````yaml /openapi.json get /.well-known/selo-attestation-keys.json
openapi: 3.1.0
info:
  title: Selo API
  version: 1.0.0
  summary: CI for x402. It pays your endpoint before your users do.
  description: >-
    Selo is a release gate for paid x402 APIs on Algorand. You authorize your
    endpoint, run a free preflight, then pay Selo 1.00 USDC over x402. Only
    after that payment settles does Selo pay your endpoint as a real x402
    client, run five release checks and return a deterministic PASS, FAIL or
    INCONCLUSIVE verdict with an Ed25519-signed attestation.


    There are no API keys. Access to a target is granted per target by
    authorization; the only paid route is `POST /v1/release-test`, paid with
    x402. Bodies are JSON, at most 64 KiB.
  contact:
    name: Selo
    url: https://useselo.xyz
servers:
  - url: https://api.useselo.xyz
    description: Production, Algorand Mainnet
security: []
tags:
  - name: Authorizations
    description: Prove you control the target before Selo sends it anything.
  - name: Preflight
    description: Check for free that a target can be tested and is within budget.
  - name: Release tests
    description: The paid x402 route that runs the release checks.
  - name: Reports
    description: Private, token-addressed reports of finished release tests.
  - name: Attestation keys
    description: Public keys that verify signed verdicts.
  - name: Discovery
    description: Machine-readable descriptions of Selo.
  - name: Health
    description: Liveness.
paths:
  /.well-known/selo-attestation-keys.json:
    get:
      tags:
        - Attestation keys
      summary: Get attestation keys
      description: >-
        Public Ed25519 keys that verify the `attestation` on release test
        responses. Match `signature.keyId` to a key, then verify the signature
        over the canonical JSON of `payload`. Cacheable for 5 minutes.
      operationId: getAttestationKeys
      responses:
        '200':
          description: The key set.
          headers:
            Cache-Control:
              description: '`public, max-age=300`.'
              schema:
                type: string
              example: public, max-age=300
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AttestationKeySet'
              example:
                keys:
                  - keyId: selo-ed25519-728fcf85650b128f
                    algorithm: Ed25519
                    publicKey: IiUpeUTzfsbOg5-hV6i3eLnqU4uJ7hog31HmgXoc0ZQ
components:
  schemas:
    AttestationKeySet:
      type: object
      required:
        - keys
      properties:
        keys:
          type: array
          items:
            $ref: '#/components/schemas/AttestationKey'
          description: Empty when the deployment has no signing key.
    AttestationKey:
      type: object
      required:
        - keyId
        - algorithm
        - publicKey
      properties:
        keyId:
          type: string
          pattern: ^selo-ed25519-[0-9a-f]{16}$
          description: >-
            `selo-ed25519-` plus the first 16 hex characters of the SHA-256 of
            the raw public key.
        algorithm:
          type: string
          const: Ed25519
        publicKey:
          type: string
          pattern: ^[A-Za-z0-9_-]{43}$
          description: Raw 32-byte Ed25519 public key, base64url (the JWK `x` value).

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.