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
newpendingconfirmingpaidpendingpartialconfirmingpaid / overpaidnew / pendingexpired / cancellednewCreada; 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.
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.
{
"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 'https://cryptopay.yanselmask.com/api/v1/invoices?status=paid&limit=50' \
-H 'Authorization: Bearer cp_test_••••'