Cobrança em cripto (USDT e USDC)
Com payment_method: "crypto" a cobrança é paga em USDT ou USDC, para quem não tem PIX. O comprador
recebe um endereço de depósito e um QR Code; o dinheiro vai direto para a carteira que você
cadastrou, na hora.
Esta página descreve o contrato público da cobrança em cripto. A feature só vale depois de liberada
na sua conta; até lá a criação responde 503 crypto_charges_paused ou 503 crypto_unavailable.
Repasse direto: a Lezty nunca guarda
- Cada cobrança ganha um endereço de depósito próprio. O que o comprador envia é dividido na origem: sua parte vai para a sua carteira e a taxa da Lezty Pay vai para a carteira dela, no mesmo envio.
- A cobrança em cripto não gera saldo na Lezty Pay: o dinheiro nunca passa por ela.
- Estorno não é suportado.
POST /v1/transactions/{id}/refundresponde409 refund_unsupported_for_payment_method. Devolução é combinada entre você e o comprador, fora da Lezty Pay. Também não existe chargeback nem MED em cripto. - Split entre sellers não vale em cripto:
splits[]é400 splits_unsupported_for_payment_method.
Redes, moeda e mínimo
| Moeda | USDT ou USDC, escolhida em crypto.coin (padrão usdt). As duas valem US$ 1 |
| Redes | bsc (BEP20), polygon, arbitrum (Arbitrum One) e optimism (OP Mainnet). Não há Tron nem Base |
| Moedas por rede | bsc, polygon e arbitrum: USDT e USDC. optimism: só USDC (a rede tem duas versões de USDT e o comprador poderia mandar a errada); usdt na Optimism é 400 unsupported_coin |
| Taxa | 4% + US$ 0,50 por venda, igual em todas as redes e moedas |
| Mínimo por cobrança | US$ 5 (500 centavos de dólar da moeda escolhida). Abaixo disso é 400 amount_too_small |
| Prazo | 30 minutos, fixo. expires_in é ignorado |
| Quem pode | Conta com KYC aprovado |
Taxa
A taxa padrão é de 4% + US$ 0,50 por venda. Ela já inclui os custos do provedor e da rede: não
há cobrança extra para você nem para o comprador. Quem tem taxa negociada paga a negociada. A taxa é
congelada na criação, como no PIX. amount, fee e net da cobrança vêm em reais, convertidos
pela cotação do dia, e o valor na stablecoin vem em crypto. USDT e USDC têm a mesma taxa, o
mesmo mínimo, o mesmo prazo e o mesmo tratamento de pagamento a menor.
Sua carteira
Antes de vender em cripto você cadastra uma carteira no painel, em polygon ou bsc. O mesmo endereço
recebe USDT e USDC: não existe carteira por moeda. Arbitrum e Optimism não pedem cadastro: a
cobrança nessas redes usa o endereço 0x da sua carteira ativa e fora da carência em polygon
(ou, sem ela, em bsc), sem carência nova. O cadastro é só pelo
painel (sessão), não por chave de API: POST /v1/me/crypto-wallets pede network, address e
confirm_network: true. Regras:
- Uma carteira ativa por rede. Trocar é remover e cadastrar de novo.
- Cada carteira diz para que serve em
uses:polygonsó recebe cobrança (["charge"]),bscrecebe e saca (["withdrawal", "charge"]) etronsó saca (["withdrawal"]). Carteiratronnão serve para cobrança: não existe Tron aqui. - Carteira nova ou trocada tem carência de 48 h (
usable_from) antes de poder receber. Até lá a criação responde409 crypto_wallet_not_usable, comdetails.usable_from. - Sem carteira na rede pedida, a resposta é
409 crypto_wallet_missing. Emarbitrumeoptimismisso quer dizer sem carteira0xativa empolygonnem embsc; com a carteira ainda na carência,409 crypto_wallet_not_usable. - Use carteira comum (MetaMask, Trust, corretora). Carteira de contrato (por exemplo uma Safe) pode não existir em outra rede: o endereço é o mesmo, mas o contrato só vive onde foi criado, e o que chegar em Arbitrum ou Optimism pode ficar preso.
- O endereço é congelado na cobrança: remover a carteira depois não muda para onde as cobranças pendentes são repassadas.
- Confira a rede ao cadastrar. Uma carteira de corretora que não aceita a rede escolhida pode não receber o dinheiro.
Moeda da cobrança: USDT ou USDC
crypto.coin é opcional e aceita usdt ou usdc. Sem ele a cobrança é em USDT, como sempre
foi: nenhuma integração existente muda. Outro valor é 400 validation_failed.
- A moeda escolhida vale para a cobrança inteira: o endereço de depósito, o valor exato e o aviso ao comprador são dessa moeda.
- Os campos que terminam em
_usdt(amount_usdt,received_usdt,min_usdt...) não foram renomeados. Em cobrança USDC eles valem centavos de dólar do USDC. Leiacrypto.coin(ou o fim decrypto.ticker) para saber qual moeda o número representa. crypto.tickerreflete a moeda e a rede:bep20/usdt,bep20/usdc,polygon/usdt,polygon/usdc,arbitrum/usdc,arbitrum/usdt0ouoptimism/usdc.arbitrum/usdt0é o USDT oficial da Arbitrum (USDT0): para o comprador e para o campocrypto.coincontinua sendousdt. Cobranças criadas antes do USDC leemcoin: "usdt".- Repetir uma
Idempotency-Keycomcoin: "usdc"sobre um corpo que não tinhacoiné409 idempotency_conflict. Jácoin: "usdt"explícito repete uma chave que foi usada semcoin.
Valor em reais ou em dólar da stablecoin
Você informa o valor em uma das duas formas:
currencyausente ouBRL:amountem centavos de reais. A Lezty Pay converte para a stablecoin pela cotação do momento da criação, e essa cotação vale por 30 minutos (o prazo da cobrança).currency: "USDT":amountem centavos de dólar da moeda escolhida (5000são 50,00 USDT ou 50,00 USDC, conformecrypto.coin). O nomeUSDTaqui é o de sempre; vale também para USDC.
O valor na stablecoin é fixado na criação e não muda mais. Qualquer outra moeda é
400 unsupported_currency.
Criar a cobrança
curl "$LM_API_URL/v1/transactions" \
-H "Authorization: Bearer $LM_API_KEY" \
-H "Idempotency-Key: pedido-1042" \
-H "Content-Type: application/json" \
-d '{
"payment_method": "crypto",
"amount": 27000,
"currency": "BRL",
"crypto": { "network": "polygon", "coin": "usdc" },
"customer": { "name": "Ana", "email": "[email protected]" }
}'
O corpo, sozinho:
{
"payment_method": "crypto",
"amount": 27000,
"currency": "BRL",
"crypto": { "network": "polygon", "coin": "usdc" },
"customer": { "name": "Ana", "email": "[email protected]" }
}
crypto.networké obrigatório:bsc,polygon,arbitrumouoptimism. Outro valor é400 unsupported_network; sem ele,400 validation_failed.crypto.coiné opcional:usdt(padrão) ouusdc. Emoptimismsóusdcexiste: comusdt(ou semcoin) a resposta é400 unsupported_coin.Idempotency-Keyé obrigatório, como no PIX.customer.emailé obrigatório: é o único canal de contato quando o pagamento chega a menor.customer.documenté opcional e não é validado (o comprador pode ser estrangeiro).- O objeto
pixnão é aceito (400 validation_failed). - O replay da mesma chave e do mesmo corpo devolve a mesma cobrança, com o mesmo endereço; corpo diferente é
409 idempotency_conflict.
Na resposta, payment_method é crypto, pix e voucher vêm null e o bloco crypto traz os
dados de pagamento:
"crypto": {
"network": "polygon",
"ticker": "polygon/usdc",
"coin": "usdc",
"amount_usdt": 5000,
"received_usdt": 0,
"detected_usdt": 0,
"missing_usdt": 5000,
"partial": false,
"price_brl_per_usdt": "5.400000",
"requested": { "currency": "BRL", "amount": 27000 },
"address_in": "0x76f3…6f6A5",
"minimum_usdt": 133,
"qr_base64": "iVBOR…",
"seller_address_masked": "0xFB19…93Ebd",
"expires_at": "2026-10-20T15:30:00.000Z",
"partial_deadline": null,
"paid_late": false,
"deposits": [{ "txid": "0x…", "value_usdt": 2500, "confirmed": true, "at": "2026-10-20T15:10:00.000Z" }]
}
Os valores *_usdt são inteiros em centavos de dólar da moeda da cobrança (coin). address_in e qr_base64 vêm completos só
enquanto a cobrança está pending; depois, null. O endereço da sua carteira vem sempre
mascarado. deposits traz no máximo os 20 últimos. Mostre ao comprador o valor exato, a moeda, a rede e
o endereço, e avise o que está em "Moeda ou rede errada" abaixo. O mesmo objeto vem em todas as consultas e
no webhook (no webhook, qr_base64 vem sempre null).
Estados
Os status são os mesmos do PIX. refunded e chargeback não acontecem em cripto.
| Situação | O que acontece |
|---|---|
| Pagamento detectado na rede, sem confirmação | Continua pending; crypto.detected_usdt sobe |
| Pago por inteiro (tolerância de 1%) | paid, e transaction.paid é emitido. O dinheiro já está na sua carteira |
| Pagamento a menor (parcial) | Continua pending, com crypto.partial: true e crypto.received_usdt. O comprador completa no mesmo endereço em até 24 h do primeiro depósito (crypto.partial_deadline) |
| Prazo acabou sem pagar | expired. Se houve parcial, o que chegou já foi repassado a você; nada é desfeito |
Pago depois de expired, completando o valor |
paid, com crypto.paid_late: true. Vale a cotação da criação |
Depósito extra em cobrança paid |
Nada muda. O excedente já foi repassado; devolver é com você |
| Depósito em outra moeda ou outra rede da cobrança (USDT numa cobrança USDC, ou o inverso) | Não paga e não é registrado. A cobrança segue como estava; a Lezty Pay é alertada. Devolver é combinado à mão entre você e o comprador |
partial não é um status novo: é um sinal dentro de pending. Decida a entrega do pedido só em
paid.
Moeda ou rede errada, ou valor abaixo do mínimo: dinheiro parado
Cripto não tem estorno. Avise o comprador, na sua tela, que:
- Só a moeda e a rede da cobrança contam. Se a cobrança é USDC na Polygon, mandar USDT na Polygon também perde o dinheiro, assim como USDC em outra rede (por exemplo em Tron, ou em BSC para um endereço Polygon; os endereços de BSC, Polygon, Arbitrum e Optimism têm a mesma forma, mas cada envio só vale na rede da cobrança). O dinheiro fica parado ou se perde, e a Lezty Pay não tem como recuperar.
- Existe um envio mínimo da rede (
crypto.minimum_usdt, por exemplo 1,33 USDT em BSC e 1,00 em Arbitrum e Optimism): abaixo dele a rede descarta o valor. - Enviar a menos não perde nada: o comprador completa no mesmo endereço.
Onde está o meu dinheiro
- O dinheiro vai direto para a sua carteira, na hora, na rede da venda. A Lezty Pay não segura
nada. Na API,
crypto.deposits[].txid_outtraz a transação do repasse quando a rede já a informou (nullantes disso); no painel ela vira o link "Ver o repasse" no explorador da rede (polygonscan.com, bscscan.com, arbiscan.io ou optimistic.etherscan.io). - Para ver na MetaMask: escolha a rede da venda (por exemplo Polygon) e importe o token pelo contrato oficial. Confira sempre o contrato no explorador antes de importar.
| Rede | USDT | USDC |
|---|---|---|
| Polygon | 0xc2132D05D31c914a87C6611C10748AEb04B58e8F |
0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
| BSC (BEP20) | 0x55d398326f99059fF775485246999027B3197955 |
0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d |
| Arbitrum One | 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 (USDT0) |
0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| Optimism | não existe | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
- Se o endereço cadastrado é de corretora (por exemplo Coinbase), ela só credita a moeda e a rede que aceita. A Coinbase credita USDT na Polygon (testado em 21/10/2026). Confirme na sua corretora antes de cadastrar.
- Para transformar em reais: mande para uma corretora na mesma rede, venda e saque por PIX. Mover o dinheiro exige um pouco da moeda de gas da rede: POL na Polygon, BNB na BSC e ETH na Arbitrum e na Optimism.
Link de pagamento
Em links de pagamento você marca cripto por link, com
accepted_methods: ["pix", "crypto"]. O comprador escolhe PIX ou cripto e, em cripto, a moeda
(USDT ou USDC; na Optimism só USDC) e a rede. Você não configura a moeda por link: o link oferece as que estão prontas
(cotação e mínimo da rede atendidos). Quem integra a página própria lê crypto.coins e
crypto.offers em GET /pay/v1/links/{slug} (veja links de pagamento). Vale
só para produto em BRL e link sem buyer_pays_fee (senão 400 validation_failed com
param: accepted_methods). Se o preço do produto fica abaixo de US$ 5, a opção cripto não aparece.
Erros
| Resposta | Quando |
|---|---|
400 amount_too_small |
Menos de US$ 5 |
400 unsupported_network |
crypto.network fora de bsc, polygon, arbitrum e optimism |
400 unsupported_coin |
Moeda que a rede não tem (usdt na optimism) |
400 unsupported_currency |
currency fora de BRL e USDT |
400 validation_failed |
Sem crypto.network, crypto.coin fora de usdt e usdc, ou com objeto pix |
400 splits_unsupported_for_payment_method |
splits[] em cobrança cripto |
403 kyc_required |
Conta sem KYC aprovado |
409 crypto_wallet_missing |
Sem carteira ativa na rede |
409 crypto_wallet_not_usable |
Carteira em carência (details.usable_from) |
409 crypto_fee_below_cost |
Taxa da conta abaixo do custo (só com taxa negociada errada) |
409 idempotency_conflict |
Mesma chave com corpo diferente (inclui trocar a moeda para usdc) |
409 refund_unsupported_for_payment_method |
Pedido de estorno |
503 crypto_charges_paused |
Cobrança em cripto pausada na plataforma (details.reason) |
503 crypto_unavailable |
Rede indisponível agora (details.reason: fee_address_missing, acquirer_missing, fx_rate_unavailable, fee_address_changed ou quote_failed) |
503 acquirer_unavailable |
O provedor demorou para responder. Espere 60 s e repita com a mesma chave: a mesma cobrança e o mesmo endereço voltam |
Próximo passo
Expiração e Consultar: o ciclo é o mesmo do PIX.
Referência: Cria uma cobrança (PIX, voucher, cripto, cartão ou carteira).