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.
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
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.
Item
Valor
Base URL
https://api.trustand.com.br/api/v1
Formato
JSON UTF-8
Valores monetários
Reais com até 2 casas decimais — 149.90
Datas
ISO 8601 em UTC — 2026-07-19T14:32:07.412Z
Autenticação
Header 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étodo
Header
Uso
API key live
X-API-Key: gk_live_…
Produção, servidor-a-servidor. Escopo total do merchant.
API key test
X-API-Key: gk_test_…
Sandbox: mesmos endpoints, dados isolados, adquirente sempre simulado.
JWT
Authorization: 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"
}
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.
POST/auth/password-reset/request
Esqueci a senha: envia link de uso único por e-mail (30 min). Resposta sempre genérica.
POST/auth/password-reset/confirm
Conclui com token + senha nova; conta com MFA exige mfaCode. Revoga todas as sessões.
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 \
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ódigo
Significado típico
400
Payload inválido — falhou a validação de campos.
401
Token ou chave ausente, inválida ou revogada.
403
Sem permissão RBAC, ou o recurso é de outro tenant.
404
Recurso não existe (ou não pertence à sua conta).
409
Conflito de estado — ex.: capturar um pagamento já capturado.
422
Regra de negócio — saldo insuficiente, chave PIX inválida, split acima de 100%.
429
Rate 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ção
Resultado
Mesma chave, mesmo payload
Replay: devolve a resposta original. Nada é executado de novo.
Mesma chave, payload diferente
409 Conflict — a chave já pertence a outra operação.
Mesma chave, ainda processando
409 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âmetro
Descrição
page
Página, começando em 1.
limit
Itens por página. Máximo 100.
status
Filtra pelo status do recurso.
createdFrom / createdTo
Intervalo de criação em ISO 8601 — 2026-07-01 ou com hora.
amountFrom / amountTo
Faixa de valor em reais, inclusiva.
Filtros específicos por recurso
Recurso
Parâmetros extras
GET /ledger
eventType, action=credit|debit. A faixa de valor incide sobre o líquido.
GET /payments
paymentMethod, customerId, search (ID ou referência da adquirente).
GET /transactions
method=card|pix|boleto, kind=charge (só cobrança emitida: PIX e boleto), status normalizado, search (ID, referência, E2E, linha digitável ou nome/documento do pagador), dueFrom/dueTo.
GET /transfers
method=pix|ted, search (favorecido, documento, chave PIX ou end-to-end ID).
GET /pix/transactions
customerId
GET /boletos
dueFrom / dueTo — data de vencimento.
GET /receivables
dueFrom / dueTo; faixa de valor sobre o líquido.
GET /subscriptions
planId, customerId.
GET /payment-links
search
GET /customers
search, name, email.
Fundamentos
Rate limits
Os limites são por IP e variam conforme a sensibilidade da rota.
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: created → authorized → paid → partially_refunded → refunded, 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.
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. O portador recebe o valor cheio e a tarifa da venda não é devolvida: o débito no saldo é o bruto estornado. Se a venda ainda não liquidou, o principal sai da agenda de recebíveis e do saldo sai apenas a tarifa.
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, os flags da regra (liable, chargeFee) e o status de liquidação de cada uma.
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.
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.
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 em nome de um cliente cadastrado. 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
stringobrigatório
Quem vai pagar. O CPF/CNPJ do cliente é impresso no boleto como sacado, então o cadastro precisa ter documento. Crie o cliente antes em POST /customers.
splits
array
O percentual incide sobre o valor efetivamente pago, com multa e juros.
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).
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.
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
Links de pagamento
Uma página de checkout hospedada pela TrustPay, sem você escrever front-end. Útil para venda avulsa, cobrança por WhatsApp e primeiros testes.
POST/merchants/{merchantId}/payment-links
Cria o link. Informe amount para valor avulso OU planId para vincular a uma assinatura — nunca os dois.
Corpo da requisição
name
stringobrigatório
Nome do link, exibido no checkout.
amount
number
Valor avulso. Exclusivo com planId.
planId
string
Cria uma assinatura ao pagar. Exclusivo com amount.
paymentMethods
string[]
Quais meios exibir: credit_card, pix, bolepix.
maxUses
number
Limite de pagamentos aceitos pelo link.
expiresAt
string (ISO)
Data em que o link para de aceitar pagamentos.
branding
object
Sua marca na página: displayName, logoUrl (https) e primaryColor (hex).
O pagador digita um código na página e vê o valor já com desconto. O cupom vale na contratação: numa assinatura ele desconta a adesão e não volta nos meses seguintes — desconto que acompanha o contrato é preço, e preço mora na tabela de preços.
POST/merchants/{merchantId}/coupons
Cria o cupom: code, discountType (percent/fixed), percentBps ou fixedAmount, minAmount, validUntil, maxRedemptions.
GET/merchants/{merchantId}/coupons
Lista os cupons da conta, com os resgates de cada um.
POST/merchants/{merchantId}/coupons/{id}/disable
Para de aceitar o código (e /enable reativa).
POST/pay/links/{slug}/coupon
Público: calcula o desconto SEM consumir o resgate.
O desconto reduz o valor da cobrança: o que nasce em payments, pix_transactions ou boletos já é o valor com desconto, e é sobre ele que a tarifa incide. Para cobrar com cupom, envie couponCode no checkout.
Conferir o código não gasta o resgate — é o que a página chama enquanto o pagador digita. O limite de usos é reservado antes de a cobrança nascer, então dois pagamentos no mesmo instante não gastam o mesmo último cupom; e cobrança recusada devolve o cupom, para quem teve o cartão negado poder tentar de novo com o mesmo desconto.
Desconto que zeraria a cobrança é recusado, e link de assinatura não aceita cupom.
Sua marca na página
Quem abre o link conhece você, não a TrustPay. Envie branding na criação e a página de pagamento passa a exibir o seu nome, o seu logo e a sua cor no botão. O que você configurar volta na listagem, então o próximo link herda a mesma marca.
O logoUrl exige https — endereços http, data: e javascript: são recusados, porque a imagem é carregada numa página de pagamento e um recurso inseguro ali derruba o cadeado do navegador. Se o endereço sair do ar, a página esconde a imagem e mostra o nome.
Você não escolhe a cor do texto do botão: GET /pay/links/{slug} devolve onPrimary junto, calculado a partir da sua cor. Com um fundo claro o texto sai escuro, com um fundo escuro sai branco — assim o botão principal nunca fica ilegível. O rodapé informando que o pagamento é processado pela TrustPay aparece sempre.
Checkout público
Estas duas rotas não exigem autenticação — são o que a página hospedada consome. Use-as se preferir construir seu próprio checkout sobre o link.
GET/pay/links/{slug}
Dados do link para renderizar o checkout, incluindo as opções de parcelamento com juros.
POST/pay/links/{slug}/checkout
Efetua o pagamento com os dados do pagador.
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.
billingMode
"anniversary" | "fixed_day"
anniversary (padrão) cobra no aniversário da adesão; fixed_day cobra todos no mesmo dia do mês.
billingDay
number
Dia do mês da cobrança (1–31). Obrigatório em fixed_day.
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.
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.
Dia fixo, para quem cobra todo mundo no mesmo dia. Com billingMode: "fixed_day" a cobrança vence sempre no billingDay do mês. Quem adere no meio do mês não recebe uma cobrança avulsa: o proporcional dos dias corridos entra somado à primeira parcela cheia. Um aluguel de R$ 1.000 que vence dia 5, assinado dia 25, gera no dia 5 uma única cobrança de R$ 1.000 mais os dias. A cobrança emitida sai 5 dias antes do vencimento — nextDueDate é a data que o pagador conhece. Mês curto encosta no último dia e o mês seguinte volta ao dia do plano.
Upgrade e downgrade em POST /subscriptions/{id}/change-plan: a troca vale na hora e a diferença proporcional aos dias restantes entra como crédito ou débito da próxima parcela, nunca como cobrança avulsa. Exige o mesmo meio de pagamento e o mesmo modelo de cobrança, e não roda enquanto houver cobrança em aberto.
Receber
Carnês (parcelamento com fim)
Um orçamento fechado vira entrada opcional + N parcelas mensais, cobradas por Bole-Pix, boleto ou PIX. O cronograma inteiro é gravado na criação; a cobrança de cada parcela é emitida automaticamente perto do vencimento, e o carnê termina sozinho na última parcela paga.
POST/merchants/{merchantId}/carnes
Cria o carnê com o cronograma completo. O que já está no prazo (a entrada, tipicamente) é emitido na hora e volta na resposta.
Corpo da requisição
customerId
stringobrigatório
Cliente pagador.
description
stringobrigatório
O que foi vendido (ex.: "Tratamento ortodôntico"). Vai em cada cobrança.
installmentsCount
numberobrigatório
Número de parcelas (2 a 48).
installmentAmount
numberobrigatório
Valor de cada parcela.
firstDueDate
stringobrigatório
Vencimento da 1ª parcela (YYYY-MM-DD); as demais seguem mês a mês, no mesmo dia.
downPaymentAmount
number
Entrada opcional. Omitida = sem entrada.
downPaymentDueDate
string
Vencimento da entrada. Padrão: hoje.
paymentMethod
string
bolepix (padrão), boleto ou pix — um método para o carnê inteiro.
finePercentage
number
Multa após o vencimento (%). Padrão 2.
interestDailyPercentage
number
Juros ao dia de atraso (%). Padrão 0.033 (~1%/mês).
GET/merchants/{merchantId}/carnes
Lista os carnês, com progresso (pagas/total) e próximo vencimento.
GET/merchants/{merchantId}/carnes/summary
Panorama: carnês ativos, a receber, em atraso e o que entrou no mês.
GET/merchants/{merchantId}/carnes/{id}
Cronograma completo. Parcela emitida/atrasada traz a cobrança viva (linha digitável, QR PIX) para reenvio.
POST/merchants/{merchantId}/carnes/{id}/cancel
Encerra as parcelas não pagas e cancela as cobranças emitidas. Parcelas pagas ficam intactas.
Antecipa a emissão de uma parcela agendada, ou reemite a cobrança de uma vencida cuja cobrança morreu (QR expirado). A reemissão embute multa e juros acumulados; body { "waiveLateCharges": true } reemite pelo valor de face (renegociação).
A emissão é automática e acontece perto do vencimento. A parcela nasce scheduled, vira issued quando a cobrança é emitida (~10 dias antes de vencer), paid quando o dinheiro entra e overdue quando vence sem pagamento. Boleto vencido continua pagável com multa e juros — o valor registrado é sempre o realmente pago.
Acompanhe pelos webhooks carne.installment_issued, carne.installment_paid, carne.installment_overdue, carne.completed e carne.canceled. Falha operacional de emissão (conta em análise, emissor fora do ar) dispara carne.charge_error e fica em lastChargeError — nenhuma parcela entra em atraso por isso, e a emissão é retentada automaticamente.
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. O CPF vem mascarado (***.456.789-**); o valor completo está no detalhe.
GET/merchants/{merchantId}/customers/{customerId}
Detalhe, com o documento inteiro — é o que sua integração deve ler para sincronizar cadastro.
Ajusta as janelas: reminderDays, overdueDays, renewalNoticeEnabled, notificationsEnabled.
Quando a cobrança tem um cliente com contato, a TrustPay avisa esse cliente por e-mail: cobrança emitida, lembrete de vencimento, cobrança em atraso, confirmação de pagamento e renovação de assinatura.
A régua de lembretes é da conta e vale para boleto avulso, parcela de carnê e mensalidade de assinatura. reminderDays são os dias antes do vencimento (padrão [5,1,0], onde 0 é o próprio dia) e overdueDays os dias depois, para cobrança que venceu e continua em aberto (padrão [1,7]). Cada janela avisa uma única vez por cobrança, contando dias corridos no fuso de negócio. Array vazio desliga aquele lado da régua; notificationsEnabled: false desliga todos os avisos da conta.
Parcela de carnê só entra na régua depois de emitida — a emissão acontece perto do vencimento, então janelas muito longas não a alcançam. Em ambiente de teste nenhum aviso é entregue ao pagador.
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.
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.
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.
Disputa aberta pelo portador; você pode responder com evidências.
under_review
Documentação em análise no adquirente.
reversed
Você GANHOU: o valor fica com você.
accepted
Disputa perdida ou aceita: o valor é debitado e devolvido ao portador.
rejected
Disputa 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"
}]
Status
O que significa
opened
MED aberto: o valor está bloqueado na conta enquanto o caso é analisado.
accepted
MED acatado: o valor foi devolvido ao pagador.
released
MED 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+32, o prazo do adquirente (configurável em settlement_days_card): no parcelado, a 1ª parcela vence nesse prazo e as seguintes de mês em mês. 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.
Simula a taxa pro-rata de cada recebível elegível, sem efeito.
GET/merchants/{merchantId}/anticipations/auto
Estado da antecipação automática da conta (ativação é feita pela plataforma — fale com o suporte).
POST/merchants/{merchantId}/anticipations
Antecipa. Sem receivableIds, antecipa todos os elegíveis. Exige Administrador.
GET/merchants/{merchantId}/anticipations
Histórico de antecipações (origin: manual ou automática).
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 um D+32 custa um 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. A tarifa de saque da sua tabela é debitada no ato, junto do valor, num débito único e atômico que serializa com outras saídas concorrentes.
Corpo da requisição
amount
number
Valor a sacar — o saldo precisa cobrir valor + tarifa. Omitido = saca o máximo (saldo − tarifa).
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.
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.
GET/merchants/{merchantId}/payouts/withdrawable
Quanto dá para sacar agora: withdrawable já desconta a tarifa e os saques pedidos que ainda não foram processados. Conta bloqueada, em análise ou sem conta bancária válida vem com withdrawable: 0 e o motivo em blockedCode.
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.
Saldo não é valor sacável. A tarifa do saque sai junto do valor, no mesmo débito, e um saque já pedido continua contando no saldo até ser processado. Antes de oferecer um valor ao seu usuário, pergunte a GET /merchants/{merchantId}/payouts/withdrawable: o valor que ela devolve é aceito por POST /payouts.
Dinheiro
Comprovantes
Segunda via sob demanda de qualquer transação concluída, em JSON estruturado ou PDF pronto para o cliente final.
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}/subaccount-invites
Convida um sublojista (recomendado): gera um link amarrado ao CNPJ dele. Ele preenche o próprio cadastro — dados, sócio e documentos — e a conta nasce no seu guarda-chuva, com KYC pendente. O token e a URL aparecem UMA única vez, nesta resposta.
Corpo da requisição
document
stringobrigatório
CNPJ do convidado (14 dígitos) — o onboarding recusa qualquer outro.
label
string
Como você identifica o convidado na lista (ex.: "Loja do João").
expiresInDays
number
Validade do link, 1 a 30 dias. Padrão: 7.
GET/merchants/{merchantId}/subaccount-invites
Lista os convites (pending, used, revoked, expired) — nunca devolve o token.
Pública: quem convidou e para qual CNPJ (404 para convite inválido/expirado).
POST/merchants/{merchantId}/subaccounts
Cria a subconta diretamente (caminho legado — prefira o convite). Ela nasce com KYC pendente e só opera em produção (receber e sacar) depois que 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.
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) ouamount fixo, e os dois formatos podem ser misturados na mesma cobrança. O limite é de 20 recebedores.
Conta que recebe a parte. Precisa estar na mesma estrutura.
percentage
Percentual do valor pago. Exclusivo com amount.
amount
Valor fixo em reais. Exclusivo com percentage.
liable
Padrão true. Com false, um chargeback dessa parte fica com o marketplace, não com o recebedor.
chargeFee
Padrão true (tarifa rateada proporcionalmente). Com false, a fatia de tarifa deste recebedor passa ao marketplace — até o limite da sobra líquida dele na venda; o que não couber fica com o recebedor — a isenção nunca leva o líquido do marketplace a negativo. É o "proprietário recebe o aluguel cheio".
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).
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.
// 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.
Com a chave gk_test_, use estes números para forçar cada desfecho do adquirente.
Número
Resultado
4111 1111 1111 1111
Aprovado
4000 0000 0000 0002
Recusado — declined
4000 0000 0000 9995
Saldo insuficiente
4000 0000 0000 0101
Suspeita de fraude
4000 0000 0000 0259
Timeout 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
A tabela de tarifas é definida por conta, na proposta comercial: a plataforma não publica preço de prateleira. Consulte as tarifas da sua conta 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 });
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ço
O que é
/llms.txt
Resumo da API e links para cada documento — o agente lê primeiro e decide o que buscar.
/llms-full.txt
Toda a documentação num arquivo só, para despejar no contexto de uma vez.
https://api.trustand.com.br/openapi.json
Contrato de cada rota: parâmetros, corpo e respostas. Serve para o agente validar o que gerou.