Visão geral da Solit
A Solit recebe pagamentos por PIX e repassa o valor para você. Use pelo painel em
solitpmt.com ou integre a sua
aplicação à API de cobranças: qualquer usuário registrado gera a própria chave de
API no painel dele e passa a receber na conta dele. Não existe cadastro de loja: quem
integra é você.
Todo pagamento recebido fica disponível no saldo em D+1. Até lá, ele aparece em "Valores a entrar" no painel, com a previsão de liberação.
Esta página tem duas partes: o guia do usuário (depósito, saque, chaves PIX e transferência) e o guia de integração do cliente (chave de API, cobranças, webhooks e erros). A API usa JSON em UTF-8, valores em centavos inteiros e datas em ISO-8601 UTC.
Painel do usuário:
https://solitpmt.com/dashboard
Base da API:
https://solitpmt.com/v1
Taxas e limites vigentes (público):
GET https://solitpmt.com/v1/public/pricing
Taxas e limites
Os valores abaixo são lidos de /v1/public/pricing quando a página abre.
| Item | Valor |
|---|---|
| Taxa por pagamento recebido (provedora) | R$ 0,99, descontada do valor |
| Taxa de saque (plataforma) | 2,99% do valor sacado |
| Taxa de saque (provedora, estimada) | ~1% |
| Taxa de transferência | 3% do valor transferido |
| Prazo de liberação | 24 h (D+1) |
| Depósito próprio | R$ 10,00 a R$ 6.000,00 por PIX |
| Cobrança pela API e link | R$ 10,00 a R$ 100.000,00 |
| Valor máximo por PIX (parcela) | R$ 6.000,00 |
| Saque mínimo | R$ 10,00 |
{
"deposit_fee_cents": 99,
"withdraw_fee_bps": 299,
"withdraw_provider_fee_estimate_bps": 100,
"transfer_fee_bps": 300,
"settlement_delay_hours": 24,
"tranche_limit_cents": 600000,
"deposit_min_cents": 1000,
"deposit_max_cents": 600000,
"charge_min_cents": 1000,
"charge_max_cents": 10000000,
"withdraw_min_cents": 1000,
"contact_email": "..."
}
Taxas em bps: 100 bps = 1%.
Valores e formatos
Na API, todo valor em dinheiro é um inteiro em centavos
num campo terminado em _cents. Texto, número com casas decimais ou booleano são recusados.
No painel, os campos de valor aceitam o formato brasileiro:
10é R$ 10,00.10,50e10.50são R$ 10,50.1.234,56é R$ 1.234,56.1.000é recusado (ambíguo).
CPF e CNPJ podem ir com ou sem pontuação, mas precisam ter dígitos verificadores válidos.
Datas vêm em ISO-8601 com fuso (2026-09-16T12:00:00Z). IDs são UUID em texto.
{
"amount_cents": 150000, // R$ 1.500,00
"payer_document": "123.456.789-09",
"created_at": "2026-09-16T12:00:00Z"
}
Conta e acesso
Crie a conta em /registrar com usuário e senha. Ao final, o painel mostra o seu código de recuperação uma única vez: anote. Ele é a única forma de redefinir a senha.
Regras
usuário
De 3 a 32 caracteres: letras, números, ponto, hífen e sublinhado. Maiúsculas e minúsculas não diferenciam contas.
senha
De 8 a 256 caracteres, diferente do usuário. Espaços contam.
sessão
Vale 12 h desde o último uso (no máximo 7 dias). Em Configurações você vê as sessões abertas e pode encerrá-las.
Logo depois do cadastro a conta fica "em preparação" por alguns instantes. Nesse período, depósitos, saques e transferências respondem "Sua conta ainda está sendo preparada".
Na tela de login, clique em "Esqueceu a senha?" e informe:
usuário: meu_usuario
código: ABCDE-FGHIJ-KLMNO-PQRST
nova senha: ********
Depósito por PIX
Em Depositar, informe o valor e o CPF/CNPJ de quem vai pagar. O painel mostra o QR Code e o PIX copia e cola, com a contagem até o código expirar.
Como funciona
- Mínimo de R$ 10,00 e máximo de R$ 6.000,00 por PIX.
- O mesmo CPF/CNPJ pode pagar até R$ 6.000,00 somados em 24 horas.
- A provedora desconta R$ 0,99 de cada pagamento; o resto é o valor líquido.
- Pago o PIX, o status vira "Pagamento recebido" e o valor líquido entra em "Valores a entrar".
- O saldo disponível aumenta quando o pagamento é liberado, em até 24 h (D+1).
- Se o código expirar e você já tiver pago, use "Verificar agora": o pagamento aparece em instantes.
Valor do PIX ........ R$ 100,00
Taxa da provedora ... R$ 0,99
Valor líquido ....... R$ 99,01 (disponível em D+1)
Status possíveis do depósito:
Aguardando pagamento
Prazo do PIX encerrado
Pagamento recebido — em liberação
Creditado
Em devolução
Falhou
Valores a entrar
São os pagamentos já recebidos que ainda não estão no saldo disponível: os seus depósitos e, para quem cobra pela API ou por links de pagamento, as parcelas pagas pelos clientes.
Para cada item o painel mostra:
- tipo (depósito ou cobrança) e a descrição;
- valor bruto, taxa da provedora e valor líquido;
- quando foi pago e a previsão de liberação;
- a marca "atrasado" quando a previsão já passou (a liberação continua a caminho).
O item sai da lista quando o valor entra no saldo disponível, ou se o pagamento for devolvido.
Valores a entrar ........ R$ 1.499,01
próxima liberação: 17/09 14:32
Cobrança · Pedido 1234
bruto R$ 1.500,00 · taxa R$ 0,99 · líquido R$ 1.499,01
Saque
Em Sacar, escolha uma chave PIX cadastrada ou informe uma nova (tipo, chave, nome completo e CPF/CNPJ do titular) e o valor a sacar. Esse valor sai inteiro do seu saldo. "Sacar tudo" preenche o saldo disponível.
Taxas
- Taxa da plataforma: 2,99% do valor sacado (arredondada para cima).
- Taxa da provedora: cerca de 1%, descontada pela provedora no pagamento do PIX.
- Antes de pedir, o painel mostra a estimativa do valor a receber. Depois do pedido vale o valor real da cotação.
Aprovação
Todo saque passa por aprovação do administrador. Enquanto o pedido aguarda aprovação você pode cancelá-lo; o valor reservado volta ao saldo. Pedidos sem aprovação por 7 dias expiram. Você pode ter até 3 pedidos aguardando ao mesmo tempo.
Valor a sacar ............... R$ 1.000,00
Taxa da plataforma (2,99%) .. R$ 29,90
Taxa da provedora (~1%) ..... R$ 9,70
Você recebe ≈ ............... R$ 960,40
Status do pedido:
Aguardando aprovação
Aprovado — em preparação
Em processamento
Concluído — PIX pago
Não concluído — valor devolvido
Recusado · Cancelado · Expirado
Depois da aprovação, o pedido fica "Em processamento" até o PIX ser pago. Se ele não puder ser concluído, o valor volta para o seu saldo e o pedido aparece como "Não concluído — valor devolvido".
Chaves PIX
Em Configurações você cadastra até 10 chaves para reusar nos saques. Depois de salva, a chave aparece só mascarada.
tipo
CPF, CNPJ, e-mail, telefone (com ou sem +55) ou chave aleatória.
titular
Nome completo e CPF/CNPJ de quem recebe. Para chave CPF/CNPJ, o documento é a própria chave.
apelido
(Opcional)
Até 40 caracteres, para achar a chave na hora do saque.
Conta principal · E-mail jo***@exemplo.com
Titular: Maria Souza · ***.***.*89-01
Transferência
Em Transferir, informe o usuário de destino e o valor. O painel mostra a taxa (3%) e quanto o destino recebe; você confirma com a sua senha.
- O valor transferido sai do seu saldo na hora. Para você, a transferência fica "Em processamento" e depois "Concluída".
- O destinatário vê o valor como "A liberar" até ele ficar disponível e, só então, recebe o aviso "Transferência recebida".
- Se a transferência não puder ser concluída, ela aparece como "Não concluída — valor devolvido" e o valor volta para você; para o destinatário, ela aparece como "Não concluída".
- Se a conta de destino não puder receber no momento, o painel avisa "A conta de destino não pode receber agora." e nada sai do seu saldo.
- Não é possível transferir para a própria conta.
Valor transferido .. R$ 200,00
Taxa (3%) .......... R$ 6,00
Destino recebe ..... R$ 194,00
Notificações e segurança
O sino do painel mostra só os avisos da sua conta: pagamento recebido (valor a entrar, com a previsão de liberação), depósito creditado, saque aprovado, recusado ou concluído, transferência recebida, ajuste de saldo, senha alterada e outros. O painel verifica novidades a cada 10 segundos e pode mostrar avisos do navegador, se você permitir.
- Transferência, troca de senha, novo código de recuperação e "encerrar todas as sessões" pedem a sua senha.
- Nenhum aviso traz o documento ou a chave PIX completos.
- Muitas tentativas de login erradas bloqueiam novas tentativas por alguns minutos.
Pagamento de R$ 99,01 recebido — liberação prevista em 17/09 às 14:32.
Como integrar
A integração é de quem usa a Solit: não existe cadastro de loja e nada precisa ser pedido ao administrador. Você se registra, gera a sua chave de API no seu painel e passa a cobrar pela API. Todo pagamento das suas cobranças entra na sua conta, com as mesmas taxas, o mesmo prazo de liberação (D+1) e o mesmo extrato do painel.
Passo a passo
- Crie a sua conta em
/registrar(ou entre na que você já tem). - No painel, abra Integração e clique em "Gerar chave". A chave é confirmada com a sua senha e aparece uma única vez: guarde-a no servidor da sua aplicação. Você pode ter até 5 chaves ativas e revogar qualquer uma na hora.
- Ainda em Integração, gere o segredo do webhook e salve a URL
https://que vai receber os avisos. - Crie a cobrança com
POST /v1/merchant/chargese mostre o PIX ao pagador. - Trate os eventos
pagamento.recebidoepagamento.liberadoconferindo a assinatura de cada aviso.
A chave é pessoal e vale como senha: quem a tiver cobra em seu nome. Se desconfiar de vazamento, gere outra e revogue a antiga no painel.
curl -X POST https://solitpmt.com/v1/merchant/charges \
-H "X-Api-Key: slt_..." \
-H "Content-Type: application/json" \
-d '{"amount_cents": 1000,
"payer_document": "12345678909",
"external_ref": "pedido-1",
"description": "Primeiro teste"}'
Onde gerar a chave, no painel:
https://solitpmt.com/dashboard#integracao
Autenticação
A chave de API (começa com slt_)
é gerada por você mesmo, no seu painel, em "Integração"; ela é mostrada uma única vez. O segredo
de assinatura dos webhooks também é gerado ali. Guarde os dois no servidor da sua aplicação,
nunca no navegador.
X-Api-Key
Cabeçalho com a chave. Alternativa: Authorization: Bearer <chave>.
Content-Type
application/json em toda requisição com corpo.
Você pode manter até 5 chaves ativas, cada uma com o seu rótulo — os rótulos servem para você separar as suas aplicações e revogar uma sem derrubar as outras. Todas as chaves da sua conta veem as mesmas cobranças e os mesmos eventos, então uma chave entregue a um terceiro lê e cancela tudo. Para trocar a chave, gere a nova no painel e revogue a antiga: a revogação vale na hora.
curl https://solitpmt.com/v1/merchant/me \
-H "X-Api-Key: slt_..."
{
"id": "0192f0c4-...",
"name": "maria",
"status": "active",
"webhook": {"configured": true, "format": "solit_v1"}
}
Conferência rápida da integração:
GET /v1/merchant/health
{"ok": true,
"merchant": {"id": "...", "name": "maria", "status": "active"},
"webhook": {"configured": true, "format": "solit_v1",
"pending": 0, "delivered": 12, "dead": 0}}
POST /v1/merchant/charges
Cria uma cobrança e já gera o primeiro PIX. Responde 201 quando a cobrança é nova e
200 quando a mesma external_ref já existia com os mesmos dados (nesse caso,
se o PIX anterior falhou, a Solit tenta gerar de novo).
Campos
amount_cents
(Obrigatório)
Inteiro de 1000 (R$ 10,00) a 10000000 (R$ 100.000,00).
payer_document
(Obrigatório)
CPF ou CNPJ de quem paga, com dígitos verificadores válidos.
external_ref
(Obrigatório)
Sua referência (1 a 100 caracteres, sem espaços). É única por conta.
description
(Opcional)
Até 200 caracteres; aparece para o pagador.
expires_in_hours
(Opcional)
Validade da cobrança, de 1 a 720 horas (padrão 24).
Mostre ao cliente o payment_url (página de pagamento da Solit) ou o QR e o copia e cola de
current_tranche. Se o primeiro PIX não puder ser gerado, a cobrança é criada mesmo assim,
com current_tranche: null e tranche_error.
curl -X POST https://solitpmt.com/v1/merchant/charges \
-H "X-Api-Key: slt_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pedido-1234" \
-d '{"amount_cents": 150000,
"payer_document": "12345678909",
"external_ref": "pedido-1234",
"description": "Pedido 1234",
"expires_in_hours": 24}'
HTTP/1.1 201 Created
{
"id": "0192f0c5-...",
"external_ref": "pedido-1234",
"status": "started",
"situation": "aguardando",
"amount_cents": 150000,
"paid_cents": 0,
"remaining_cents": 150000,
"completed": false,
"description": "Pedido 1234",
"payment_url": "https://solitpmt.com/pagar/Xy7...",
"expires_at": "2026-09-17T12:00:00Z",
"created_at": "2026-09-16T12:00:00Z",
"current_tranche": {
"seq": 1,
"deposit_id": "a1b2c3...",
"amount_cents": 150000,
"phase": "awaiting_payment",
"pix_copy_paste": "00020126...",
"qr_url": "https://solitpmt.com/v1/public/qr/....png",
"window_expires_at": "2026-09-16T12:20:00Z"
},
"tranches": [
{"seq": 1, "deposit_id": "a1b2c3...",
"amount_cents": 150000, "status": "open",
"confirmed_at": null}
]
}
Consultar cobranças
GET /v1/merchant/charges/{id} devolve a cobrança completa. A listagem
GET /v1/merchant/charges aceita filtros e é paginada.
status
open, started, paid, expired ou canceled (vários separados por vírgula).
external_ref
Busca pela sua referência.
limit / cursor
Até 100 itens por página (padrão 20). Use next_cursor da resposta para a próxima página.
O copia e cola e o QR só vêm enquanto o PIX pode ser pago. Nenhuma resposta traz prazo de liberação; a previsão aparece em "Valores a entrar" no seu painel.
curl "https://solitpmt.com/v1/merchant/charges?status=started&limit=20" \
-H "X-Api-Key: slt_..."
{
"items": [ { "id": "...", "external_ref": "pedido-1234", ... } ],
"next_cursor": "MjAyNi0wOS0xNlQ..."
}
Parcelas
Um PIX tem no máximo R$ 6.000,00. Cobranças maiores são pagas em parcelas, uma de cada vez, e nenhuma parcela fica abaixo de R$ 10,00.
- A próxima parcela fica disponível assim que a anterior é liberada (evento
pagamento.liberado). tranches[].status:open(parcela gerada, ainda não liberada),confirmed(parcela liberada) oufailed(o PIX falhou, expirou sem pagamento ou foi pago depois do prazo; nesse último caso, se o valor for aceito na cobrança depois da análise, a parcela passa aconfirmede você recebepagamento.liberado). Não existem outros valores.confirmedeconfirmed_atmarcam a liberação da parcela, o mesmo marco do eventopagamento.liberado.POST /v1/merchant/charges/{id}/tranchesgera a próxima parcela, ou um novo PIX quando o anterior expirou ou falhou.- A página
payment_urlfaz isso sozinha para o pagador. - Respostas
409:tranche_open(já existe parcela aberta),order_locked(outra geração em curso),nothing_due(cobrança quitada),invalid_state.
parcela 1 ... R$ 6.000,00
parcela 2 ... R$ 6.000,00
parcela 3 ... R$ 3.000,00
curl -X POST https://solitpmt.com/v1/merchant/charges/0192f0c5-.../tranches \
-H "X-Api-Key: slt_..."
Cancelar cobrança
POST /v1/merchant/charges/{id}/cancel com {"reason": "..."} (opcional, até 200 caracteres).
Enquanto houver um PIX que ainda pode ser pago, ou um pagamento em andamento, a resposta é
409 tranche_in_flight: espere o PIX expirar ou o pagamento ser confirmado.
Valores já pagos não são devolvidos pelo cancelamento. Você recebe o evento cobranca.cancelada.
curl -X POST https://solitpmt.com/v1/merchant/charges/0192f0c5-.../cancel \
-H "X-Api-Key: slt_..." \
-H "Content-Type: application/json" \
-d '{"reason": "cliente desistiu"}'
Situações
O campo situation resume a cobrança no vocabulário da integração:
| situation | Significado |
|---|---|
aguardando | Esperando pagamento (inclusive pagamento parcial). |
recebido | O cliente pagou a parcela atual; a liberação chega cerca de 24 h depois. |
liberado | Cobrança quitada e liberada. Só aparece com o valor total pago. |
falhou | O PIX falhou ou expirou sem pagamento. |
cancelado | Cobrança cancelada. |
O campo status é o estado técnico: open, started, paid,
expired ou canceled.
12:00 aguardando (cobrança criada, PIX gerado)
12:03 recebido (cliente pagou; evento pagamento.recebido)
+24 h liberado (evento pagamento.liberado)
Webhooks
Se você tiver URL de webhook configurada no painel, a Solit envia um POST JSON a cada evento. Só respostas
2xx contam como entregues; as outras são repetidas com intervalo crescente.
| Evento | Quando |
|---|---|
pagamento.recebido | Em todo pagamento, assim que o cliente paga. |
pagamento.liberado | Cerca de 24 h depois (D+1), quando a parcela é liberada. Traz os totais atualizados. |
pagamento.falhou | O PIX foi devolvido, expirou ou deu erro. |
cobranca.cancelada | A cobrança foi cancelada. |
- A ordem é garantida por referência:
liberadonunca chega antes derecebidoda mesma parcela. - O mesmo
event_idpode chegar mais de uma vez: trate cada um só uma vez. - Tempo limite de 15 s por entrega, sem seguir redirecionamentos.
GET /v1/merchant/webhook-eventslista as entregas;POST /v1/merchant/webhook-events/{id}/redeliverreenvia uma delas.valor_centsé o valor pago emrecebido, o valor da parcela emliberado/falhouenullemcancelado.
POST /seu/webhook
Content-Type: application/json
User-Agent: Solit-Webhooks/1
X-Solit-Event: 0192f0d0-...
X-Solit-Event-Type: pagamento.liberado
X-Solit-Timestamp: 1789574400
X-Solit-Signature: v1=5f2c...
{
"event_id": "0192f0d0-...",
"type": "pagamento.liberado",
"reference": "a1b2c3...",
"created_at": "2026-09-17T12:03:10Z",
"data": {
"cobranca_id": "Xy7...",
"charge_id": "0192f0c5-...",
"referencia_externa": "pedido-1234",
"deposito_id": "a1b2c3...",
"valor_cents": 150000,
"status": "liberado",
"motivo": null,
"total_cents": 150000,
"pago_cents": 150000,
"restante_cents": 0,
"quitado": true,
"parcela_seq": 1
}
}
Verificar assinaturas
Sempre confira a assinatura com o corpo bruto recebido (os bytes, antes de interpretar o JSON) e compare em tempo constante.
solit_v1 (recomendado)
X-Solit-Signature = "v1=" + hex(HMAC-SHA256(segredo, timestamp + "." + corpo)), com o
timestamp de X-Solit-Timestamp (segundos Unix). Recuse eventos com mais de 300 s de diferença
do seu relógio.
nexogate_v1 (compatibilidade)
Formato mantido para integrações antigas. Corpo {"event_id", "tipo", "referencia", "dados"}
e cabeçalhos X-Nexogate-Event e X-Nexogate-Signature = hex(HMAC-SHA256(segredo, corpo)).
Como não tem timestamp, deduplique pelo event_id. Prefira solit_v1 em integrações novas.
import hashlib
import hmac
import time
def _bytes(valor: str) -> bytes:
# cabeçalho vindo de fora: compare sempre em bytes (str com acento faria compare_digest falhar)
return valor.encode("utf-8", "replace")
def verificar_solit_v1(segredo: str, corpo: bytes, cabecalhos) -> bool:
ts = cabecalhos.get("X-Solit-Timestamp", "")
recebida = cabecalhos.get("X-Solit-Signature", "")
# só dígitos ASCII e tamanho curto (isdigit sozinho aceita "²" e números enormes)
if not (ts.isascii() and ts.isdigit() and len(ts) <= 12):
return False
if abs(time.time() - int(ts)) > 300:
return False
mac = hmac.new(segredo.encode(), f"{ts}.".encode() + corpo, hashlib.sha256)
return hmac.compare_digest(("v1=" + mac.hexdigest()).encode(), _bytes(recebida))
def verificar_formato_compat(segredo: str, corpo: bytes, cabecalhos) -> bool:
recebida = cabecalhos.get("X-Nexogate-Signature", "")
mac = hmac.new(segredo.encode(), corpo, hashlib.sha256)
return hmac.compare_digest(mac.hexdigest().encode(), _bytes(recebida))
const crypto = require('node:crypto');
function iguais(a, b) {
const x = Buffer.from(a);
const y = Buffer.from(b);
return x.length === y.length && crypto.timingSafeEqual(x, y);
}
// corpoBruto: Buffer com o corpo exatamente como chegou
function verificarSolitV1(segredo, corpoBruto, cabecalhos) {
const ts = cabecalhos['x-solit-timestamp'] || '';
const recebida = cabecalhos['x-solit-signature'] || '';
if (!/^\d+$/.test(ts) || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const mac = crypto.createHmac('sha256', segredo)
.update(ts + '.')
.update(corpoBruto)
.digest('hex');
return iguais('v1=' + mac, recebida);
}
function verificarFormatoCompat(segredo, corpoBruto, cabecalhos) {
const recebida = cabecalhos['x-nexogate-signature'] || '';
const mac = crypto.createHmac('sha256', segredo).update(corpoBruto).digest('hex');
return iguais(mac, recebida);
}
Idempotência
Repetir uma requisição nunca cria cobrança em dobro. A chave natural é a external_ref:
a mesma referência com o mesmo valor e documento devolve a cobrança existente (200);
com dados diferentes, 422 idempotency_mismatch.
Opcionalmente, envie também o cabeçalho Idempotency-Key (8 a 128 caracteres:
letras, números e _ . : -). A mesma chave com o mesmo corpo devolve a resposta gravada,
com o cabeçalho Idempotent-Replay: true. Uma chave em uso por outra requisição simultânea
devolve 409 idempotency_in_progress.
# 1ª tentativa: tempo esgotado na sua rede
POST /v1/merchant/charges Idempotency-Key: pedido-1234
# 2ª tentativa com a mesma chave e o mesmo corpo
POST /v1/merchant/charges Idempotency-Key: pedido-1234
HTTP/1.1 201 Created
Idempotent-Replay: true
API de compatibilidade
Para integrações antigas continuam disponíveis POST /api/v1/cobrancas,
GET /api/v1/cobrancas/{cobranca_id} e GET /api/v1/saude, com a mesma chave de API.
Os erros vêm no formato {"detail": "..."}. Integrações novas devem usar /v1/merchant.
Campos de POST /api/v1/cobrancas
valor_cents
(Obrigatório)
Inteiro (ou texto só com dígitos) de 1000 a 10000000.
documento
(Obrigatório)
CPF ou CNPJ do pagador, com dígitos verificadores válidos.
referencia_externa
(Obrigatório)
Sua referência única.
descricao / validade_horas
(Opcionais)
Descrição (até 200 caracteres) e validade de 1 a 720 horas (padrão 24).
Respostas: 201 (nova), 200 (mesma referência e dados), 409 (referência já usada
com outros dados), 502 (a cobrança foi criada, mas o PIX não; repita a mesma referência).
situacao vira liberado só com a cobrança quitada; cobrança cancelada aparece como
falhou com cancelada: true.
curl -X POST https://solitpmt.com/api/v1/cobrancas \
-H "X-Api-Key: slt_..." \
-H "Content-Type: application/json" \
-d '{"valor_cents": 5000, "documento": "12345678909",
"referencia_externa": "pedido-99"}'
{
"cobranca_id": "Xy7...",
"referencia_externa": "pedido-99",
"situacao": "aguardando",
"valor_cents": 5000,
"url_pagamento": "https://solitpmt.com/pagar/Xy7...",
"pago_cents": 0,
"restante_cents": 5000,
"deposito_id": "a1b2c3...",
"pix_copia_cola": "00020126...",
"qr_url": "https://solitpmt.com/v1/public/qr/....png",
"expira_em": 1789574400,
"total_cents": 5000,
"quitado": false,
"cancelada": false,
"charge_id": "0192f0c5-..."
}
GET /api/v1/saude
{"ok": true,
"fila_de_avisos": {"pendentes": 0, "entregues": 12, "travados": 0}}
Erros
As rotas /v1 respondem erros sempre no mesmo formato, com um code estável,
uma mensagem em português e detalhes quando houver. Informe o request_id ao suporte.
| HTTP | code | Quando |
|---|---|---|
| 400 | bad_request | JSON malformado |
| 401 | unauthorized | chave ausente ou inválida |
| 404 | not_found | cobrança inexistente ou de outra conta |
| 409 | invalid_state, tranche_open, tranche_in_flight, order_locked, nothing_due | a operação não cabe no estado atual |
| 409 | account_not_ready | a conta que recebe ainda não pode receber; tente mais tarde |
| 409 | document_busy | outra cobrança com o mesmo CPF/CNPJ está sendo gerada; tente de novo em instantes |
| 409 | account_frozen | a conta que recebe está em revisão; fale com o suporte |
| 413 / 415 | payload_too_large, unsupported_media_type | corpo acima de 64 KiB ou sem JSON |
| 422 | validation_error, invalid_document, idempotency_mismatch, provider_rejected, provider_blocked | dados inválidos ou recusados pela provedora |
| 429 | rate_limited | limite de uso; respeite Retry-After |
| 502 / 504 | provider_unavailable, provider_timeout | a provedora não respondeu; nada foi cobrado |
| 503 | feature_paused, service_unavailable | serviço pausado temporariamente |
provider_blocked significa que a provedora não aceita gerar PIX para aquele documento:
não adianta repetir; combine outra forma de pagamento com o cliente.
HTTP/1.1 422 Unprocessable Entity
{
"error": {
"code": "validation_error",
"message": "Dados inválidos.",
"details": {
"fields": [{"loc": ["body", "amount_cents"],
"msg": "deve ser no mínimo 1000"}]
}
},
"request_id": "9f1c2a7e-..."
}
Limites de uso
Acima destes limites a API responde 429 rate_limited com o cabeçalho Retry-After
(em segundos).
| Regra | Limite |
|---|---|
| Rotas de integração | 120 requisições por minuto por chave |
| Criação de cobranças | 30 por minuto por chave |
| Página de pagamento | 1 novo PIX a cada 8 s por link |
Toda resposta da API tem Cache-Control: no-store e o cabeçalho X-Request-Id.
Veja o status dos serviços.
Contato: —