UTOPAYd Docs api.utopay.app
ES
← Volver al sitio Iniciar sesión
Documentación · API v1

Acepte pagos con tarjeta y reciba USDC — con o sin cuenta

Su cliente paga en su propia moneda — tarjeta, PayPal, Revolut, Apple Pay, transferencia bancaria. Un proveedor de pagos lo convierte en USDC en Polygon, y el USDC se divide on-chain: su parte va a su wallet (o a su saldo en UTOPAY) y nuestra comisión del 4.5% a nosotros. Puede enviar al comprador a nuestra página de pago o directamente a un método de pago.

Cómo funciona un pago

El flujo es el mismo en todos los modos. Solo cambian el destino del dinero y las herramientas alrededor.

CrearUsted llama a la API o comparte un enlace de pago. Le devolvemos un checkout_url.
PagarEl comprador lo abre: o bien nuestra página de pago con todos los métodos, o — si indicó provider — directamente el método elegido.
ConvertirEl proveedor cobra al comprador en currency y envía USDC (Polygon) a una dirección de un solo uso.
DividirLa dirección de un solo uso reenvía el USDC on-chain: su parte, nuestra comisión y las partes de referidos, si las hay.
ConfirmarEl pedido pasa a 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
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
EndpointPOST /v1/payPOST /v1/payments
AutenticaciónningunaBearer utopay_sk_…
Usted recibeUSDC (Polygon) en la wallet de la solicitudUSDC (Polygon) en la wallet del proyectoSaldo 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ón4.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:

CampoTipoObligatorioNotas
payout_walletstring✓0x + 40 caracteres hex. Adónde se envía su parte.
  • Siempre direct: "settlement": "custody" devuelve 400 — sin cuenta no hay saldo que acreditar.
  • Comisión fija del 4.5%, sin programa de referidos, sin webhooks (callback_url se 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.
Revise bien la wallet. La división se hace on-chain y no se puede revertir. Un error de escritura o una dirección que no sea de Polygon significa fondos perdidos.

Cuenta y claves API

RegístreseEn utopay.app/login: email, contraseña (8+ caracteres, mayúsculas y minúsculas, un dígito) y su @usuario de Telegram.
Confirme en TelegramPulse Start en nuestro bot desde esa misma cuenta de Telegram. También activa los avisos de pago y la recuperación de contraseña.
Modo de fondosFondos y liquidaciones: conecte una wallet USDC (directo) o guarde los fondos en UTOPAY.
Cree una claveClaves API: primero una clave de prueba, una clave live cuando esté listo.

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.

Header
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
ClaveFormatoUso
Live secretutopay_sk_live_…Solo en el servidor. Crea pagos reales.
Test secretutopay_sk_test_…Pagos simulados, no se mueve dinero — Modo de prueba.
Publishableutopay_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

CampoTipoOblig.Notas
amountnumber✓> 0, en currency, redondeado a 2 decimales. Máximo 1 000 000.
currencystring—Código ISO de la moneda en que paga el comprador, por defecto USD. No distingue mayúsculas. Vea Monedas.
providerstring—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).
settlementstring—"direct" o "custody". Por defecto: el modo de fondos del proyecto.
payment_methodsstring—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.
emailstring—Email del comprador (validado), se pasa al proveedor.
descriptionstring—Hasta 500 caracteres. Se muestra al comprador y se devuelve en los webhooks.
success_urlstring—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_urlstring—URL http(s) absoluta que se pasa al proveedor para un pago cancelado.
callback_urlstring—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
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"
  }'
Response
{
  "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.

Al crearComprobamos el proveedor. Id desconocido → 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.
Cuando el comprador lo abre/pay/:id/go?provider=… vuelve a comprobar y redirige al comprador a la página de pago del propio proveedor.
AlternativaSi el proveedor lo rechaza en ese momento (p. ej. no disponible en el país del comprador), el comprador llega a nuestra página de pago con el aviso "PayPal no está disponible ahora" y los demás métodos.

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=&currency= 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.

providerMétodoDónde funcionaMínimo*
stripeTarjeta, Apple Pay, Google PayUS / EU2 USD
paypalPayPalEE. UU.5 USD
revolutRevolutEU / EEA6 EUR
coinbaseCoinbase PayGlobal2 USD
cashappCash AppEE. UU.2 USD
robinhoodRobinhoodEE. UU.5 USD
klarnaKlarna (Pay Now)Suecia125 SEK
idealiDEALPaíses Bajos46 EUR
banxaTarjeta, transferencia bancariaGlobal11 USD
transakTarjeta, transferencia bancaria, UPIGlobal30 USD
binance, blockchaincom, topper, meld, alchemypay, sardine, particleTarjeta vía sociovariable10–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 currencySubsaldo 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 NGNse 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

ModoUsted recibeEjemplo: 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 · DirectoIgual — USDC en Polygon a la wallet del proyecto; el panel muestra el pedido en EUR≈ 107 USDC on-chain
Cuenta · Guardado en UTOPAYSaldo interno en la moneda del pedido (importe × 95.5%) si tiene subsaldo propio; si no, en USD al tipo actual95.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

CampoNotas
coin ✓Ticker de /v1/crypto/coins
amount + currencyPrecio en fiat (cualquiera de las monedas), convertido a la moneda cripto al tipo actual
amount_coinO el importe exacto en la moneda cripto (en lugar de amount)
payout_addressSu 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_urlComo en Crear un pago
cURL
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 muestre crypto.address y crypto.amount_coin en su propia página.
  • Estados: pending (con crypto.detected: true en cuanto se ve la transferencia, antes de las confirmaciones) → paid. Si llega menos de lo solicitado (falta más del 1%), el estado es underpaid y el evento payment.underpaid — el dinero ya está en su wallet, decida usted.
  • Los webhooks, GET /v1/payments/:id y las claves de prueba funcionan igual que con pagos con tarjeta. Las transferencias por debajo de minimum o 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.

Node.js — create order
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);
Python — create order
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'])
PHP — create order
$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/balancesSaldo por moneda
GET /api/merchants/:id/balances/transactionsRegistro 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/withdrawalsSolicitudes 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.

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.

EventoCuándo
payment.succeededFondos recibidos (directo y guardado)
payment.expiredNo 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.underpaidEl pedido cripto recibió menos de lo solicitado (se envía a los endpoints suscritos a payment.succeeded)
payment.failedPago fallido (actualmente, de simulaciones en modo de prueba)
Incoming request
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 */ }
}
Node.js — verify
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);
}
PHP — verify
// 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);
Python — verify
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

  1. Cree una clave secreta de prueba (utopay_sk_test_…) y llame a POST /v1/payments como siempre — todas las validaciones (moneda, proveedor) son iguales.
  2. checkout_url apunta a una página sandbox (/sandbox/ord_test_…). Pulse Simulate payment o Simulate failure.
  3. 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.

CampoSignificado
idord_… (ord_test_… en modo de prueba)
statuspending → 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_testCreado con una clave de prueba
amount, currencyLo que paga el comprador
email, descriptionTal como se envió
checkout_urlAdónde enviar al comprador (al proveedor o a nuestra página)
payment_page_urlSiempre nuestra página de pago con todos los métodos
provider, routingMétodo elegido y cómo se dirige al comprador — vea enrutamiento
settlement, payout_walletdirect (su wallet) o custody (wallet de la plataforma)
payout_coin, payout_networkUSDC, polygon
feesDivisió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_assetCuánto llegó realmente / se reenvió a su wallet y en qué activo (tras el pago)
tx_hash, payout_tx_hashHashes de las transacciones de entrada y de liquidación
receiving_addressDirección de recepción de un solo uso de este pedido
expires_atCuándo un pedido no pagado pasa a expired (ms Unix)
success_url, cancel_url, created_at, updated_atTal como se envió / ms Unix

Todos los endpoints públicos

EndpointAutent.Para qué
POST /v1/pay—Pago sin cuenta
POST /v1/paymentsskCrear un pago
GET /v1/payments/:idskUn pago (con comprobación del estado real)
GET /v1/paymentsskLista de pagos
GET /v1/providers?amount=&currency=—Métodos disponibles ahora
GET /v1/crypto/coins—Monedas y redes de la pasarela cripto
POST /v1/crypto/payments / POST /v1/crypto/paysk / —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

4.5%
por pago — procesamiento incluido
  • 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.

EstadoSignificado
400Datos 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.
401Clave ausente, mal formada o revocada; sin sesión en el panel.
403Clave pk donde se necesita sk; proyecto inactivo; sin acceso.
404No encontrado o pertenece a otro proyecto.
429Demasiados intentos de inicio de sesión / registro — reintente en un minuto.
503Red de pagos temporalmente no disponible — reintente con espera progresiva.
500Error de configuración del servidor — contacte con soporte.