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

# AlgoVoi Pay

> AlgoVoi Pay (pay.algovoi.co.uk) is a tenant-free, cross-protocol payment rail that charges USDC per call and returns an offline-verifiable signed receipt on every response.

## What is AlgoVoi Pay

[AlgoVoi Pay](https://pay.algovoi.co.uk) is a **tenant-free** payment rail: a
metered service that charges a small amount of USDC per call and returns an
**offline-verifiable Ed25519 receipt** on every response. There is no account,
no API key, and no tenant record. **Payment is the only credential.**

It speaks the open agent-payment standards, so an autonomous agent can discover
it, pay it, and cryptographically verify what it paid for, with no prior
relationship.

<Note>
  Two doors, on purpose. **`api.algovoi.co.uk`** is trust through governance
  (tenants, keys, KYB). **`pay.algovoi.co.uk`** is trust through proof: an
  anonymous request, a payment, and a receipt anyone can verify offline. This page
  is the second door.
</Note>

## Surfaces

<CardGroup cols={2}>
  <Card title="x402 REST" icon="credit-card">
    `/pay/v1/…` — HTTP 402 challenge, pay, signed receipt. See [x402](/protocols/x402).
  </Card>

  <Card title="A2A (JSON-RPC)" icon="robot">
    `/a2a` — A2A `message/send` + `tasks/get`, with the `a2a-x402` payment-required task state. See [A2A](/protocols/a2a).
  </Card>

  <Card title="Discovery" icon="magnifying-glass">
    `/.well-known/agent-card.json`, `/.well-known/x402`, `/discovery/resources`, `/pay/v1/index`, `/openapi.json`.
  </Card>

  <Card title="Identity" icon="fingerprint">
    `/.well-known/did.json` (`did:web:pay.algovoi.co.uk`) and `/.well-known/jwks.json` — the receipt-signing key, for offline verification.
  </Card>
</CardGroup>

## Supported lanes

Each lane settles in native USDC and binds the on-chain payment to the exact
server-issued challenge (see [The request-weld](#the-request-weld)).

| Chain                        | Asset                 | Binding mechanism                                              |
| ---------------------------- | --------------------- | -------------------------------------------------------------- |
| [Algorand](/chains/algorand) | USDC (ASA `31566704`) | transaction **note** carries the challenge token               |
| [Base](/chains/base)         | USDC (`0x8335…2913`)  | EIP-3009 authorization **nonce == keccak256(challenge token)** |
| [Solana](/chains/solana)     | USDC (`EPjFW…Dt1v`)   | server-derived **reference** account included in the transfer  |

<Note>
  The authoritative, current price for each service is always the
  `maxAmountRequired` in that service's live 402 challenge. For example, receipt
  verification is \$0.01 USDC per call.
</Note>

## How a paid call works

<Steps>
  <Step title="Ask, and receive a 402">
    Call the endpoint with no payment. You get an HTTP **402** whose body is a strict
    x402 v2 `accepts[]` — one entry per supported lane — each carrying `payTo`, the
    price, and a **challenge token** (`extra.payment_reference`) with a short TTL.
  </Step>

  <Step title="Pay on-chain, welded to the challenge">
    Send the USDC payment on your chosen lane, binding it to that exact challenge
    token using the lane's mechanism above. This weld is **mandatory** and
    fail-closed: a payment not welded to a live challenge is not redeemable.
  </Step>

  <Step title="Present the payment">
    Re-call the endpoint with an `X-PAYMENT` header (base64 JSON). For the mined-tx
    lanes (Algorand, Solana): `{tx_id, payment_reference}`. For Base:
    `{authorization, signature, challenge_token}`.
  </Step>

  <Step title="Get a signed receipt">
    The rail verifies the payment on-chain, runs the service, and returns **200**
    with an Ed25519 **payable receipt** (JWS) binding the request hash, the response
    hash, and the settled payment reference.
  </Step>

  <Step title="Verify offline, later, by anyone">
    Verify the receipt against the rail's published key — resolved via
    `did:web:pay.algovoi.co.uk` or `/.well-known/jwks.json` — with no callback to the
    rail. See [Agentic Payment Receipts](/agentic-payment-receipts) and the open
    [receipt verifier](/receipt-verifier).
  </Step>
</Steps>

## The request-weld

The property that makes an anonymous, metered rail safe is that **every payment
is cryptographically bound to the specific request it pays for**:

* **Algorand** — the challenge token is the transaction note.
* **Base** — the EIP-3009 nonce equals `keccak256(challenge_token)`.
* **Solana** — a server-derived reference pubkey must appear in the transfer's
  accounts.

Because the weld is mandatory and fail-closed on every lane, a captured
`X-PAYMENT` cannot be replayed against a different request, and a stray inbound
transfer cannot be redeemed as a free call.

<Warning>
  A consequence: stock x402 clients can **discover** the rail (the 402 and the
  discovery documents are spec-conformant) but cannot **pay** it, because they do
  not produce the mandatory weld. Paying requires a client that welds the payment
  to the challenge (the AlgoVoi SDK does this for you).
</Warning>

## Services

<CardGroup cols={3}>
  <Card title="Receipt verify" icon="receipt">
    Verify a signed receipt / JWS and get a countersigned payable receipt.
  </Card>

  <Card title="RFC 9421 verify" icon="signature">
    Verify an HTTP Message Signature (RFC 9421) with a receipt.
  </Card>

  <Card title="Compliance receipt" icon="shield-check">
    A categorical ALLOW / REFER / DENY compliance receipt.
  </Card>
</CardGroup>

## Discovery

Point any x402- or A2A-aware agent at the origin and it self-configures:

* **Agent card** — `GET /.well-known/agent-card.json` (`preferredTransport: JSONRPC`, endpoint `/a2a`).
* **x402 catalog** — `GET /.well-known/x402` and `GET /discovery/resources`.
* **OpenAPI** — `GET /openapi.json` (carries `x-payment-info` and a `402` per paid operation).
* **Index** — `GET /pay/v1/index`.
* **Identity** — `GET /.well-known/did.json` and `GET /.well-known/jwks.json`.
