Como um pagamento funciona
O fluxo é o mesmo em todos os modos. Só mudam o destino do dinheiro e as ferramentas ao redor.
checkout_url.provider — direto o método escolhido.currency e envia USDC (Polygon) para um endereço de uso único.paid. Com conta você também recebe um webhook e uma mensagem no Telegram.URL base de toda chamada à API: https://api.utopay.app. Requisições e respostas são JSON (content-type: application/json). Valores são números na moeda do pedido; horários, milissegundos Unix.
Início rápido
Um pagamento real em uma requisição — sem cadastro. O comprador vai direto para o PayPal; se o PayPal não puder aceitar este pagamento, abre a nossa página com os outros 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", … }
Redirecione o comprador para checkout_url. Cerca de 95.5 USDC chegam à sua carteira após o pagamento. Com conta, você chamaria POST /v1/payments com uma chave de API — mesmos campos, mais histórico, webhooks e saldo.
Comparar os modos
| Sem conta | Conta · Direto | Conta · Guardado | |
|---|---|---|---|
| Endpoint | POST /v1/pay | POST /v1/payments | |
| Autenticação | nenhuma | Bearer utopay_sk_… | |
| Você recebe | USDC (Polygon) na carteira da requisição | USDC (Polygon) na carteira do projeto | Saldo na moeda do pedido |
Enviar o comprador direto a um método (provider) | ✓ | ✓ | ✓ |
| Todas as moedas | ✓ | ✓ | ✓ |
| Painel e histórico de pedidos | — | ✓ | ✓ |
| Webhooks / alertas no Telegram | — | ✓ | ✓ |
| Links de pagamento pelo painel | — | ✓ | ✓ |
| Modo de teste (sandbox) | — | ✓ | ✓ |
| Saldo, câmbio, conversão, saque | — | — | ✓ |
| Programa de indicação | — | ✓ | ✓ |
| Taxa | 4.5% | 4.5% | |
Sem conta
POST /v1/pay
Sem cabeçalho Authorization. O dinheiro sempre vai direto para payout_wallet — um endereço EVM que possa receber USDC na Polygon. Mesmo corpo de POST /v1/payments, mais:
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
payout_wallet | string | ✓ | 0x + 40 caracteres hex. Para onde sua parte é enviada. |
- Sempre
direct:"settlement": "custody"retorna400— sem conta não há saldo para creditar. - Taxa fixa de 4.5%, sem programa de indicação, sem webhooks (
callback_urlé salvo mas não é chamado), sem modo de teste, checkout com design padrão. - Acompanhamento: consulte o endpoint público
GET /api/checkout/:id/status(sem chave) ou acompanhe sua carteira.
Conta e chaves de API
Uma conta comporta até 20 projetos (um por site). Cada um tem suas chaves, webhooks, carteira, marca, modo dos fundos e estatísticas; o saldo é compartilhado por toda a conta.
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
| Chave | Formato | Uso |
|---|---|---|
| Live secret | utopay_sk_live_… | Somente no servidor. Cria pagamentos reais. |
| Test secret | utopay_sk_test_… | Pagamentos simulados, nenhum dinheiro se move — Modo de teste. |
| Publishable | utopay_pk_… | Não pode criar pagamentos (403). Reservada para uso no cliente. |
A chave é exibida uma única vez; guardamos só o hash. Nunca coloque uma chave secreta em código de navegador ou de app.
Criar um pagamento
POST /v1/payments Bearer sk
| Campo | Tipo | Obrig. | Observações |
|---|---|---|---|
amount | number | ✓ | > 0, em currency, arredondado para 2 casas. Máximo 1 000 000. |
currency | string | — | Código ISO da moeda em que o comprador paga, padrão USD. Não diferencia maiúsculas. Veja Moedas. |
provider | string | — | Envia o comprador direto para este método de pagamento, sem passar pela nossa página — ex.: paypal, revolut, stripe. Se indisponível, abre a nossa página. Veja Enviar o comprador a um método. Alias: payment_option (prevalece se ambos forem enviados). |
settlement | string | — | "direct" ou "custody". Padrão: o modo dos fundos do projeto. |
payment_methods | string | — | O que o comprador vê na página de pagamento: "both" (abas de cartão e carteiras + criptomoedas), "cards" ou "crypto". Padrão: a configuração do projeto (Fundos e repasses), senão "both". Com cripto o comprador escolhe rede e moeda e paga 1.5%; o pedido recebe paid_with: "crypto". Com direct as moedas vão direto para as suas carteiras cripto; com custody são creditadas no seu saldo na UTOPAY — sem precisar de carteiras. |
email | string | — | Email do comprador (validado), repassado ao provedor. |
description | string | — | Até 500 caracteres. Exibido ao comprador e devolvido nos webhooks. |
success_url | string | — | URL http(s) absoluta: para onde o provedor devolve o comprador e para onde leva o botão "Voltar ao site" após o pagamento. |
cancel_url | string | — | URL http(s) absoluta, repassada ao provedor para um pagamento cancelado. |
callback_url | string | — | URL http(s) absoluta. Cada evento deste pedido (payment.succeeded, failed, underpaid, expired) é enviado para ela via POST no formato de webhook, assinado com x-utopay-signature, cuja chave HMAC é sha256(chave secreta) (hex) da chave que criou o pedido. Usado pelos plugins de CMS. Somente pagamentos com chave de 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
}
Sempre redirecione o comprador para checkout_url. Guarde payment_page_url se quiser um link "escolher outro método" — ele sempre abre a nossa página.
Enviar o comprador direto a um método de pagamento
Funciona em todos os modos — com chave de API, sem conta, em links de pagamento do painel e no formulário sem código em /payment-links. Defina provider e o comprador vai direto para esse provedor (ex.: PayPal) sem ver o nosso formulário de pagamento.
400 com a lista de ids válidos. Conhecido mas indisponível agora (offline, valor abaixo do mínimo, moeda errada) → o pedido é criado mesmo assim e checkout_url aponta para a nossa página./pay/:id/go?provider=… verifica de novo e redireciona o comprador para o checkout do próprio provedor.routing na resposta diz o que aconteceu: mode é direct_to_provider ou payment_page; reason é null, provider_offline, provider_below_minimum, provider_currency, provider_disabled ou project_routing (escolhido entre os provedores preferidos do seu projeto).
GET /v1/providers?amount=¤cy= público
Métodos disponíveis agora para este valor e moeda, com id, name, region, status, minimum_amount e minimum_currency. A lista muda — consulte-a em vez de fixá-la no código.
provider | Método | Onde funciona | Mínimo* |
|---|---|---|---|
stripe | Cartão, Apple Pay, Google Pay | US / EU | 2 USD |
paypal | PayPal | EUA | 5 USD |
revolut | Revolut | EU / EEA | 6 EUR |
coinbase | Coinbase Pay | Global | 2 USD |
cashapp | Cash App | EUA | 2 USD |
robinhood | Robinhood | EUA | 5 USD |
klarna | Klarna (Pay Now) | Suécia | 125 SEK |
ideal | iDEAL | Holanda | 46 EUR |
banxa | Cartão, transferência bancária | Global | 11 USD |
transak | Cartão, transferência bancária, UPI | Global | 30 USD |
binance, blockchaincom, topper, meld, alchemypay, sardine, particle | Cartão via parceiro | varia | 10–30 USD |
* Mínimos e disponibilidade vêm da rede de pagamentos e mudam; o valor é convertido para a moeda do mínimo antes da comparação. Alguns provedores podem pedir ao comprador uma verificação de identidade rápida e única.
Moedas e o que você recebe
currency é a moeda em que o comprador paga. Qualquer que seja, o dinheiro é convertido pelo provedor e circula como USDC na Polygon.
GET /v1/currencies público
Códigos aceitos em currency | Subsaldo próprio (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 | creditado em USD |
Qualquer outro código retorna 400. Um provedor pode mostrar ao comprador o preço convertido para a moeda dele (ex.: Revolut em EUR) — o comprador ainda paga o equivalente ao seu valor. Alguns métodos aceitam só certas moedas; para eles, /v1/providers?currency=… os omite.
O que chega e onde
| Modo | Você recebe | Exemplo: pedido de 100 EUR |
|---|---|---|
Sem conta (/v1/pay) | USDC na Polygon direto para payout_wallet, 95.5% do USDC entregue pelo provedor | ≈ 100 EUR em USD × 0.955 ≈ 107 USDC (com 1 EUR ≈ 1.12 USD) |
| Conta · Direto | Igual — USDC na Polygon para a carteira do projeto; o painel mostra o pedido em EUR | ≈ 107 USDC on-chain |
| Conta · Guardado na UTOPAY | Saldo interno na moeda do pedido (valor × 95.5%) se ela tiver subsaldo próprio; senão, em USD pela cotação atual | 95.50 EUR no saldo em EUR (um pedido de 100 BRL → ≈ 19 USD no saldo em USD) |
O USDC exato que chegou fica em received_amount do pedido após o pagamento; pode diferir um pouco da estimativa porque a cotação é definida pelo provedor. Saldos guardados podem ser trocados entre moedas e sacados em USDC, USDT, BTC, ETH e outras — veja Guardado na UTOPAY.
Status do pagamento
GET /v1/payments/:id Bearer sk
O pedido no mesmo formato. Enquanto não estiver paid, também consultamos o status real no provedor, então o polling é confiável mesmo se um callback atrasar — o crédito no saldo e o seu webhook acontecem exatamente uma vez em qualquer caso. Só o projeto da própria chave é visível (senão 404).
GET /v1/payments?limit=&offset=&status= Bearer sk
Pedidos do projeto, os mais recentes primeiro. limit 1–500 (padrão 50), status = pending | paid | failed.
GET /api/checkout/:id/status público
Sem chave: { "id", "status", "amount", "currency", "updated_at" }. Use para pedidos criados sem conta. Não trate uma visita a success_url como prova de pagamento — verifique o status.
Gateway cripto
O comprador paga direto em cripto — USDT, USDC, ETH, BTC e outras — para um endereço único do pedido. Tudo o que chega é repassado on-chain para a sua carteira na hora — ou, com settlement: "custody", creditado no seu saldo na UTOPAY (sem precisar de carteiras). Taxa de 1.5%, descontada do valor recebido; a taxa da blockchain é à parte.
GET /v1/crypto/coins público
Cada moeda/rede com ticker (o que você passa como coin, ex.: polygon/usdc, bep20/usdt, erc20/usdt, base/usdc, eth, btc, trc20/usdt), network, family (tipo de endereço), minimum e available. Funcionam as redes EVM, Tron, Bitcoin, Solana, TON e outras; available: false significa que a rede está temporariamente indisponível.
POST /v1/crypto/payments Bearer sk · POST /v1/crypto/pay sem conta
| Campo | Observações |
|---|---|
coin ✓ | Ticker de /v1/crypto/coins |
amount + currency | Preço em moeda fiduciária (qualquer uma das moedas), convertido na cripto pela cotação atual |
amount_coin | Ou o valor exato na cripto (em vez de amount) |
payout_address | Sua carteira nessa rede. Obrigatória para /v1/crypto/pay; com chave, o padrão são as carteiras do gateway cripto do projeto (para EVM — a carteira de repasse). Validada conforme a rede. |
email, description, success_url, cancel_url | Como em Criar um pagamento |
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 } }
- Redirecione o comprador para
checkout_url(valor, rede, endereço, QR, status ao vivo) — ou mostrecrypto.addressecrypto.amount_coinna sua própria página. - Status:
pending(comcrypto.detected: trueassim que a transferência é vista, antes das confirmações) →paid. Se chegar menos que o solicitado (falta de mais de 1%), o status éunderpaide o eventopayment.underpaid— o dinheiro já está na sua carteira, a decisão é sua. - Webhooks,
GET /v1/payments/:ide chaves de teste funcionam como nos pagamentos com cartão. Transferências abaixo deminimumou em outra moeda/rede não são processadas — a página de pagamento avisa o comprador.
Exemplos de integração
Crie o pedido no seu servidor (nunca com chave secreta no navegador), redirecione o comprador para checkout_url e marque o pedido como pago a partir do webhook. Guia passo a passo: aceitar cripto em um site; redes e tickers do Tether: aceitar 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']);
Liquidação direta
O dinheiro nunca fica conosco: cada pagamento é dividido on-chain no momento em que o USDC chega.
- Ativar: painel → projeto → Fundos e repasses → Direto na carteira, cole um endereço USDC (Polygon). Ou por requisição:
"settlement": "direct". - Você recebe USDC em cada pagamento; além disso, histórico, estatísticas, webhooks e alertas no Telegram. Nada para sacar.
- Uma carteira por projeto — precisa de várias carteiras, crie vários projetos.
Guardado na UTOPAY
O USDC chega à carteira da plataforma UTOPAY. Em paid sua parte é creditada no saldo interno — depois você guarda, troca, converte ou saca.
- Ativar: Fundos e repasses → Guardado na UTOPAY (sem carteira), ou
"settlement": "custody"por requisição. - Crédito:
amount × 95.5%na moeda do pedido (USD, EUR, GBP, CAD, INR, SEK); qualquer outra moeda, em USD pela cotação atual. Creditado exatamente uma vez. - Um saldo por conta: todos os projetos neste modo somam; o extrato mostra o projeto de origem.
| Endpoint (sessão do painel) | Finalidade |
|---|---|
GET /api/merchants/:id/balances | Saldo por moeda |
GET /api/merchants/:id/balances/transactions | Extrato |
POST /api/merchants/:id/balances/exchange | { from_currency, to_currency, amount } — pela cotação ao vivo |
POST /api/merchants/:id/balances/withdraw | { currency, amount, network, to_address } |
GET /api/merchants/:id/balances/withdrawals | Solicitações de saque |
Redes de saque: USDC_POLYGON, USDT_POLYGON, USDT_TRC20, USDT_ERC20, ETH, BTC, BNB, TRX. O valor é reservado na hora (pending); a equipe da UTOPAY envia a transferência, normalmente em até um dia útil (done com txid). Solicitações recusadas são estornadas. Saques não podem ser iniciados com chave de API.
Links de pagamento
Sem código: crie um link, envie por chat ou email e receba. Painel → projeto → Links de pagamento → + Link.
- Valor fixo ou vazio — o comprador digita. Moeda — qualquer uma da lista.
- Método (opcional): fixe um provedor. Com valor fixo, o link envia o comprador direto para ele; com valor livre, o comprador vê só o campo do valor e um botão "Pagar com PayPal". Se o método estiver indisponível, aparece o seletor de métodos normal.
- URL de retorno — para onde o comprador vai após o pagamento. Links de uso único passam a
usedapós o primeiro pedido (abrir de novo leva a esse pedido); links reutilizáveis funcionam até serem arquivados. - Os fundos seguem o modo dos fundos do projeto. Pedidos de links aparecem no histórico e disparam webhooks como os pedidos da API.
| Endpoint (sessão do painel) | Corpo |
|---|---|
POST /api/merchants/:id/links | { amount?, currency?, description?, provider?, redirect_url?, reusable? } → link com url |
GET /api/merchants/:id/links | Listar |
PATCH /api/merchants/:id/links/:linkId | { status: "active" | "archived", amount, currency, description, provider, redirect_url, reusable } |
O link público é https://api.utopay.app/i/lnk_…. Sem conta, use o formulário em /payment-links — ele cria um pedido /v1/pay com a mesma escolha de método.
Webhooks e alertas
Com conta. Quando um pedido muda de estado, a UTOPAY o envia via POST para cada endpoint do projeto, assinado com HMAC-SHA256.
Cadastrar: painel → Webhooks → + Endpoint, ou POST /api/merchants/:id/webhooks com { "url": "https://you.com/hooks/utopay" }. O segredo whsec_… aparece no painel.
| Evento | Quando |
|---|---|
payment.succeeded | Fundos recebidos (direto e guardado) |
payment.expired | Não pago em 24 h (enviado aos endpoints inscritos em payment.failed; não vai para o Telegram). Um pagamento tardio depois disso ainda envia payment.succeeded. |
payment.underpaid | Pedido cripto recebeu menos que o solicitado (enviado aos endpoints inscritos em payment.succeeded) |
payment.failed | Pagamento falhou (atualmente, de simulações no modo de teste) |
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 com qualquer 2xx em até 10 s. Novas tentativas após 30 s, 2 min, 15 min, 1 h, 6 h — 6 tentativas. As entregas aparecem no painel.
- Seja idempotente — elimine duplicatas por
data.id. - Telegram: pedidos pagos chegam ao seu chat com valor, descrição e id (Notificações).
Modo de teste
- Crie uma chave secreta de teste (
utopay_sk_test_…) e chamePOST /v1/paymentsnormalmente — todas as validações (moeda, provedor) são as mesmas. checkout_urlaponta para uma página sandbox (/sandbox/ord_test_…). Clique em Simulate payment ou Simulate failure.- Webhooks e Telegram disparam como em produção, com
"is_test": true. Nenhum dinheiro se move, nenhum saldo é creditado.
Equipe, marca, roteamento
Equipe: convide por email (Equipe). Funções admin, developer, finance, viewer; quem criou é owner.
Marca: nome, logo, cor de fundo e do botão em Configurações — aplicados à página de pagamento, às páginas de links e à tela de pagamento concluído.
Roteamento do projeto: em Roteamento, liste os provedores preferidos por prioridade. Para pagamentos via API sem provider, é usado o primeiro que estiver online e aceitar o valor e a moeda (routing.reason = "project_routing"); se nenhum servir, o comprador escolhe na nossa página. Um provider explícito sempre prevalece.
Objeto do pedido
Retornado por create/get/list e dentro dos webhooks.
| Campo | Significado |
|---|---|
id | ord_… (ord_test_… no modo de teste) |
status | pending → paid (ou failed; cripto: underpaid). Não pago em 24 h → expired: não é possível iniciar um novo pagamento, mas um pagamento tardio ainda o torna paid. |
is_test | Criado com chave de teste |
amount, currency | O que o comprador paga |
email, description | Como enviado |
checkout_url | Para onde enviar o comprador (ao provedor ou à nossa página) |
payment_page_url | Sempre a nossa página de pagamento com todos os métodos |
provider, routing | Método escolhido e como o comprador é direcionado — veja roteamento |
settlement, payout_wallet | direct (sua carteira) ou custody (carteira da plataforma) |
payout_coin, payout_network | USDC, polygon |
fees | Divisão em frações: merchant (sua parte, 0.955), platform (taxa da UTOPAY), partner, partner2 (partes de indicação, geralmente 0) |
received_amount, forwarded_amount, received_asset | Quanto realmente chegou / foi repassado à sua carteira e em qual ativo (após o pagamento) |
tx_hash, payout_tx_hash | Hashes das transações de entrada e de repasse |
receiving_address | Endereço de recebimento de uso único deste pedido |
expires_at | Quando um pedido não pago passa a expired (ms Unix) |
success_url, cancel_url, created_at, updated_at | Como enviado / ms Unix |
Todos os endpoints públicos
| Endpoint | Autent. | Finalidade |
|---|---|---|
POST /v1/pay | — | Pagamento sem conta |
POST /v1/payments | sk | Criar um pagamento |
GET /v1/payments/:id | sk | Um pagamento (com verificação do status real) |
GET /v1/payments | sk | Listar pagamentos |
GET /v1/providers?amount=¤cy= | — | Métodos disponíveis agora |
GET /v1/crypto/coins | — | Moedas e redes do gateway cripto |
POST /v1/crypto/payments / POST /v1/crypto/pay | sk / — | Pagamento cripto com / sem conta |
GET /v1/currencies | — | Moedas aceitas |
GET /api/checkout/:id/status | — | Status de qualquer pedido |
GET /pay/:id, GET /pay/:id/go?provider= | — | Página de pagamento / redirecionamento a um método (para o comprador) |
GET /i/:linkId | — | Página do link de pagamento (para o comprador) |
Taxas
- Você recebe 95.5% — igual com ou sem conta, nos modos direto e guardado, para qualquer moeda e método. Sem taxa de adesão ou mensalidade.
- Grandes lojistas podem ter uma taxa individual — fale conosco. A divisão exata de cada pedido está em
fees.
Programa de indicação
- Nível 1: 25% da nossa taxa sobre os lojistas que você indicou; nível 2: 10% sobre os lojistas que eles indicaram.
- Pago on-chain a cada pagamento na carteira de indicação definida em Indicações. Sai da nossa taxa — os indicados não pagam nada a mais.
Erros
Todo erro é { "error": "message" } com o status HTTP correspondente.
| Status | Significado |
|---|---|
400 | Dados inválidos: amount, currency não suportada, provider desconhecido, payout_wallet inválida, success_url que não é http(s), settlement inválido, modo direto sem carteira, saldo insuficiente. |
401 | Chave ausente, malformada ou revogada; sem sessão no painel. |
403 | Chave pk onde é preciso sk; projeto inativo; sem acesso. |
404 | Não encontrado ou pertence a outro projeto. |
429 | Muitas tentativas de login / cadastro — tente de novo em um minuto. |
503 | Rede de pagamentos temporariamente indisponível — tente de novo com espera progressiva. |
500 | Erro de configuração do servidor — fale com o suporte. |