TrustPayDocumentação
Documentação

API TrustPay

Tudo que o painel faz está disponível pela API: cobrar em cartão, PIX e boleto, dividir com subcontas, consultar saldo, antecipar recebíveis e transferir. Comece pela chave de teste — os payloads são idênticos aos de produção.

Primeira cobrança em 3 passosReferência OpenAPI (Swagger) ↗Contexto para IA (llms.txt) ↗
Integrando com apoio de IA?

Passe estes endereços ao seu assistente de código em vez de colar trechos avulsos — eles descrevem a API inteira e são gerados a cada release, então não ficam para trás da produção:

  • /llms.txt — índice da documentação
  • /llms-full.txt — documentação completa em um arquivo
  • https://api.trustand.com.br/openapi.json — schema OpenAPI
Começando

Introdução

A API da TrustPay é REST, aceita e devolve JSON em UTF-8 e usa os verbos e códigos HTTP padrão. Tudo que o painel faz — cobrar, consultar saldo, sacar, gerenciar subcontas — está disponível pela API com as mesmas regras.

ItemValor
Base URLhttps://api.trustand.com.br/api/v1
FormatoJSON UTF-8
Valores monetáriosReais com até 2 casas decimais — 149.90
DatasISO 8601 em UTC — 2026-07-19T14:32:07.412Z
AutenticaçãoHeader X-API-Key ou Authorization: Bearer

Rotas de negócio são escopadas ao seu merchant: o caminho sempre começa com /merchants/{merchantId}/…. O merchant da rota é autoritativo — o corpo da requisição nunca decide de qual conta é a operação.

Começando

Autenticação

Há duas credenciais, para dois usos diferentes: API key para integração servidor-a-servidor, e JWT para sessões de usuário no painel.

MétodoHeaderUso
API key liveX-API-Key: gk_live_…Produção, servidor-a-servidor. Escopo total do merchant.
API key testX-API-Key: gk_test_…Sandbox: mesmos endpoints, dados isolados, adquirente sempre simulado.
JWTAuthorization: Bearer …Usuários do painel. Access token dura 15 min; renove com o refresh token.
Nunca exponha a chave live no navegadorA API key concede escopo total da conta. Ela deve viver apenas no seu servidor, em variável de ambiente. Se vazar, revogue imediatamente em Configurações → API Keys.

Criando uma API key

A criação exige um JWT de usuário Administrador. A chave é exibida uma única vez na resposta — guarde-a no momento em que criar, porque não há como recuperá-la depois.

A chave é sua, e a TrustPay nunca a enviaChaves são geradas por você — no painel, em Configurações → API Keys, ou por esta rota. A TrustPay não envia chaves por e-mail, WhatsApp ou telefone: guardamos apenas o hash, então nem nós conseguimos recuperá-las. Perdeu uma? Gere outra e revogue a anterior.
Conta ainda em onboarding recebe 403 aqui — nem chave de teste — até ficar ativa, o que exige o credenciamento aprovado e a conta de recebimento aberta no banco parceiro. Já rotate funciona sempre: é o caminho para trocar uma chave comprometida.
POST/merchants/{merchantId}/api-keys

Emite uma nova chave de API para a conta.

Corpo da requisição

name
stringobrigatório
Identificação da chave (ex.: "Servidor de produção").
mode
"live" | "test"
Padrão live. Chaves de teste operam no sandbox.
Requisição
curl -X POST https://api.trustand.com.br/api/v1/merchants/{merchantId}/api-keys \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{"name":"Servidor de produção"}'
Resposta 201
{
  "id": "b2f1…",
  "name": "Servidor de produção",
  "key": "gk_live_9f2a…",
  "mode": "live",
  "createdAt": "2026-07-19T12:00:00.000Z"
}
GET/merchants/{merchantId}/api-keys
Lista as chaves (sem o valor secreto).
POST/merchants/{merchantId}/api-keys/{keyId}/revoke
Revoga a chave imediatamente.
POST/merchants/{merchantId}/api-keys/{keyId}/rotate
Gera um novo segredo e invalida o anterior.

Login de usuário e MFA

O login nunca devolve tokens diretamente: o segundo fator é obrigatório para todos os usuários. Com MFA ativo, o login retorna { mfaRequired, mfaToken } e você conclui em POST /auth/mfa/verify. Sem MFA, retorna { mfaSetupRequired, mfaSetupToken } e o usuário se inscreve no próprio fluxo de login.

POST/auth/login
Passo 1. Devolve mfaToken ou mfaSetupToken.
POST/auth/mfa/verify
Passo 2 com o código TOTP de 6 dígitos → tokens.
POST/auth/mfa/enroll
Inscrição: devolve segredo + URI para o QR Code.
POST/auth/refresh
Renova o par de tokens (aceita corpo ou cookie httpOnly).
GET/auth/me
Perfil do usuário logado, papéis e merchantId.
Começando

Teste e produção

O sandbox não é um servidor separado: são os mesmos endpoints, discriminados pela chave que você usa.

Uma chave gk_test_ opera em modo teste — os dados nascem com livemode: false, ficam isolados da operação real e o adquirente de cartão é sempre o simulado, mesmo que haja um adquirente real configurado. Nada criado em modo teste aparece para a chave live nem toca o saldo real.

Integre primeiro com a chave de testeRode o fluxo inteiro no sandbox — cobrança, webhook, estorno, conciliação — antes de trocar uma única variável de ambiente para gk_live_. Os payloads são idênticos.
Começando

Primeira cobrança

Do zero a um pagamento aprovado em três chamadas. O exemplo usa cartão; PIX e boleto são ainda mais curtos.

1. Tokenize o cartão

O número do cartão nunca deve trafegar pela sua aplicação nem ser armazenado. Troque-o por um token de uso único, válido por 15 minutos.

1 — tokenização
curl -X POST https://api.trustand.com.br/api/v1/merchants/{merchantId}/card-tokens \
-H "X-API-Key: $TRUSTPAY_KEY" \
-H "Content-Type: application/json" \
-d '{
"cardNumber": "4111111111111111",
"holderName": "MARIA SOUZA",
"expiryMonth": "12",
"expiryYear": "2030",
"cvv": "123"
}'
# → { "token": "tok_…", "cardLast4": "1111", "cardBrand": "visa" }

2. Crie o pagamento

2 — pagamento
curl -X POST https://api.trustand.com.br/api/v1/merchants/{merchantId}/payments \
-H "X-API-Key: $TRUSTPAY_KEY" \
-H "Idempotency-Key: pedido-10432" \
-H "Content-Type: application/json" \
-d '{
"amount": 149.90,
"paymentMethod": "credit_card",
"cardToken": "tok_…",
"installments": 1
}'
# → { "id": "pay_…", "status": "authorized", … }

3. Capture

A autorização reserva o limite; a captura é o que efetivamente cobra e gera o recebível na sua agenda.

3 — captura
curl -X POST https://api.trustand.com.br/api/v1/merchants/{merchantId}/payments/pay_…/capture \
-H "X-API-Key: $TRUSTPAY_KEY"
# → { "id": "pay_…", "status": "paid", … }
Próximo passo obrigatórioConfigure um webhook. Consultar o status por polling funciona, mas eventos assíncronos — PIX liquidado, boleto pago, chargeback aberto — só chegam por webhook.
Fundamentos

Erros

Erros usam os códigos HTTP padrão e sempre trazem um corpo JSON com a mesma forma.

Corpo de erro
{
  "statusCode": 422,
  "message": "Saldo insuficiente para a transferência",
  "error": "Unprocessable Entity"
}
CódigoSignificado típico
400Payload inválido — falhou a validação de campos.
401Token ou chave ausente, inválida ou revogada.
403Sem permissão RBAC, ou o recurso é de outro tenant.
404Recurso não existe (ou não pertence à sua conta).
409Conflito de estado — ex.: capturar um pagamento já capturado.
422Regra de negócio — saldo insuficiente, chave PIX inválida, split acima de 100%.
429Rate limit excedido — aplique retry com backoff.
400 e 422 não são a mesma coisa400 significa que a requisição está malformada e repetir não vai adiantar. 422 significa que a requisição é válida mas o estado da conta não permite a operação agora — pode fazer sentido tentar de novo mais tarde.
Fundamentos

Idempotência

Timeout de rede não significa que a operação falhou. A idempotência garante que reenviar a mesma requisição não cobra o cliente duas vezes.

Envie o header Idempotency-Key com um valor único seu (o ID do pedido serve bem) em qualquer POST. A primeira resposta é armazenada e as repetições com o mesmo payload recebem a resposta original de volta, sem executar nada.

SituaçãoResultado
Mesma chave, mesmo payloadReplay: devolve a resposta original. Nada é executado de novo.
Mesma chave, payload diferente409 Conflict — a chave já pertence a outra operação.
Mesma chave, ainda processando409 Conflict — aguarde e consulte o recurso.
Reenvio seguro
# A mesma chave em duas chamadas idênticas cobra UMA vez.
curl -X POST https://api.trustand.com.br/api/v1/merchants/{merchantId}/payments \
-H "X-API-Key: $TRUSTPAY_KEY" \
-H "Idempotency-Key: pedido-10432" \
-d '{"amount":149.90,"paymentMethod":"pix"}'

Além do header universal, POST /payments e POST /transfers também aceitam idempotencyKey dentro do corpo.

Fundamentos

Paginação e filtros

Toda listagem compartilha a mesma base de parâmetros, e cada recurso acrescenta os seus.

ParâmetroDescrição
pagePágina, começando em 1.
limitItens por página. Máximo 100.
statusFiltra pelo status do recurso.
createdFrom / createdToIntervalo de criação em ISO 8601 — 2026-07-01 ou com hora.
amountFrom / amountToFaixa de valor em reais, inclusiva.

Filtros específicos por recurso

RecursoParâmetros extras
GET /ledgereventType, action=credit|debit. A faixa de valor incide sobre o líquido.
GET /paymentspaymentMethod, customerId, search (ID ou referência da adquirente).
GET /transactionsmethod=card|pix|boleto, status normalizado, search (ID, referência, E2E ou linha digitável).
GET /transfersmethod=pix|ted, search (favorecido, documento, chave PIX ou end-to-end ID).
GET /pix/transactionscustomerId
GET /boletosdueFrom / dueTo — data de vencimento.
GET /receivablesdueFrom / dueTo; faixa de valor sobre o líquido.
GET /subscriptionsplanId, customerId.
GET /payment-linkssearch
GET /customerssearch, name, email.
Fundamentos

Rate limits

Os limites são por IP e variam conforme a sensibilidade da rota.

EscopoLimite
Global (por IP)120 req/min
Autenticação — /auth/login, /auth/register, /auth/mfa/*10 req/min
Checkout público — /pay/links/*60 req/10 min

Ao exceder, a resposta é 429 Too Many Requests. Implemente retry com backoff exponencial — e combine com idempotência para que a retentativa seja segura.

Receber

Pagamentos com cartão

O ciclo é autorizar → capturar. A autorização reserva o limite do portador; a captura cobra de fato e gera os recebíveis na sua agenda de liquidação.

Status possíveis: createdauthorizedpaid partially_refundedrefunded, ou os terminais declined, blocked_fraud e cancelled.

POST/merchants/{merchantId}/card-tokens

Troca os dados do cartão por um token de uso único, válido por 15 minutos. O PAN nunca é armazenado.

Corpo da requisição

cardNumber
stringobrigatório
Número do cartão, apenas dígitos (13–19).
holderName
stringobrigatório
Nome impresso no cartão.
expiryMonth
string
Mês de validade, 2 dígitos (01–12).
expiryYear
string
Ano de validade, 4 dígitos.
cvv
string
Código de segurança. Nunca é persistido.
Resposta 201
{
  "token": "tok_7f3a…",
  "cardLast4": "1111",
  "cardBrand": "visa"
}
POST/merchants/{merchantId}/payments

Cria um pagamento. O mesmo endpoint atende cartão, PIX e boleto — o que muda é o paymentMethod.

Corpo da requisição

amount
numberobrigatório
Valor em reais, até 2 casas decimais.
paymentMethod
"credit_card" | "pix" | "boleto"obrigatório
Meio de pagamento.
cardToken
string
Obrigatório para cartão. Token de uso único.
installments
number
De 1 a 12. Parcelas acima da franquia da conta financiam juros.
customerId
string
Vincula o pagamento a um cliente cadastrado.
idempotencyKey
string
Alternativa ao header Idempotency-Key.
splits
array
Divisão do valor entre contas do guarda-chuva. Veja split.
metadata
object
Dados livres seus, devolvidos em consultas e webhooks.
Requisição
{
  "amount": 149.90,
  "paymentMethod": "credit_card",
  "cardToken": "tok_7f3a…",
  "installments": 3,
  "metadata": { "pedido": "10432" }
}
Resposta 201
{
  "id": "pay_c81b…",
  "status": "authorized",
  "amount": 149.90,
  "installments": 3,
  "cardBrand": "visa",
  "cardLast4": "1111",
  "authorizationCode": "A1B2C3",
  "nsu": "004512",
  "livemode": true
}
POST/merchants/{merchantId}/payments/{id}/capture

Confirma a autorização e gera os recebíveis. Só depois da captura o dinheiro entra na sua agenda.

Parâmetros de rota

id
stringobrigatório
ID do pagamento autorizado.
POST/merchants/{merchantId}/payments/{id}/refund

Estorna total ou parcialmente. Estornos parciais são cumulativos até o valor capturado.

Corpo da requisição

amount
number
Valor a estornar. Omitido, estorna o saldo restante.
Estorno parcial
{ "amount": 50.00 }
GET/merchants/{merchantId}/payments
Lista com todos os filtros da base comum.
GET/merchants/{merchantId}/payments/{id}
Detalhe de um pagamento.
GET/merchants/{merchantId}/payments/{id}/splits
Partes do split e status de liquidação de cada uma.
GET/merchants/{merchantId}/payments/installments/simulation?amount=1000
Tabela Price de 1 a 12x com os juros da sua conta.
Antifraude nativoTodo pagamento de cartão passa por um score inline antes de ir ao adquirente. Acima do limiar da conta (padrão 60) o pagamento nasce blocked_fraud. Há também bloqueio duro de card testing: um IP com 5 ou mais recusas em 15 minutos é barrado antes do adquirente, com blockReason: card_testing_ip_velocity.
Receber

PIX

Cobrança PIX com BR Code copia-e-cola. A liquidação é assíncrona: o crédito no saldo acontece quando o pagador paga, e você é avisado por webhook.

POST/merchants/{merchantId}/pix/transactions

Emite uma cobrança PIX e devolve o BR Code para exibir como QR Code ou texto copia-e-cola.

Corpo da requisição

amount
numberobrigatório
Valor em reais.
description
string
Texto exibido ao pagador.
expiresInMinutes
number
Validade da cobrança. Expirada, vira status expired.
customerId
string
Vincula a cobrança a um cliente.
splits
array
Divide na confirmação; a tarifa do trilho é rateada proporcionalmente.
Resposta 201
{
  "id": "pix_4a90…",
  "status": "created",
  "amount": 149.90,
  "brCode": "00020126580014BR.GOV.BCB.PIX…",
  "expiresAt": "2026-07-19T15:02:00.000Z"
}
POST/merchants/{merchantId}/pix/keys
Cadastra chave: email, cpf, cnpj, phone ou random.
GET/merchants/{merchantId}/pix/keys
Lista as chaves da conta.
DELETE/merchants/{merchantId}/pix/keys/{keyId}
Remove a chave.
GET/merchants/{merchantId}/pix/transactions
Lista as cobranças PIX.
GET/merchants/{merchantId}/pix/transactions/{id}/splits
Partes do split da cobrança.
POST/merchants/{merchantId}/pix/transactions/{id}/confirm
Somente sandbox: simula o pagamento e credita o saldo.
POST/merchants/{merchantId}/pix/transactions/{id}/refund
Estorna cobrança paga: {amount?} — sem amount = total; parcial acumula até o valor pago. O pagador recebe o valor cheio e o débito no saldo é o bruto: a tarifa da venda não é devolvida. Provedores que só estornam o total recusam pedido parcial (400). Se o provedor cancelar o reembolso depois do aceite, o valor é recreditado e o webhook pix.refund_cancelled é emitido.
Comprovante PIX tem E2EAo liquidar, a transação registra o ID end-to-end — obrigatório em comprovante PIX pelo manual do BACEN — junto com os dados do pagador.

QR fixo (o QR do balcão). Um código estático permanente para consultório, clínica ou comércio: imprima uma vez e receba quantos PIX chegarem. Cada pagamento vira uma transação PIX própria (com staticQrId preenchido), com tarifa, comprovante e webhook pix.completed iguais aos da cobrança avulsa. Valor fixo (mínimo R$ 1,00) ou aberto — o pagador digita. Sem split.

Desativar é interno: o QR some do painel, mas um código já impresso pode continuar pagável no banco emissor — pagamento que chegar depois ainda credita, marcado em metadata.paid_while_disabled. Recolha o material físico ao desativar.

POST/merchants/{merchantId}/pix/static-qrs
Cria o QR fixo: {label, amount?} — sem amount = valor aberto.
GET/merchants/{merchantId}/pix/static-qrs
Lista os QRs fixos da conta.
GET/merchants/{merchantId}/pix/static-qrs/{id}
Detalhe (inclui o brCode para reimpressão).
POST/merchants/{merchantId}/pix/static-qrs/{id}/disable
Desativa no painel (ver aviso acima).
POST/merchants/{merchantId}/pix/static-qrs/{id}/enable
Reativa.
POST/merchants/{merchantId}/pix/static-qrs/{id}/simulate-payment
Somente sandbox: simula um pagador — {amount?, payerName?, payerDocument?} (amount obrigatório no valor aberto).
GET/merchants/{merchantId}/pix/transactions?staticQrId={id}
Pagamentos recebidos por um QR fixo.
Receber

Boleto e Bole-Pix

Boleto registrado com linha digitável e código de barras FEBRABAN. Com withPix, o mesmo documento aceita pagamento por QR Code PIX — é o Bole-Pix.

POST/merchants/{merchantId}/boletos

Emite um boleto. A resposta traz o código de barras, a linha digitável e a URL do documento.

Corpo da requisição

amount
numberobrigatório
Valor de face.
dueDate
string (YYYY-MM-DD)obrigatório
Data de vencimento.
description
string
Descrição impressa no boleto.
finePercentage
number
Multa por atraso, em percentual.
interestDailyPercentage
number
Juros diários por atraso, em percentual.
withPix
boolean
Emite como Bole-Pix — o mesmo documento aceita PIX.
customerId
string
Vincula a um cliente cadastrado.
splits
array
O percentual incide sobre o valor efetivamente pago, com multa e juros.
Resposta 201
{
  "id": "bol_1e77…",
  "status": "created",
  "amount": 149.90,
  "dueDate": "2026-08-05",
  "barcode": "00190500954014481606906809350314337370000010000",
  "barcodeLine": "00190.50095 40144.816069 06809.350314 3 37370000010000",
  "documentUrl": "https://…"
}
GET/merchants/{merchantId}/boletos
Lista, com dueFrom / dueTo além dos filtros comuns.
POST/merchants/{merchantId}/boletos/{id}/cancel
Cancela o boleto e o PIX vinculado.
POST/merchants/{merchantId}/boletos/{id}/duplicate
2ª via com multa e juros já embutidos no novo valor.
POST/merchants/{merchantId}/boletos/{id}/pay
Somente sandbox: simula a liquidação bancária.
POST/merchants/{merchantId}/boletos/{id}/pay-pix
Somente sandbox: liquida pelo QR PIX.
Bole-Pix sai mais baratoQuando o pagador usa o QR PIX do Bole-Pix, a tarifa de boleto não é cobrada — a liquidação segue o trilho PIX.
Receber

Transações unificadas

Uma listagem só para as cobranças dos três trilhos — cartão, PIX e boleto — e um detalhe por transação com a linha do tempo de eventos, paga ou não. É a mesma visão da tela Transações do painel.

GET/merchants/{merchantId}/transactions

Lista paginada unificada. Além dos filtros comuns de listagem, aceita método, status normalizado e busca textual.

Query string

method
"card" | "pix" | "boleto"
Restringe a uma fonte. Ausente = todas.
status
string
Status normalizado: pending, paid, refunded, declined, expired ou cancelled — traduzido para os status brutos de cada fonte (ex.: pending casa created/authorized no cartão).
search
string
ID exato, referência no adquirente, end-to-end ID (PIX) ou linha digitável (boleto).
Resposta 200
{
  "data": [
    {
      "id": "97dd99ce-…",
      "type": "payment",
      "method": "card",
      "amount": 156.00,
      "netAmount": 151.34,
      "status": "partially_refunded",
      "info": "visa •••• 1111",
      "createdAt": "2026-07-20T21:52:37.000Z",
      "paidAt": "2026-07-20T21:52:37.000Z",
      "dueDate": null
    },
    {
      "id": "e3aa3844-…",
      "type": "boleto",
      "method": "bolepix",
      "amount": 80.00,
      "netAmount": null,
      "status": "pending",
      "info": "venc. 27/07/2026",
      "createdAt": "2026-07-20T21:53:22.000Z",
      "paidAt": null,
      "dueDate": "2026-07-27"
    }
  ],
  "total": 2,
  "page": 1,
  "limit": 50
}

type identifica a fonte (payment, pix ou boleto) e é o segmento usado nas rotas de detalhe abaixo. Um boleto híbrido aparece com method: bolepix; a cobrança PIX interna de um Bole-Pix não é listada — o boleto representa a cobrança.

GET/merchants/{merchantId}/transactions/payment/{id}
Detalhe do pagamento com cartão.
GET/merchants/{merchantId}/transactions/pix/{id}
Detalhe da cobrança PIX avulsa.
GET/merchants/{merchantId}/transactions/boleto/{id}
Detalhe do boleto / Bole-Pix.

O detalhe devolve { transaction, events[] }. Cada evento é { key, label, description?, occurredAt, amount? } — a linha do tempo da cobrança: criação, autorização (código/NSU), pagamento, recusa, estorno(s), liquidação de recebível por parcela, chargeback, vencimento, expiração e cancelamento. Evento sem data registrada vem com occurredAt: null; vencimento futuro de boleto vem com data futura (o painel o mostra como etapa prevista).

PermissõesA listagem aceita qualquer permissão de leitura de cobrança (payment:read, pix:read ou boleto:read); cada rota de detalhe exige a permissão do seu tipo.
Receber

Planos e assinaturas

Cobrança recorrente: você define o plano uma vez e a TrustPay cobra no ciclo. No cartão a cobrança liquida na hora; no boleto, Bole-Pix e PIX a TrustPay emite a cobrança e o ciclo só fecha quando o pagamento entra.

POST/merchants/{merchantId}/plans

Cria um plano — o molde da cobrança recorrente.

Corpo da requisição

identifier
stringobrigatório
Identificador único seu (ex.: "pro-mensal").
name
stringobrigatório
Nome exibido.
amount
numberobrigatório
Valor por ciclo.
interval
number
Quantidade de intervalos por ciclo. Padrão 1.
intervalType
"days" | "weeks" | "months"
Unidade do ciclo. Padrão months.
trialDays
number
Período de teste antes da primeira cobrança.
paymentMethod
string
credit_card, boleto, bolepix ou pix.
POST/merchants/{merchantId}/subscriptions

Assina um cliente a um plano. Para cobrança em cartão, o cardToken é obrigatório.

Corpo da requisição

planId
stringobrigatório
Plano a assinar.
customerId
stringobrigatório
Cliente assinante.
cardToken
string
Obrigatório quando o plano cobra em cartão.
GET/merchants/{merchantId}/subscriptions
Lista as assinaturas.
GET/merchants/{merchantId}/subscriptions/summary
Panorama da recorrência: receita mensal, cobranças em aberto, vencidas sem pagamento e o que entrou no mês.
GET/merchants/{merchantId}/subscriptions/{id}/cycles
Histórico de cobranças da assinatura — uma linha por cobrança emitida.
POST/merchants/{merchantId}/subscriptions/{id}/suspend
Pausa a cobrança sem cancelar.
POST/merchants/{merchantId}/subscriptions/{id}/resume
Retoma uma assinatura suspensa, cobrando um ciclo na hora.
POST/merchants/{merchantId}/subscriptions/{id}/cancel
Cancela definitivamente e descarta o cartão guardado.
POST/merchants/{merchantId}/subscriptions/{id}/bill-now
Cobra um ciclo imediatamente. Devolve 400 se já houver cobrança em aberto.
POST/merchants/{merchantId}/plans/{planId}/archive
Arquiva o plano — assinaturas ativas seguem cobrando.

O ciclo fecha no pagamento, não na emissão. Em cartão, a cobrança liquida na hora e o ciclo já nasce pago. Em boleto, Bole-Pix e PIX a TrustPay emite a cobrança e o ciclo fica pending: o contador cyclesBilled só avança, e o próximo ciclo só é agendado, quando o dinheiro entra. Consulte o estado em GET /subscriptions/{id}/cycles.

O pagador tem 5 dias para quitar cada ciclo (nunca mais que o próprio intervalo do plano). Enquanto a cobrança estiver em aberto, nenhuma outra é emitida para o mesmo ciclo. Vencer sem pagamento leva a assinatura para past_due e, na terceira vez, suspended. O aniversário da assinatura conta a partir da emissão: quem paga com atraso não empurra os ciclos seguintes.

Receber

Clientes

Cadastrar o pagador é opcional, mas destrava notificações automáticas de cobrança e o histórico por cliente.

POST/merchants/{merchantId}/customers
Cria o cliente (nome, e-mail, documento, telefone).
GET/merchants/{merchantId}/customers
Lista com search, name e email.
GET/merchants/{merchantId}/customers/{customerId}
Detalhe do cliente.
PATCH/merchants/{merchantId}/customers/{customerId}
Atualiza os dados.
GET/merchants/{merchantId}/notifications
Histórico de avisos enviados ao pagador.

Quando a cobrança tem um cliente com contato, a TrustPay envia automaticamente boleto emitido, lembrete de vencimento e confirmação de pagamento. Desligue em merchants.notifications_enabled.

Dinheiro

Saldo e extrato

O saldo é derivado de um livro-razão imutável: não existe campo de saldo editável. Toda movimentação é um lançamento append-only.

GET/merchants/{merchantId}/payments/balance/current

Posição financeira da conta, separada em três baldes.

Resposta 200
{
  "available": 12450.00,
  "pending": 38900.00,
  "reserved": 1200.00,
  "reservedProjected": 3890.00,
  "total": 52550.00
}
CampoO que é
availableLivre para sacar, transferir ou pagar tarifas.
pendingRecebíveis de cartão ainda não liquidados (agenda D+N).
reservedRetenção de segurança já aplicada, aguardando liberação.
reservedProjectedQuanto dos recebíveis pendentes será retido ao liquidar. Informativo.
totalSoma dos baldes.
GET/merchants/{merchantId}/ledger

Extrato imutável, com um lançamento por evento financeiro.

Query string

eventType
string
Ex.: payment.captured, transfer.pix, receivable.settled.
action
"credit" | "debit"
Sentido do lançamento.
amountFrom / amountTo
number
Faixa aplicada sobre o valor líquido.
Dinheiro

Relatórios e performance

Números pré-agregados por dia (fuso de Brasília): dias fechados saem de uma tabela materializada, só o dia corrente é calculado ao vivo — a consulta responde rápido independente do volume histórico.

Todos os relatórios aceitam from/to (YYYY-MM-DD, inclusivos, máximo 366 dias) e product (card | pix | boleto), exigem a permissão report:read e têm uma variante /export.csv no dialeto que o Excel pt-BR abre com duplo clique.

GET/merchants/{merchantId}/reports/sales
Vendas: totais, por produto e série diária.
GET/merchants/{merchantId}/reports/performance
Conversão por produto + % de devoluções e chargebacks.
GET/merchants/{merchantId}/reports/receivables-schedule
Agenda D+N por vencimento, com retenção prevista.
GET/merchants/{merchantId}/reports/fees
Tarifas: liquidação por produto + pós-pago e faturas.
GET/merchants/{merchantId}/reports/daily-position
Posição diária consolidada (concilia com o extrato).
GET/merchants/{merchantId}/reports/performance

Conversão e contestações por produto, no período.

Query string

from / to
string
Período em dias (default: últimos 30).
product
"card" | "pix" | "boleto"
Restringe a um produto.
Resposta 200
{
  "period": { "from": "2026-06-22", "to": "2026-07-21" },
  "products": {
    "card": {
      "attempts": 120, "paid": 111, "declined": 9,
      "conversionPercent": 92.5,
      "refunds": { "count": 2, "amount": 180.00, "percent": 1.8 },
      "chargebacks": { "count": 1, "amount": 250.00, "percent": 0.9, "amountPercent": 1.1 }
    },
    "pix": {
      "issued": 300, "paid": 204,
      "conversionPercent": 68.0,
      "refunds": { "count": 1, "amount": 90.00, "percent": 0.49 }
    }
  },
  "days": [ { "day": "2026-07-21", "product": "pix", "issued": 12, "paid": 9 } ]
}
Como ler a conversãoCartão: aprovadas ÷ tentativas (aprovadas + recusadas). PIX e boleto: pagas ÷ emitidas — QR abandonado no checkout é normal e derruba o número; acompanhe a tendência. Percentual vem null quando não houve tráfego no denominador.
Dinheiro

Disputas: chargeback e MED

Contestação de cartão (chargeback) e devolução especial de PIX (MED, do BACEN) viram registros com status atualizado automaticamente conforme o provedor avança no caso.

GET/merchants/{merchantId}/chargebacks

Contestações de cartão da conta, com o status corrente da disputa.

Query string

status
string
Filtra por status: received, under_review, accepted, rejected, reversed.
Resposta 200
[{
  "id": "cb_91d2…",
  "paymentId": "pay_4a90…",
  "amount": 250.00,
  "reason": "FRAUD",
  "status": "under_review",
  "chargebackReference": "CB-8F31A2B4C5D6E",
  "createdAt": "2026-07-18T14:22:00.000Z",
  "resolvedAt": null
}]
StatusO que significa
receivedDisputa aberta pelo portador; você pode responder com evidências.
under_reviewDocumentação em análise no adquirente.
reversedVocê GANHOU: o valor fica com você.
acceptedDisputa perdida ou aceita: o valor é debitado e devolvido ao portador.
rejectedDisputa rejeitada pela análise.
GET/merchants/{merchantId}/pix-disputes

Disputas de PIX (MED — Mecanismo Especial de Devolução do BACEN).

Query string

status
string
opened, accepted ou released.
Resposta 200
[{
  "id": "med_7bc1…",
  "pix_transaction_id": "pix_4a90…",
  "amount": 250.00,
  "status": "opened",
  "reason": "MED — suspeita de fraude relatada pelo pagador",
  "resolved_at": null,
  "created_at": "2026-07-20T09:15:00.000Z"
}]
StatusO que significa
openedMED aberto: o valor está bloqueado na conta enquanto o caso é analisado.
acceptedMED acatado: o valor foi devolvido ao pagador.
releasedMED rejeitado: o bloqueio foi liberado sem débito.
MED não é estorno comumO MED nasce na instituição do pagador (suspeita de fraude) e bloqueia o valor na conta antes de qualquer decisão. O registro aqui é informativo — a movimentação acontece no trilho do PIX — e a taxa de MEDs e chargebacks da conta aparece no relatório de performance. Ambas exigem a permissão chargeback:read.
Dinheiro

Recebíveis e antecipação

Cartão não liquida na hora: a captura cria uma agenda de recebíveis, uma linha por parcela, que vence em D+N. A antecipação troca essa espera por dinheiro hoje, com desconto.

O padrão é D+30 por parcela (configurável em settlement_days_card). Até vencer, o valor aparece em pending no saldo; um job liquida no vencimento e move para available.

GET/merchants/{merchantId}/receivables
Agenda. Filtre por status=scheduled|settled|anticipated e vencimento.
GET/merchants/{merchantId}/anticipations/simulation
Simula a taxa pro-rata de cada recebível elegível, sem efeito.
POST/merchants/{merchantId}/anticipations
Antecipa. Sem receivableIds, antecipa todos os elegíveis. Exige Administrador.
GET/merchants/{merchantId}/anticipations
Histórico de antecipações.
Como a taxa é calculadaA antecipação cobra um percentual ao mês (padrão 1,99%) aplicado pro-rata pelos dias que faltam para cada recebível vencer. Antecipar um recebível que vence amanhã custa quase nada; antecipar D+30 custa o mês cheio. O líquido é creditado na hora.
Dinheiro

Saques e transferências

Duas saídas de dinheiro: saque (payout) leva o saldo para a sua conta bancária cadastrada; transferência envia para terceiros por PIX ou TED.

POST/merchants/{merchantId}/payouts

Saca para a conta bancária cadastrada do merchant. O débito no saldo é atômico e serializa com outras saídas concorrentes.

Corpo da requisição

amount
number
Valor a sacar. Omitido = saca todo o saldo disponível.
metadata
object
Dados livres devolvidos nos webhooks e consultas.
POST/merchants/{merchantId}/transfers

Envia dinheiro a terceiros. Informe a chave PIX ou os dados bancários completos, conforme o método.

Corpo da requisição

method
"pix" | "ted"obrigatório
Trilho de envio.
amount
numberobrigatório
Valor a transferir.
receiverName
stringobrigatório
Nome do favorecido.
receiverDocument
string
CPF/CNPJ do favorecido. Obrigatório em TED.
pixKey / pixKeyType
string
Para PIX por chave.
bankCode / branch / accountNumber / accountType
string
Para TED ou PIX por dados bancários.
idempotencyKey
string
Fortemente recomendado em saída de dinheiro.
PIX por chave
{
  "method": "pix",
  "amount": 250.00,
  "receiverName": "João Pereira",
  "pixKey": "joao@exemplo.com.br",
  "pixKeyType": "email",
  "idempotencyKey": "repasse-2026-07-19-001"
}
Saída de dinheiro pede idempotênciaTransferência e saque concluem no próprio request: completed para transferência, paid para saque. Um timeout de rede, porém, não diz qual dos dois lados falhou — sempre envie idempotencyKey e, na dúvida, consulte o recurso antes de reenviar.
GET/merchants/{merchantId}/payouts
Lista os saques.
POST/merchants/{merchantId}/payouts/{id}/cancel
Cancela um saque ainda não processado.
GET/merchants/{merchantId}/transfers
Lista, com method e search por favorecido, documento, chave ou E2E.

As tarifas de PIX out e TED são pós-pagas: entram na fatura mensal, e o débito imediato é só o valor enviado. Criar transferência é permissão de Administrador.

Dinheiro

Comprovantes

Segunda via sob demanda de qualquer transação concluída, em JSON estruturado ou PDF pronto para o cliente final.

GET/merchants/{merchantId}/receipts/{type}/{id}
Comprovante estruturado em seções rótulo/valor.
GET/merchants/{merchantId}/receipts/{type}/{id}/pdf
Mesmo conteúdo em PDF, como download.

type é um de payment, pix, boleto, transfer ou payout. A permissão exigida é a de leitura do recurso correspondente. Só transações concluídas têm comprovante — pendente ou recusada retorna 400.

Código de autenticaçãoTodo comprovante traz um código determinístico (HMAC-SHA256 dos dados imutáveis): a segunda via reproduz sempre o mesmo código, como em comprovante bancário. CPF de terceiros sai mascarado por LGPD.
Marketplace

Subcontas

No modelo marketplace, cada vendedor da sua plataforma vira uma subconta com saldo, extrato e KYC próprios, sob o seu guarda-chuva.

POST/merchants/{merchantId}/subaccounts

Cria a subconta. Ela nasce com KYC pendente: já pode receber, mas não saca até a verificação aprovar.

Corpo da requisição

legalName
stringobrigatório
Razão social ou nome completo.
document
stringobrigatório
CPF (11 dígitos) ou CNPJ (14).
email
stringobrigatório
E-mail de contato da subconta.

O que a conta-mãe pode e não pode

A conta-mãe nunca movimenta o saldo da filhaA credencial da mãe opera as rotas das filhas para leitura, KYC, chaves e controles — mas saque, transferência e antecipação da filha exigem a credencial da própria filha (retorna 403). O poder da mãe é suspender, não movimentar. Uma filha também não acessa nada da mãe nem de outra filha.
GET/merchants/{merchantId}/subaccounts
Lista as subcontas.
GET/merchants/{merchantId}/subaccounts/consolidated
Posição do guarda-chuva inteiro: disponível e a receber da mãe e de cada filha.
POST/merchants/{merchantId}/subaccounts/{sid}/api-keys
Emite chave escopada à filha — não escala para a mãe nem para irmãs.
POST/merchants/{merchantId}/subaccounts/{sid}/kyc-documents
Envia documento de verificação da filha.
GET/merchants/{merchantId}/subaccounts/{sid}/kyc-documents/{did}/file
Arquivo do documento (imagem/PDF) para ver antes de aprovar ou negar.
POST/merchants/{merchantId}/subaccounts/{sid}/block
Bloqueia: a conta não recebe nem saca.
POST/merchants/{merchantId}/subaccounts/{sid}/unblock
Reativa a conta.
POST/merchants/{merchantId}/subaccounts/{sid}/cashout-block
Trava só a saída: continua recebendo, não saca.
POST/merchants/{merchantId}/subaccounts/{sid}/cashout-unblock
Libera a saída.
Marketplace

Split de pagamento

Divide uma cobrança entre várias contas no momento da liquidação. Funciona igual em cartão, PIX e boleto.

Envie splits na criação da cobrança. Cada regra aceita percentage (0,01 a 100) ou amount fixo, e os dois formatos podem ser misturados na mesma cobrança. O limite é de 20 recebedores.

Cobrança com split
{
  "amount": 1000.00,
  "paymentMethod": "pix",
  "splits": [
    { "recipientMerchantId": "sub_vendedor_a", "percentage": 70 },
    { "recipientMerchantId": "sub_vendedor_b", "amount": 150.00, "liable": false }
  ]
}
CampoDescrição
recipientMerchantIdConta que recebe a parte. Precisa estar na mesma estrutura.
percentagePercentual do valor pago. Exclusivo com amount.
amountValor fixo em reais. Exclusivo com percentage.
liablePadrão true. Com false, um chargeback dessa parte fica com o marketplace, não com o recebedor.
Regra do guarda-chuvaO recebedor precisa estar na mesma estrutura do pagador — mesma raiz por parent_merchant_id (mãe ↔ filha, filha ↔ irmã) — e com KYC aprovado. Split para fora da estrutura é recusado com 400.

Quando cada parte é creditada

Em cartão, o split segue a agenda D+N: cada parte vira um recebível próprio por parcela e só é creditada ao liquidar — split nunca antecipa liquidação. Em PIX e boleto, as regras são persistidas na criação e recalculadas na confirmação: o percentual incide sobre o valor efetivamente pago (boleto vencido inclui multa e juros) e a tarifa do trilho é rateada proporcionalmente.

Integração

Webhooks

Webhooks são a fonte de verdade da sua integração: a TrustPay chama a sua URL a cada evento, com assinatura HMAC, retry automático e histórico consultável.

POST/merchants/{merchantId}/webhooks

Registra o endpoint. O secret é exibido uma única vez — guarde-o na hora.

Corpo da requisição

url
stringobrigatório
HTTPS público. IPs privados e loopback são rejeitados (anti-SSRF).
events
string[]obrigatório
Eventos que você quer receber.
Requisição
{
  "url": "https://minhaloja.com.br/webhooks/trustpay",
  "events": [
    "payment.captured",
    "payment.refunded",
    "pix.completed",
    "boleto.paid"
  ]
}
Resposta 201
{
  "id": "wh_3d1f…",
  "secret": "whsec_a91c…",
  "status": "active"
}

Validar a assinatura é obrigatório

Cada entrega traz o header X-Webhook-Signature com o HMAC-SHA256 do corpo bruto. Valide antes de qualquer JSON.parse, com comparação de tempo constante.

Node / Express
const crypto = require('crypto');
 
// Use o RAW body — reserializar o JSON quebra a assinatura.
app.post('/webhooks/trustpay',
express.raw({ type: 'application/json' }),
(req, res) => {
const expected = crypto
.createHmac('sha256', process.env.TRUSTPAY_WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
const received = req.headers['x-webhook-signature'];
 
if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
return res.status(401).end(); // assinatura inválida → descarte
}
 
const event = JSON.parse(req.body);
// processe de forma IDEMPOTENTE: o mesmo evento pode chegar 2x
res.status(200).end(); // responda 2xx rápido
});
Três regras de ouroResponda 2xx rápido e processe o trabalho pesado de forma assíncrona. Seja idempotente: deduplique pelo ID do evento, porque retries podem duplicar entregas. Valide sempre a assinatura.

Retry e histórico

Entrega que falha — resposta não-2xx ou timeout — volta para a fila com backoff exponencial, até 5 tentativas por padrão.

GET/merchants/{merchantId}/webhooks/{webhookId}/history
Entregas e status de cada tentativa.
POST/merchants/{merchantId}/webhooks/retry-failed
Reenfileira as entregas que falharam.
PATCH/merchants/{merchantId}/webhooks/{id}
Edita URL e lista de eventos.
POST/merchants/{merchantId}/webhooks/{id}/toggle
Pausa ou reativa o endpoint.
DELETE/merchants/{merchantId}/webhooks/{id}
Remove o endpoint.

Eventos disponíveis

GrupoEventos
Pagamentospayment.created payment.authorized payment.captured payment.refunded payment.partially_refunded payment.declined payment.blocked_fraud
Splitpayment.split_received payment.split_reversed
PIXpix.created pix.completed pix.expired pix.refunded pix.refund_cancelled
Boletoboleto.created boleto.paid boleto.expired boleto.cancelled
Assinaturassubscription.created subscription.invoice_issued subscription.charged subscription.payment_failed subscription.charge_error subscription.suspended subscription.canceled
Cashoutpayout.completed payout.failed transfer.completed transfer.failed
Disputaschargeback.opened chargeback.accepted
Payload padrão
{
  "event": "payment.captured",
  "timestamp": "2026-07-19T14:32:07.412Z",
  "data": {
    "id": "pay_c81b…",
    "merchantId": "{merchantId}",
    "amount": 149.90,
    "status": "paid"
  }
}
Integração

Cartões de teste

Com a chave gk_test_, use estes números para forçar cada desfecho do adquirente.

NúmeroResultado
4111 1111 1111 1111Aprovado
4000 0000 0000 0002Recusado — declined
4000 0000 0000 9995Saldo insuficiente
4000 0000 0000 0101Suspeita de fraude
4000 0000 0000 0259Timeout do adquirente

Para PIX, use POST /pix/transactions/{id}/confirm para simular o pagamento. Para boleto, POST /boletos/{id}/pay ou /pay-pix. Em transferência, uma chave PIX contendo invalid resulta em failed sem débito, simulando recusa do DICT.

Tarifas padrão

OperaçãoTarifa
Cartão (MDR)2,99% sobre o valor capturado
BoletoR$ 3,49 na liquidação — isento se pago pelo QR PIX do Bole-Pix
PIX recebidoSem tarifa por padrão
Transferência PIXR$ 0,75 (pós-paga, entra na fatura)
Transferência TEDR$ 3,50 (pós-paga, entra na fatura)
Antecipação1,99% ao mês, pro-rata

As tarifas são configuráveis por conta. Consulte as suas em GET /merchants/{mid}/pricing e simule o líquido de uma operação em GET /merchants/{mid}/pricing/simulate.

Integração

SDK e referência Swagger

Duas formas de ir além desta página.

SDK oficial para Node.js

Cliente TypeScript com zero dependências, cobrindo toda a API, com retry idempotente embutido.

Uso
import { Orion } from '@trustpay/node';
 
const orion = new Orion({ apiKey: process.env.TRUSTPAY_KEY });
 
const payment = await orion.payments.create('{merchantId}', {
amount: 149.90,
paymentMethod: 'pix',
});
 
const receipt = await orion.receipts.get('{merchantId}', 'pix', payment.id);

Referência OpenAPI

O Swagger é gerado direto do código e lista todos os endpoints, incluindo os administrativos que não estão nesta página. Use-o como referência exaustiva e para testar chamadas no navegador: https://api.trustand.com.br/docs. O schema puro, para gerar cliente ou validar payload, fica em https://api.trustand.com.br/openapi.json.

Integrando com apoio de IA

Se você integra com um assistente de código (Claude, Cursor, Copilot), aponte-o para estes endereços em vez de colar trechos desta página — eles descrevem a API inteira e são gerados a cada release, então não ficam para trás do que está no ar. Colar pedaços soltos é o que faz o assistente inventar rota que não existe.

EndereçoO que é
/llms.txtResumo da API e links para cada documento — o agente lê primeiro e decide o que buscar.
/llms-full.txtToda a documentação num arquivo só, para despejar no contexto de uma vez.
https://api.trustand.com.br/openapi.jsonContrato de cada rota: parâmetros, corpo e respostas. Serve para o agente validar o que gerou.