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

# Checkout

> Crea links de pago reutilizables, incrústalos en tu web y cobra a cualquier agente que llegue.

# Checkout

El lado comercio de Payzor es **una sola pieza**: links de pago reutilizables.
Creas un link con un monto y una descripción, lo incrustas en tu web (iframe o
redirección), y **cada agente que llega paga su propio cargo**. El link acumula
métricas —visitas, pagos, monto recaudado— para que veas de un vistazo cómo
rinde cada uno.

## Crear un link de pago

```bash theme={null}
POST /merchant/checkout
Authorization: Bearer sk_mch_...
Content-Type: application/json

{ "amountUsdCents": 2500, "description": "Pro plan (monthly)", "externalId": "INV-2026-001" }
```

<ParamField body="amountUsdCents" type="integer" required>
  Monto a cobrar en centavos de USD, `> 0`.
</ParamField>

<ParamField body="description" type="string" required>
  Qué está pagando el agente. Se muestra en la página de checkout.
</ParamField>

<ParamField body="externalId" type="string">
  Tu propia referencia (id de factura, id de orden).
</ParamField>

```json theme={null}
// 201 Created
{
  "checkoutLinkId": "cl_ef7a0f919147edda",
  "checkoutToken": "9NtWVVCYM8vQtKcJ",
  "checkoutUrl": "/checkout/9NtWVVCYM8vQtKcJ",
  "amountMinor": 2500,
  "currency": "USD",
  "description": "Pro plan (monthly)",
  "visits": 0,
  "paymentsCount": 0,
  "totalPaidMinor": 0
}
```

Incrusta `checkoutUrl` (o la URL completa contra tu origen) en tu web:

```html theme={null}
<iframe src="https://payzor.example/checkout/9NtWVVCYM8vQtKcJ" width="400" height="560" frameBorder="0"></iframe>
```

## Listar tus links (con estadísticas)

Cada link con su estado y sus métricas: visitas, pagos y monto recaudado.

```bash theme={null}
GET /merchant/checkout-links?limit=50
Authorization: Bearer sk_mch_...
```

```json theme={null}
{
  "links": [
    {
      "checkoutLinkId": "cl_ef7a0f919147edda",
      "checkoutToken": "9NtWVVCYM8vQtKcJ",
      "checkoutUrl": "/checkout/9NtWVVCYM8vQtKcJ",
      "amountMinor": 2500,
      "currency": "USD",
      "description": "Pro plan (monthly)",
      "visits": 3,
      "paymentsCount": 2,
      "totalPaidMinor": 5000,
      "active": true,
      "createdAt": "2026-08-23T10:00:00.000Z"
    }
  ],
  "total": 1
}
```

### Habilitar o deshabilitar un link

```bash theme={null}
PATCH /merchant/checkout-links/:token
Authorization: Bearer sk_mch_...
Content-Type: application/json

{ "active": false }
```

Deshabilitarlo lo retira del cobro sin borrar su historial.

## Vista pública (sin auth)

Lo que ve el agente antes de pagar. Cada visita incrementa el contador.

```bash theme={null}
GET /checkout/:token
```

```json theme={null}
{
  "checkoutLinkId": "cl_ef7a0f919147edda",
  "amountMinor": 2500,
  "currency": "USD",
  "description": "Pro plan (monthly)",
  "merchantName": "Acme Digital Goods",
  "active": true,
  "status": "active",
  "visits": 4,
  "paymentsCount": 2,
  "totalPaidMinor": 5000
}
```

## Pagar con una wallet

Un agente que lleva una clave `pz_sk_` liquida el cargo desde su wallet, sujeto
a su política. Cada llamada materializa un cargo nuevo contra el link, así que
**un mismo link lo pueden pagar muchos agentes**.

```bash theme={null}
POST /checkout/:token/pay
Authorization: Bearer pz_sk_...
```

```json theme={null}
// 200 OK
{ "paid": true, "charge": { "chargeId": "chg_...", "status": "paid", "method": "ledger", "reference": "PAY_..." } }
```

```json theme={null}
// 402 — supera el umbral de aprobación humana del agente
{ "pendingApproval": true, "reason": "Monto $1.50 supera umbral de aprobación humana", "approvalId": "apr_..." }
```

## Pagar on-chain (x402)

Cualquier agente, sin wallet y sin cuenta en Payzor. El `GET` devuelve `402` con
los requisitos; un reintento firmado con `X-PAYMENT` lo liquida.

```bash theme={null}
curl -X GET  http://localhost:3040/checkout/:token/x402
# 402 + requisitos; después:
curl -X POST http://localhost:3040/checkout/:token/x402 \
  -H "X-PAYMENT: $(construye tu cabecera de pago firmada)"
```

<Tip>
  Los montos van en centavos de USD en toda la API de comercio. La maquinaria de
  pago convierte a dólares antes del motor de políticas, así que un link de
  $25.00 se evalúa contra la política del agente como $25.00, no como 2500.
</Tip>

## Errores

| Status | Significado                    |
| ------ | ------------------------------ |
| `404`  | Token de checkout desconocido. |
| `409`  | El link está deshabilitado.    |
