UTOPAYd Docs api.utopay.app
PT
← Voltar ao site Entrar
Documentação · API v1

Aceite pagamentos com cartão e receba USDC — com ou sem conta

Seu cliente paga na própria moeda — cartão, PayPal, Revolut, Apple Pay, transferência bancária. Um provedor de pagamentos converte o valor em USDC na Polygon, e o USDC é dividido on-chain: sua parte vai para a sua carteira (ou para o seu saldo na UTOPAY) e a nossa taxa de 4.5% para nós. Você pode enviar o comprador para a nossa página de pagamento ou direto para um método de pagamento.

Como um pagamento funciona

O fluxo é o mesmo em todos os modos. Só mudam o destino do dinheiro e as ferramentas ao redor.

CriarVocê chama a API ou compartilha um link de pagamento. Devolvemos um checkout_url.
PagarO comprador o abre: ou a nossa página de pagamento com todos os métodos, ou — se você definiu provider — direto o método escolhido.
ConverterO provedor cobra o comprador em currency e envia USDC (Polygon) para um endereço de uso único.
DividirO endereço de uso único repassa o USDC on-chain: sua parte, nossa taxa e as partes de indicação, se houver.
ConfirmarO pedido passa a 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
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
EndpointPOST /v1/payPOST /v1/payments
AutenticaçãonenhumaBearer utopay_sk_…
Você recebeUSDC (Polygon) na carteira da requisiçãoUSDC (Polygon) na carteira do projetoSaldo 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—✓✓
Taxa4.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:

CampoTipoObrigatórioObservações
payout_walletstring✓0x + 40 caracteres hex. Para onde sua parte é enviada.
  • Sempre direct: "settlement": "custody" retorna 400 — 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.
Confira a carteira. A divisão é feita on-chain e não pode ser revertida. Um erro de digitação ou um endereço fora da Polygon significa fundos perdidos.

Conta e chaves de API

Cadastre-seEm utopay.app/login: email, senha (8+ caracteres, maiúsculas e minúsculas, um dígito) e seu @usuário do Telegram.
Confirme no TelegramToque em Start no nosso bot com essa mesma conta do Telegram. Isso também ativa os alertas de pagamento e a recuperação de senha.
Modo dos fundosFundos e repasses: conecte uma carteira USDC (direto) ou mantenha os fundos na UTOPAY.
Crie uma chaveChaves de API: primeiro uma chave de teste, uma chave live quando estiver pronto.

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.

Header
Authorization: Bearer utopay_sk_live_xxxxxxxxxxxxxxxxxxxx
ChaveFormatoUso
Live secretutopay_sk_live_…Somente no servidor. Cria pagamentos reais.
Test secretutopay_sk_test_…Pagamentos simulados, nenhum dinheiro se move — Modo de teste.
Publishableutopay_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

CampoTipoObrig.Observações
amountnumber✓> 0, em currency, arredondado para 2 casas. Máximo 1 000 000.
currencystring—Código ISO da moeda em que o comprador paga, padrão USD. Não diferencia maiúsculas. Veja Moedas.
providerstring—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).
settlementstring—"direct" ou "custody". Padrão: o modo dos fundos do projeto.
payment_methodsstring—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.
emailstring—Email do comprador (validado), repassado ao provedor.
descriptionstring—Até 500 caracteres. Exibido ao comprador e devolvido nos webhooks.
success_urlstring—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_urlstring—URL http(s) absoluta, repassada ao provedor para um pagamento cancelado.
callback_urlstring—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
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
}

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.

Na criaçãoVerificamos o provedor. Id desconhecido → 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.
Quando o comprador abre/pay/:id/go?provider=… verifica de novo e redireciona o comprador para o checkout do próprio provedor.
AlternativaSe o provedor recusar naquele momento (ex.: indisponível no país do comprador), o comprador cai na nossa página de pagamento com o aviso "PayPal está indisponível agora" e os demais métodos.

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

providerMétodoOnde funcionaMínimo*
stripeCartão, Apple Pay, Google PayUS / EU2 USD
paypalPayPalEUA5 USD
revolutRevolutEU / EEA6 EUR
coinbaseCoinbase PayGlobal2 USD
cashappCash AppEUA2 USD
robinhoodRobinhoodEUA5 USD
klarnaKlarna (Pay Now)Suécia125 SEK
idealiDEALHolanda46 EUR
banxaCartão, transferência bancáriaGlobal11 USD
transakCartão, transferência bancária, UPIGlobal30 USD
binance, blockchaincom, topper, meld, alchemypay, sardine, particleCartão via parceirovaria10–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 currencySubsaldo 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 NGNcreditado 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

ModoVocê recebeExemplo: 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 · DiretoIgual — USDC na Polygon para a carteira do projeto; o painel mostra o pedido em EUR≈ 107 USDC on-chain
Conta · Guardado na UTOPAYSaldo interno na moeda do pedido (valor × 95.5%) se ela tiver subsaldo próprio; senão, em USD pela cotação atual95.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

CampoObservações
coin ✓Ticker de /v1/crypto/coins
amount + currencyPreço em moeda fiduciária (qualquer uma das moedas), convertido na cripto pela cotação atual
amount_coinOu o valor exato na cripto (em vez de amount)
payout_addressSua 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_urlComo em Criar um pagamento
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 } }
  • Redirecione o comprador para checkout_url (valor, rede, endereço, QR, status ao vivo) — ou mostre crypto.address e crypto.amount_coin na sua própria página.
  • Status: pending (com crypto.detected: true assim que a transferência é vista, antes das confirmações) → paid. Se chegar menos que o solicitado (falta de mais de 1%), o status é underpaid e o evento payment.underpaid — o dinheiro já está na sua carteira, a decisão é sua.
  • Webhooks, GET /v1/payments/:id e chaves de teste funcionam como nos pagamentos com cartão. Transferências abaixo de minimum ou 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.

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']);

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/balancesSaldo por moeda
GET /api/merchants/:id/balances/transactionsExtrato
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/withdrawalsSolicitaçõ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.

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.

EventoQuando
payment.succeededFundos recebidos (direto e guardado)
payment.expiredNã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.underpaidPedido cripto recebeu menos que o solicitado (enviado aos endpoints inscritos em payment.succeeded)
payment.failedPagamento falhou (atualmente, de simulações no modo de teste)
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 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

  1. Crie uma chave secreta de teste (utopay_sk_test_…) e chame POST /v1/payments normalmente — todas as validações (moeda, provedor) são as mesmas.
  2. checkout_url aponta para uma página sandbox (/sandbox/ord_test_…). Clique em Simulate payment ou Simulate failure.
  3. 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.

CampoSignificado
idord_… (ord_test_… no modo de teste)
statuspending → 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_testCriado com chave de teste
amount, currencyO que o comprador paga
email, descriptionComo enviado
checkout_urlPara onde enviar o comprador (ao provedor ou à nossa página)
payment_page_urlSempre a nossa página de pagamento com todos os métodos
provider, routingMétodo escolhido e como o comprador é direcionado — veja roteamento
settlement, payout_walletdirect (sua carteira) ou custody (carteira da plataforma)
payout_coin, payout_networkUSDC, polygon
feesDivisã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_assetQuanto realmente chegou / foi repassado à sua carteira e em qual ativo (após o pagamento)
tx_hash, payout_tx_hashHashes das transações de entrada e de repasse
receiving_addressEndereço de recebimento de uso único deste pedido
expires_atQuando um pedido não pago passa a expired (ms Unix)
success_url, cancel_url, created_at, updated_atComo enviado / ms Unix

Todos os endpoints públicos

EndpointAutent.Finalidade
POST /v1/pay—Pagamento sem conta
POST /v1/paymentsskCriar um pagamento
GET /v1/payments/:idskUm pagamento (com verificação do status real)
GET /v1/paymentsskListar pagamentos
GET /v1/providers?amount=&currency=—Métodos disponíveis agora
GET /v1/crypto/coins—Moedas e redes do gateway cripto
POST /v1/crypto/payments / POST /v1/crypto/paysk / —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

4.5%
por pagamento — processamento incluído
  • 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.

StatusSignificado
400Dados 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.
401Chave ausente, malformada ou revogada; sem sessão no painel.
403Chave pk onde é preciso sk; projeto inativo; sem acesso.
404Não encontrado ou pertence a outro projeto.
429Muitas tentativas de login / cadastro — tente de novo em um minuto.
503Rede de pagamentos temporariamente indisponível — tente de novo com espera progressiva.
500Erro de configuração do servidor — fale com o suporte.