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.

Links úteis

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.

ItemValor
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ência3% do valor transferido
Prazo de liberação24 h (D+1)
Depósito próprioR$ 10,00 a R$ 6.000,00 por PIX
Cobrança pela API e linkR$ 10,00 a R$ 100.000,00
Valor máximo por PIX (parcela)R$ 6.000,00
Saque mínimoR$ 10,00
GET /v1/public/pricing
{
  "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,50 e 10.50 sã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.

Exemplo
{
  "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".

Esqueci a senha

Na tela de login, clique em "Esqueceu a senha?" e informe:

usuário: meu_usuario
código:  ABCDE-FGHIJ-KLMNO-PQRST
nova senha: ********
Um código novo aparece na hora (o antigo deixa de valer) e todas as sessões são encerradas.

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.
Exemplo de valores
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.

No painel
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.

Exemplo de valores
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.

Como aparece
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.
Exemplo de valores
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.
Exemplo de aviso
Pagamento recebido
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

  1. Crie a sua conta em /registrar (ou entre na que você já tem).
  2. 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.
  3. Ainda em Integração, gere o segredo do webhook e salve a URL https:// que vai receber os avisos.
  4. Crie a cobrança com POST /v1/merchant/charges e mostre o PIX ao pagador.
  5. Trate os eventos pagamento.recebido e pagamento.liberado conferindo 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.

Primeira cobrança
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.

GET /v1/merchant/me
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.

Requisição e resposta
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.

Listagem
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) ou failed (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 a confirmed e você recebe pagamento.liberado). Não existem outros valores. confirmed e confirmed_at marcam a liberação da parcela, o mesmo marco do evento pagamento.liberado.
  • POST /v1/merchant/charges/{id}/tranches gera a próxima parcela, ou um novo PIX quando o anterior expirou ou falhou.
  • A página payment_url faz 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.
Exemplo: R$ 15.000,00
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.

Exemplo
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:

situationSignificado
aguardandoEsperando pagamento (inclusive pagamento parcial).
recebidoO cliente pagou a parcela atual; a liberação chega cerca de 24 h depois.
liberadoCobrança quitada e liberada. Só aparece com o valor total pago.
falhouO PIX falhou ou expirou sem pagamento.
canceladoCobrança cancelada.

O campo status é o estado técnico: open, started, paid, expired ou canceled.

Linha do tempo típica
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.

EventoQuando
pagamento.recebidoEm todo pagamento, assim que o cliente paga.
pagamento.liberadoCerca de 24 h depois (D+1), quando a parcela é liberada. Traz os totais atualizados.
pagamento.falhouO PIX foi devolvido, expirou ou deu erro.
cobranca.canceladaA cobrança foi cancelada.
  • A ordem é garantida por referência: liberado nunca chega antes de recebido da mesma parcela.
  • O mesmo event_id pode 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-events lista as entregas; POST /v1/merchant/webhook-events/{id}/redeliver reenvia uma delas.
  • valor_cents é o valor pago em recebido, o valor da parcela em liberado/falhou e null em cancelado.
Formato solit_v1
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.

Python
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))
Node.js
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.

Repetição segura
# 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.

Exemplo
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.

HTTPcodeQuando
400bad_requestJSON malformado
401unauthorizedchave ausente ou inválida
404not_foundcobrança inexistente ou de outra conta
409invalid_state, tranche_open, tranche_in_flight, order_locked, nothing_duea operação não cabe no estado atual
409account_not_readya conta que recebe ainda não pode receber; tente mais tarde
409document_busyoutra cobrança com o mesmo CPF/CNPJ está sendo gerada; tente de novo em instantes
409account_frozena conta que recebe está em revisão; fale com o suporte
413 / 415payload_too_large, unsupported_media_typecorpo acima de 64 KiB ou sem JSON
422validation_error, invalid_document, idempotency_mismatch, provider_rejected, provider_blockeddados inválidos ou recusados pela provedora
429rate_limitedlimite de uso; respeite Retry-After
502 / 504provider_unavailable, provider_timeouta provedora não respondeu; nada foi cobrado
503feature_paused, service_unavailableserviç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.

Formato do erro
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).

RegraLimite
Rotas de integração120 requisições por minuto por chave
Criação de cobranças30 por minuto por chave
Página de pagamento1 novo PIX a cada 8 s por link

Toda resposta da API tem Cache-Control: no-store e o cabeçalho X-Request-Id.

Precisa de ajuda?

Veja o status dos serviços.