CryptoPay
Obtener claves de API

Guías

Facturas

Una factura es una solicitud de pago de un precio en fiat que se paga en cripto, con su propia página de pago y su ciclo de vida.

Ciclo de vida

newpendingconfirmingpaid
pendingpartialconfirmingpaid / overpaid
new / pendingexpired / cancelled
  • newCreada; el pagador aún no eligió moneda (crypto es null).
  • pendingMoneda fijada: la dirección, el importe exacto y la tasa quedan fijos hasta expires_at.
  • partialLlegó menos del importe. El pagador puede enviar el resto antes de que caduque.
  • confirmingLlegó el importe completo y espera las confirmaciones necesarias.
  • paidPagada y confirmada. Completa el pedido.
  • overpaidPagada con más de lo pedido. También es final: completa el pedido y devuelve la diferencia si quieres.
  • expiredSe acabó el tiempo sin el importe completo. Los pagos tardíos se siguen detectando durante un periodo de gracia.
  • cancelledCancelada por ti (API o panel) o por el pagador antes de pagar.
Considera correctas paid y overpaid. Para decidir que un pedido está pagado usa los webhooks (o GET /invoices/{id}), nunca la redirección a success_url.

Fija la moneda desde tu servidor

Si ya sabes cómo pagará el cliente, envía asset. La respuesta incluye crypto.address, crypto.amount y una crypto.uri de pago, para que muestres tu propia pantalla de pago. GET /currencies lista los activos que tu workspace puede recibir.

curl -X POST 'https://cryptopay.yanselmask.com/api/v1/invoices' \
  -H 'Authorization: Bearer cp_test_••••' \
  -H 'Idempotency-Key: 6f1c2a0e-order-1001' \
  -H 'Content-Type: application/json' \
  -d '{
  "amount": "49.90",
  "currency": "EUR",
  "asset": "usdt_tron",
  "order_id": "SO-1002",
  "metadata": {
    "customer_id": "c_381"
  }
}'

Importes

Los importes fiat son objetos como { "value": "49.90", "currency": "EUR", "minor": 4990 }. Los importes cripto llegan como strings decimales más amount_base_units (satoshis, wei…) como string entero: nunca los conviertas a números de coma flotante.

invoice.crypto
{
  "asset": "usdt_tron",
  "network": "tron",
  "symbol": "USDT",
  "amount": "53.47",
  "amount_base_units": "53470000",
  "decimals": 6,
  "address": "TJYeasTPa6gpEEfYqeoTBpFkqZ4jhy5zj7",
  "required_confirmations": 19
}

Listados y paginación

Los listados devuelven lo más reciente primero con limit (1–100, por defecto 20). Cuando meta.has_more es true, envía meta.next_cursor como cursor para obtener la página siguiente. Filtra las facturas por status, order_id, created_after y created_before.

cURL
curl 'https://cryptopay.yanselmask.com/api/v1/invoices?status=paid&limit=50' \
  -H 'Authorization: Bearer cp_test_••••'