Cómo funciona un pago
El flujo es el mismo en todos los modos. Solo cambian el destino del dinero y las herramientas alrededor.
checkout_url.provider — directamente el método elegido.currency y envía USDC (Polygon) a una dirección de un solo uso.paid. Con cuenta también recibe un webhook y un mensaje en Telegram.URL base para cada llamada a la API: https://api.utopay.app. Las solicitudes y respuestas son JSON (content-type: application/json). Los importes son números en la moneda del pedido; las horas, milisegundos Unix.
Inicio rápido
Un pago real en una sola solicitud — sin registro. El comprador va directo a PayPal; si PayPal no puede aceptar este pago, se abre nuestra página con los demás métodos.
curl -X POST https://api.utopay.app/v1/pay \ -H "content-type: application/json" \ -d '{ "amount": 100, "currency": "USD", "payout_wallet": "0xYourPolygonWalletAddress000000000000000000", "provider": "paypal", "success_url": "https://yoursite.com/thanks" }' # → { "id": "ord_…", "checkout_url": "https://api.utopay.app/pay/ord_…/go?provider=paypal", … }
Redirija al comprador a checkout_url. Tras el pago llegan unos 95.5 USDC a su wallet. Con cuenta llamaría en su lugar a POST /v1/payments con una clave API — mismos campos, más historial, webhooks y saldo.
Comparar modos
| Sin cuenta | Cuenta · Directo | Cuenta · Guardado | |
|---|---|---|---|
| Endpoint | POST /v1/pay | POST /v1/payments | |
| Autenticación | ninguna | Bearer utopay_sk_… | |
| Usted recibe | USDC (Polygon) en la wallet de la solicitud | USDC (Polygon) en la wallet del proyecto | Saldo en la moneda del pedido |
Enviar al comprador directo a un método (provider) | ✓ | ✓ | ✓ |
| Todas las monedas | ✓ | ✓ | ✓ |
| Panel e historial de pedidos | — | ✓ | ✓ |
| Webhooks / avisos en Telegram | — | ✓ | ✓ |
| Enlaces de pago desde el panel | — | ✓ | ✓ |
| Modo de prueba (sandbox) | — | ✓ | ✓ |
| Saldo, cambio, conversión, retiro | — | — | ✓ |
| Programa de referidos | — | ✓ | ✓ |
| Comisión | 4.5% | 4.5% | |
Sin cuenta
POST /v1/pay
Sin cabecera Authorization. El dinero siempre va directo a payout_wallet — una dirección EVM que pueda recibir USDC en Polygon. Mismo cuerpo que POST /v1/payments, más:
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
payout_wallet | string | ✓ | 0x + 40 caracteres hex. Adónde se envía su parte. |
- Siempre
direct:"settlement": "custody"devuelve400— sin cuenta no hay saldo que acreditar. - Comisión fija del 4.5%, sin programa de referidos, sin webhooks (
callback_urlse guarda pero no se llama), sin modo de prueba, diseño de pago estándar. - Seguimiento: consulte el endpoint público
GET /api/checkout/:id/status(sin clave) o vigile su wallet.
Cuenta y claves API
Una cuenta puede tener hasta 20 proyectos (uno por sitio). Cada uno tiene sus propias claves, webhooks, wallet, marca, modo de fondos y estadísticas; el saldo es común a toda la cuenta.
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
| Clave | Formato | Uso |
|---|---|---|
| Live secret | utopay_sk_live_… | Solo en el servidor. Crea pagos reales. |
| Test secret | utopay_sk_test_… | Pagos simulados, no se mueve dinero — Modo de prueba. |
| Publishable | utopay_pk_… | No puede crear pagos (403). Reservada para uso en el cliente. |
La clave se muestra una sola vez; solo guardamos su hash. Nunca ponga una clave secreta en código de navegador o móvil.
Crear un pago
POST /v1/payments Bearer sk
| Campo | Tipo | Oblig. | Notas |
|---|---|---|---|
amount | number | ✓ | > 0, en currency, redondeado a 2 decimales. Máximo 1 000 000. |
currency | string | — | Código ISO de la moneda en que paga el comprador, por defecto USD. No distingue mayúsculas. Vea Monedas. |
provider | string | — | Envía al comprador directo a este método de pago, sin pasar por nuestra página — p. ej. paypal, revolut, stripe. Si no está disponible, se abre nuestra página. Vea Enviar al comprador a un método. Alias: payment_option (tiene prioridad si se envían ambos). |
settlement | string | — | "direct" o "custody". Por defecto: el modo de fondos del proyecto. |
payment_methods | string | — | Qué ve el comprador en la página de pago: "both" (pestañas de tarjeta y wallets + criptomonedas), "cards" o "crypto". Por defecto: el ajuste del proyecto (Fondos y liquidaciones), si no "both". Con cripto el comprador elige red y moneda y paga el 1.5%; el pedido recibe paid_with: "crypto". Con direct las monedas van directo a sus wallets cripto; con custody se acreditan a su saldo en UTOPAY — no hacen falta wallets. |
email | string | — | Email del comprador (validado), se pasa al proveedor. |
description | string | — | Hasta 500 caracteres. Se muestra al comprador y se devuelve en los webhooks. |
success_url | string | — | URL http(s) absoluta: adónde el proveedor devuelve al comprador y adónde lleva el botón "Volver al sitio" tras el pago. |
cancel_url | string | — | URL http(s) absoluta que se pasa al proveedor para un pago cancelado. |
callback_url | string | — | URL http(s) absoluta. Cada evento de este pedido (payment.succeeded, failed, underpaid, expired) se envía allí por POST en formato webhook, firmado con x-utopay-signature, cuya clave HMAC es sha256(clave secreta) (hex) de la clave que creó el pedido. La usan los plugins para CMS. Solo pagos con clave API. |
curl -X POST https://api.utopay.app/v1/payments \ -H "Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx" \ -H "content-type: application/json" \ -d '{ "amount": 250, "currency": "EUR", "email": "[email protected]", "description": "Invoice #118", "provider": "revolut", "success_url": "https://yoursite.com/thanks" }'
{
"id": "ord_Kd83mQp0aVxY",
"status": "pending",
"amount": 250, "currency": "EUR",
"checkout_url": "https://api.utopay.app/pay/ord_Kd83mQp0aVxY/go?provider=revolut",
"payment_page_url": "https://api.utopay.app/pay/ord_Kd83mQp0aVxY",
"provider": "revolut",
"routing": { "mode": "direct_to_provider", "requested_provider": "revolut", "reason": null },
"settlement": "direct",
"payout_coin": "USDC", "payout_network": "polygon",
… full list in Order object
}
Redirija siempre al comprador a checkout_url. Guarde payment_page_url si quiere un enlace "elegir otro método" — siempre abre nuestra página.
Enviar al comprador directo a un método de pago
Funciona en todos los modos — con clave API, sin cuenta, en enlaces de pago del panel y en el formulario sin código de /payment-links. Indique provider y el comprador irá directamente a ese proveedor (p. ej. PayPal) sin ver nuestro formulario de pago.
400 con la lista de ids válidos. Conocido pero no disponible ahora (desconectado, importe por debajo de su mínimo, moneda incorrecta) → el pedido se crea igualmente y checkout_url apunta a nuestra página./pay/:id/go?provider=… vuelve a comprobar y redirige al comprador a la página de pago del propio proveedor.routing en la respuesta indica qué pasó: mode es direct_to_provider o payment_page; reason es null, provider_offline, provider_below_minimum, provider_currency, provider_disabled o project_routing (elegido entre los proveedores preferidos de su proyecto).
GET /v1/providers?amount=¤cy= público
Métodos disponibles ahora para este importe y moneda, con id, name, region, status, minimum_amount y minimum_currency. La lista cambia — consúltela en lugar de fijarla en el código.
provider | Método | Dónde funciona | Mínimo* |
|---|---|---|---|
stripe | Tarjeta, Apple Pay, Google Pay | US / EU | 2 USD |
paypal | PayPal | EE. UU. | 5 USD |
revolut | Revolut | EU / EEA | 6 EUR |
coinbase | Coinbase Pay | Global | 2 USD |
cashapp | Cash App | EE. UU. | 2 USD |
robinhood | Robinhood | EE. UU. | 5 USD |
klarna | Klarna (Pay Now) | Suecia | 125 SEK |
ideal | iDEAL | Países Bajos | 46 EUR |
banxa | Tarjeta, transferencia bancaria | Global | 11 USD |
transak | Tarjeta, transferencia bancaria, UPI | Global | 30 USD |
binance, blockchaincom, topper, meld, alchemypay, sardine, particle | Tarjeta vía socio | variable | 10–30 USD |
* Los mínimos y la disponibilidad dependen de la red de pagos y cambian; el importe se convierte a la moneda del mínimo antes de comparar. Algunos proveedores pueden pedir al comprador una verificación de identidad rápida y única.
Monedas y qué recibe
currency es la moneda en que paga el comprador. Sea cual sea, el proveedor convierte el dinero y se mueve como USDC en Polygon.
GET /v1/currencies público
Códigos aceptados en currency | Subsaldo propio (custody) |
|---|---|
USD EUR GBP CAD INR SEK | ✓ |
AUD NZD CHF NOK DKK PLN CZK HUF TRY UAH JPY SGD HKD AED MYR THB PHP IDR BRL MXN COP ZAR NGN | se acredita en USD |
Cualquier otro código devuelve 400. Un proveedor puede mostrar al comprador el precio convertido a su propia moneda (p. ej. Revolut en EUR) — el comprador paga igualmente el equivalente de su importe. Algunos métodos solo aceptan ciertas monedas; para ellos, /v1/providers?currency=… los omite.
Qué llega y adónde
| Modo | Usted recibe | Ejemplo: pedido de 100 EUR |
|---|---|---|
Sin cuenta (/v1/pay) | USDC en Polygon directo a payout_wallet, el 95.5% del USDC entregado por el proveedor | ≈ 100 EUR en USD × 0.955 ≈ 107 USDC (a 1 EUR ≈ 1.12 USD) |
| Cuenta · Directo | Igual — USDC en Polygon a la wallet del proyecto; el panel muestra el pedido en EUR | ≈ 107 USDC on-chain |
| Cuenta · Guardado en UTOPAY | Saldo interno en la moneda del pedido (importe × 95.5%) si tiene subsaldo propio; si no, en USD al tipo actual | 95.50 EUR en el saldo en EUR (un pedido de 100 BRL → ≈ 19 USD en el saldo en USD) |
El USDC exacto que llegó figura en received_amount del pedido tras el pago; puede diferir un poco de la estimación porque el tipo de cambio lo fija el proveedor. Los saldos guardados se pueden cambiar entre monedas y retirar en USDC, USDT, BTC, ETH y más — vea Guardado en UTOPAY.
Estado del pago
GET /v1/payments/:id Bearer sk
El pedido con la misma estructura. Mientras no esté en paid, también consultamos el estado real en el proveedor, así que el sondeo es fiable aunque un callback se retrase — el abono al saldo y su webhook ocurren exactamente una vez en cualquier caso. Solo es visible el proyecto de la propia clave (si no, 404).
GET /v1/payments?limit=&offset=&status= Bearer sk
Pedidos del proyecto, los más recientes primero. limit 1–500 (por defecto 50), status = pending | paid | failed.
GET /api/checkout/:id/status público
Sin clave: { "id", "status", "amount", "currency", "updated_at" }. Úselo para pedidos creados sin cuenta. No tome una visita a success_url como prueba de pago — compruebe el estado.
Pasarela cripto
El comprador paga directamente en cripto — USDT, USDC, ETH, BTC y más — a una dirección única del pedido. Todo lo que llega se reenvía on-chain a su wallet al instante — o, con settlement: "custody", se acredita a su saldo en UTOPAY (no hacen falta wallets). Comisión del 1.5%, descontada del importe recibido; la comisión de la blockchain va aparte.
GET /v1/crypto/coins público
Cada moneda/red con ticker (lo que pasa como coin, p. ej. polygon/usdc, bep20/usdt, erc20/usdt, base/usdc, eth, btc, trc20/usdt), network, family (tipo de dirección), minimum y available. Funcionan las redes EVM, Tron, Bitcoin, Solana, TON y otras; available: false significa que la red no está disponible temporalmente.
POST /v1/crypto/payments Bearer sk · POST /v1/crypto/pay sin cuenta
| Campo | Notas |
|---|---|
coin ✓ | Ticker de /v1/crypto/coins |
amount + currency | Precio en fiat (cualquiera de las monedas), convertido a la moneda cripto al tipo actual |
amount_coin | O el importe exacto en la moneda cripto (en lugar de amount) |
payout_address | Su wallet en esa red. Obligatoria para /v1/crypto/pay; con clave, por defecto se usan las wallets de la pasarela cripto del proyecto (para EVM — la wallet de liquidación). Se valida según la red. |
email, description, success_url, cancel_url | Como en Crear un pago |
curl -X POST https://api.utopay.app/v1/crypto/pay \ -H "content-type: application/json" \ -d '{ "coin": "bep20/usdt", "amount": 100, "currency": "USD", "payout_address": "0xYourWallet0000000000000000000000000000000" }' # → { "id": "ord_…", "kind": "crypto", "checkout_url": "https://api.utopay.app/pay/ord_…", # "crypto": { "coin": "bep20/usdt", "network": "BNB Smart Chain (BEP-20)", "symbol": "USDT", # "address": "0x…", "amount_coin": 100.02, "minimum": 1.66, "detected": false, "underpaid": false } }
- Redirija al comprador a
checkout_url(importe, red, dirección, QR, estado en vivo) — o muestrecrypto.addressycrypto.amount_coinen su propia página. - Estados:
pending(concrypto.detected: trueen cuanto se ve la transferencia, antes de las confirmaciones) →paid. Si llega menos de lo solicitado (falta más del 1%), el estado esunderpaidy el eventopayment.underpaid— el dinero ya está en su wallet, decida usted. - Los webhooks,
GET /v1/payments/:idy las claves de prueba funcionan igual que con pagos con tarjeta. Las transferencias por debajo deminimumo en otra moneda/red no se procesan — la página de pago avisa al comprador.
Ejemplos de integración
Cree el pedido en su servidor (nunca con una clave secreta en el navegador), redirija al comprador a checkout_url y marque el pedido como pagado desde el webhook. Guía paso a paso: aceptar cripto en un sitio web; redes y tickers de Tether: aceptar USDT.
const res = await fetch('https://api.utopay.app/v1/crypto/payments', { method: 'POST', headers: { authorization: `Bearer ${process.env.UTOPAY_SK}`, 'content-type': 'application/json' }, body: JSON.stringify({ coin: 'bep20/usdt', amount: 49.9, currency: 'EUR', description: 'Order #1042', success_url: 'https://shop.example/thanks', cancel_url: 'https://shop.example/cart' }) }); const order = await res.json(); if (!res.ok) throw new Error(order.error); // save order.id with your order, then redirect the buyer reply.redirect(order.checkout_url);
import os, requests r = requests.post('https://api.utopay.app/v1/crypto/payments', headers={'Authorization': f'Bearer {os.environ["UTOPAY_SK"]}'}, json={'coin': 'erc20/usdt', 'amount': 120, 'currency': 'USD', 'description': 'Invoice 77'}, timeout=20) order = r.json() r.raise_for_status() print(order['id'], order['checkout_url'], order['crypto']['address'], order['crypto']['amount_coin'])
$ch = curl_init('https://api.utopay.app/v1/crypto/payments'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('UTOPAY_SK'), 'Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode(['coin' => 'polygon/usdt', 'amount' => 25, 'currency' => 'USD']), ]); $order = json_decode(curl_exec($ch), true); header('Location: ' . $order['checkout_url']);
Liquidación directa
El dinero nunca se queda con nosotros: cada pago se divide on-chain en el momento en que llega el USDC.
- Activar: panel → proyecto → Fondos y liquidaciones → Directo a la wallet, pegue una dirección USDC (Polygon). O por solicitud:
"settlement": "direct". - Recibe USDC en cada pago; además historial, estadísticas, webhooks y avisos en Telegram. Nada que retirar.
- Una wallet por proyecto — si necesita varias wallets, cree varios proyectos.
Guardado en UTOPAY
El USDC llega a la wallet de la plataforma UTOPAY. Con paid su parte se acredita al saldo interno — luego la guarda, cambia, convierte o retira.
- Activar: Fondos y liquidaciones → Guardado en UTOPAY (no hace falta wallet), o
"settlement": "custody"por solicitud. - Abono:
amount × 95.5%en la moneda del pedido (USD, EUR, GBP, CAD, INR, SEK); cualquier otra moneda, en USD al tipo actual. Se acredita exactamente una vez. - Un saldo por cuenta: todos los proyectos en este modo suman; el registro muestra el proyecto de origen.
| Endpoint (sesión del panel) | Para qué |
|---|---|
GET /api/merchants/:id/balances | Saldo por moneda |
GET /api/merchants/:id/balances/transactions | Registro de movimientos |
POST /api/merchants/:id/balances/exchange | { from_currency, to_currency, amount } — al tipo en vivo |
POST /api/merchants/:id/balances/withdraw | { currency, amount, network, to_address } |
GET /api/merchants/:id/balances/withdrawals | Solicitudes de retiro |
Redes de retiro: USDC_POLYGON, USDT_POLYGON, USDT_TRC20, USDT_ERC20, ETH, BTC, BNB, TRX. El importe se reserva al instante (pending); el equipo de UTOPAY envía la transferencia, normalmente en un día hábil (done con txid). Las solicitudes rechazadas se reembolsan. Los retiros no se pueden iniciar con una clave API.
Enlaces de pago
Sin código: cree un enlace, envíelo por chat o email y cobre. Panel → proyecto → Enlaces de pago → + Enlace.
- Importe fijo o vacío — lo escribe el comprador. Moneda — cualquiera de la lista.
- Método (opcional): fije un proveedor. Con importe fijo, el enlace envía al comprador directo a él; con importe libre, el comprador solo ve el campo del importe y un botón "Pagar con PayPal". Si el método no está disponible, se muestra el selector de métodos normal.
- URL de retorno — adónde va el comprador tras el pago. Los enlaces de un solo uso pasan a
usedtras el primer pedido (al abrirlo de nuevo se ve ese pedido); los enlaces reutilizables funcionan hasta que se archivan. - Los fondos siguen el modo de fondos del proyecto. Los pedidos de enlaces aparecen en el historial y disparan webhooks como los pedidos de la API.
| Endpoint (sesión del panel) | Cuerpo |
|---|---|
POST /api/merchants/:id/links | { amount?, currency?, description?, provider?, redirect_url?, reusable? } → enlace con url |
GET /api/merchants/:id/links | Lista |
PATCH /api/merchants/:id/links/:linkId | { status: "active" | "archived", amount, currency, description, provider, redirect_url, reusable } |
El enlace público es https://api.utopay.app/i/lnk_…. Sin cuenta, use el formulario de /payment-links — crea un pedido /v1/pay con la misma elección de método.
Webhooks y avisos
Con cuenta. Cuando un pedido cambia de estado, UTOPAY lo envía por POST a cada endpoint del proyecto, firmado con HMAC-SHA256.
Registrar: panel → Webhooks → + Endpoint, o POST /api/merchants/:id/webhooks con { "url": "https://you.com/hooks/utopay" }. El secreto whsec_… se muestra en el panel.
| Evento | Cuándo |
|---|---|
payment.succeeded | Fondos recibidos (directo y guardado) |
payment.expired | No pagado en 24 h (se envía a los endpoints suscritos a payment.failed; no se envía a Telegram). Un pago tardío posterior igualmente envía payment.succeeded. |
payment.underpaid | El pedido cripto recibió menos de lo solicitado (se envía a los endpoints suscritos a payment.succeeded) |
payment.failed | Pago fallido (actualmente, de simulaciones en modo de prueba) |
POST https://you.com/hooks/utopay
content-type: application/json
x-utopay-event: payment.succeeded
x-utopay-signature: t=1759660123,v1=<hex hmac-sha256>
user-agent: UTOPAY-Webhooks/1.0
{
"event": "payment.succeeded",
"created_at": 1759660123456,
"data": { /* the Order object */ }
}
import crypto from 'node:crypto'; // use the RAW body, not re-serialised JSON function verify(rawBody, header, secret) { const { t, v1 } = Object.fromEntries(header.split(',').map(p => p.split('='))); const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex'); const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300; const a = Buffer.from(v1 || ''), b = Buffer.from(expected); return fresh && a.length === b.length && crypto.timingSafeEqual(a, b); }
// raw body + x-utopay-signature header + your whsec_… secret $raw = file_get_contents('php://input'); parse_str(str_replace(',', '&', $_SERVER['HTTP_X_UTOPAY_SIGNATURE'] ?? ''), $sig); $expected = hash_hmac('sha256', ($sig['t'] ?? '') . '.' . $raw, getenv('UTOPAY_WHSEC')); if (!hash_equals($expected, $sig['v1'] ?? '') || abs(time() - (int)($sig['t'] ?? 0)) > 300) { http_response_code(400); exit; } $event = json_decode($raw, true); if ($event['event'] === 'payment.succeeded') { /* mark $event['data']['id'] as paid */ } http_response_code(200);
import hmac, hashlib, time def verify(raw_body: bytes, header: str, secret: str) -> bool: parts = dict(p.split('=', 1) for p in header.split(',')) t, v1 = parts.get('t', ''), parts.get('v1', '') expected = hmac.new(secret.encode(), f'{t}.'.encode() + raw_body, hashlib.sha256).hexdigest() fresh = t.isdigit() and abs(time.time() - int(t)) < 300 return fresh and hmac.compare_digest(expected, v1)
- Responda con cualquier 2xx en 10 s. Reintentos tras 30 s, 2 min, 15 min, 1 h, 6 h — 6 intentos. Las entregas se ven en el panel.
- Sea idempotente — elimine duplicados por
data.id. - Telegram: los pedidos pagados llegan a su chat con importe, descripción e id (Notificaciones).
Modo de prueba
- Cree una clave secreta de prueba (
utopay_sk_test_…) y llame aPOST /v1/paymentscomo siempre — todas las validaciones (moneda, proveedor) son iguales. checkout_urlapunta a una página sandbox (/sandbox/ord_test_…). Pulse Simulate payment o Simulate failure.- Los webhooks y Telegram se disparan como en producción con
"is_test": true. No se mueve dinero ni se acredita saldo.
Equipo, marca, enrutamiento
Equipo: invite por email (Equipo). Roles admin, developer, finance, viewer; el creador es owner.
Marca: nombre, logo, color de fondo y de botón en Ajustes — se aplican a la página de pago, las páginas de enlaces y la pantalla de pago completado.
Enrutamiento del proyecto: en Enrutamiento ordene los proveedores preferidos por prioridad. Para pagos API sin provider se usa el primero que esté en línea y admita el importe y la moneda (routing.reason = "project_routing"); si ninguno encaja, el comprador elige en nuestra página. Un provider explícito siempre tiene prioridad.
Objeto del pedido
Lo devuelven create/get/list y va dentro de los webhooks.
| Campo | Significado |
|---|---|
id | ord_… (ord_test_… en modo de prueba) |
status | pending → paid (o failed; cripto: underpaid). No pagado en 24 h → expired: no se puede iniciar un nuevo pago, pero un pago tardío igualmente lo pasa a paid. |
is_test | Creado con una clave de prueba |
amount, currency | Lo que paga el comprador |
email, description | Tal como se envió |
checkout_url | Adónde enviar al comprador (al proveedor o a nuestra página) |
payment_page_url | Siempre nuestra página de pago con todos los métodos |
provider, routing | Método elegido y cómo se dirige al comprador — vea enrutamiento |
settlement, payout_wallet | direct (su wallet) o custody (wallet de la plataforma) |
payout_coin, payout_network | USDC, polygon |
fees | División en fracciones: merchant (su parte, 0.955), platform (comisión de UTOPAY), partner, partner2 (partes de referidos, normalmente 0) |
received_amount, forwarded_amount, received_asset | Cuánto llegó realmente / se reenvió a su wallet y en qué activo (tras el pago) |
tx_hash, payout_tx_hash | Hashes de las transacciones de entrada y de liquidación |
receiving_address | Dirección de recepción de un solo uso de este pedido |
expires_at | Cuándo un pedido no pagado pasa a expired (ms Unix) |
success_url, cancel_url, created_at, updated_at | Tal como se envió / ms Unix |
Todos los endpoints públicos
| Endpoint | Autent. | Para qué |
|---|---|---|
POST /v1/pay | — | Pago sin cuenta |
POST /v1/payments | sk | Crear un pago |
GET /v1/payments/:id | sk | Un pago (con comprobación del estado real) |
GET /v1/payments | sk | Lista de pagos |
GET /v1/providers?amount=¤cy= | — | Métodos disponibles ahora |
GET /v1/crypto/coins | — | Monedas y redes de la pasarela cripto |
POST /v1/crypto/payments / POST /v1/crypto/pay | sk / — | Pago cripto con / sin cuenta |
GET /v1/currencies | — | Monedas aceptadas |
GET /api/checkout/:id/status | — | Estado de cualquier pedido |
GET /pay/:id, GET /pay/:id/go?provider= | — | Página de pago / redirección a un método (para el comprador) |
GET /i/:linkId | — | Página del enlace de pago (para el comprador) |
Comisiones
- Usted recibe el 95.5% — igual con o sin cuenta, en modo directo y guardado, para cualquier moneda y método. Sin cuotas de alta ni mensuales.
- Los comercios grandes pueden obtener una tarifa individual — contáctenos. La división exacta de cada pedido está en
fees.
Programa de referidos
- Nivel 1: el 25% de nuestra comisión de los comercios que usted invitó; nivel 2: el 10% de los comercios que ellos invitaron.
- Se paga on-chain en cada pago a la wallet de referidos indicada en Referidos. Sale de nuestra comisión — los referidos no pagan nada extra.
Errores
Cada error es { "error": "message" } con el estado HTTP correspondiente.
| Estado | Significado |
|---|---|
400 | Datos incorrectos: amount, currency no admitida, provider desconocido, payout_wallet no válida, success_url que no es http(s), settlement incorrecto, modo directo sin wallet, saldo insuficiente. |
401 | Clave ausente, mal formada o revocada; sin sesión en el panel. |
403 | Clave pk donde se necesita sk; proyecto inactivo; sin acceso. |
404 | No encontrado o pertenece a otro proyecto. |
429 | Demasiados intentos de inicio de sesión / registro — reintente en un minuto. |
503 | Red de pagos temporalmente no disponible — reintente con espera progresiva. |
500 | Error de configuración del servidor — contacte con soporte. |