Using Pix Automatico
O Pix Automático permite que você cobre seus clientes de forma recorrente (assinaturas, mensalidades, serviços) sem que o pagador precise autorizar cada cobrança individualmente. O cliente autoriza uma única vez a recorrência no app do próprio banco e, a partir daí, cada cobrança (chamada de collection) é debitada automaticamente na data combinada, dentro dos limites que foram autorizados. Na Trio, o Pix Automático é composto por três objetos encadeados:- Recorrência (
recurrence): o “contrato” de autorização entre você e o pagador. Define periodicidade, valor (fixo ou variável), datas e regras de retentativa. - Cobrança (
collection): cada ocorrência de cobrança gerada a partir da recorrência (por exemplo, a mensalidade de outubro). - Tentativa (
attempt): cada tentativa de liquidação de uma cobrança. Uma mesma cobrança pode ter mais de uma tentativa, de acordo com a política de retentativa configurada.
Todos os exemplos usam o ambiente de sandbox (https://api.sandbox.trio.com.br). Em produção, troque a base parahttps://api.trio.com.br.
Endpoints
Criando uma recorrência
A recorrência é criada com umPOST para o endpoint de criação. Antes de ver as variações por jornada, conheça os parâmetros que você sempre precisa enviar.
POST: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences
Campos obrigatórios:
virtual_account_id: conta virtual que receberá as cobranças.counterparty: dados do pagador.tax_numberenamesão obrigatórios. Para autorização via app (jornadaapp), também é obrigatório obank_accountdo pagador.description: descrição da recorrência (máx. 35 caracteres). Aparece para o pagador na autorização.periodicity: frequência da cobrança.contract_number: número do contrato/assinatura no seu sistema (máx. 35 caracteres).start_date: data de início da recorrência (ISO 8601).
periodicity:
Campos opcionais relevantes:
end_date: data final da recorrência. Se omitido, a recorrência não tem prazo de término.external_id: sua referência interna para a recorrência.amounts: define o valor (ver abaixo). Se omitido, a recorrência é criada com valor variável sem mínimo.first_payment: configura o primeiro pagamento conjugado à autorização (ver variações de jornada).options: bloco de configurações da recorrência (ver seção Opções e configurações).
Valor fixo x valor variável
O blocoamounts define como o valor de cada cobrança é determinado:
- Valor fixo — envie
amounts.fixed(em centavos). Toda cobrança terá esse valor e ele não pode ser alterado antes do envio. - Valor variável com mínimo — envie
amounts.minimum(em centavos). O pagador não pode autorizar um limite menor que o mínimo. Cada cobrança precisa ter o valor informado antes da data de cobrança. - Valor variável sem mínimo — omita o bloco
amounts. Também exige informar o valor antes de cada cobrança.
Em recorrências de valor variável, informar o valor antes do envio é obrigatório. Use a atualização de valor (PUT) ou informe oamountno agendamento, conforme a seção de gestão de cobranças.
Variações por jornada
O Pix Automático prevê diferentes jornadas de autorização. Na Trio, a jornada resultante é determinada pela combinação de três parâmetros e é retornada no campojourney (aut1–aut4) do objeto de recorrência:
options.authorization_type—qrcode(gera um QR Code para o pagador autorizar) ouapp(envia a solicitação de autorização direto para o app do banco do pagador).first_payment— presente ou ausente: define se há um primeiro pagamento conjugado à autorização.first_payment.recurrence_required—trueaprova recorrência e primeiro pagamento numa única autorização;falsepermite que o pagador pague o primeiro pagamento e recuse a recorrência.
reference_type no retorno indica o canal usado: qrdn (QR Code dinâmico), qres (QR Code estático) ou requ (solicitação enviada ao app).
A seguir, as variações mais comuns utilizadas por nossos clientes:
Jornada A — Autorização via QR Code, valor fixo, sem primeiro pagamento
O cliente lê um QR Code e autoriza a recorrência. Nenhuma cobrança é feita no ato da autorização.
due_detail permite configurar vencimento, juros, multa e descontos do primeiro pagamento.
DefinindoJornada C — Solicitação enviada direto ao app do pagador Em vez de gerar um QR Code, a solicitação de autorização é enviada diretamente para o app do banco do pagador. Nesse caso, orecurrence_required: false, o pagador pode pagar o primeiro pagamento e ainda assim recusar a recorrência. Comtrue, recorrência e primeiro pagamento são aprovados juntos, em uma única autorização.
counterparty.bank_account é obrigatório — é a conta que receberá o pedido de aprovação.
recurrence request), que você pode acompanhar com load_requests na consulta da recorrência ou pelo endpoint GET /recurrences/requests/{id}. Os status da solicitação são: created, sent, received, rejected, accepted, expired, cancelled.
Jornada D — Valor variável com mínimo
Para assinaturas em que o valor muda a cada ciclo (consumo, uso, parcelas variáveis), informe apenas o mínimo. O valor de cada cobrança deverá ser informado antes do envio.
Resposta da criação
Em caso de sucesso você recebe201 com o objeto da recorrência. Para jornadas via QR Code, o bloco qrcode traz o hash (Copia e Cola) e o id do QR Code. O id_rec é o identificador da recorrência no SPI/Bacen e o id é o identificador interno na Trio.
hash em “Copia e Cola” e/ou renderize a imagem do QR Code a partir dele. A recorrência só passa a valer depois que o pagador a autoriza — você acompanha isso pelo webhook recurrence.approved (ou recurrence.rejected / recurrence.expired).
Opções e configurações na criação
O blocooptions define o comportamento da recorrência ao longo do tempo. Todos os campos são opcionais e têm valores padrão.
Gestão de cobrança automática
Comautomatic_schedule: true (padrão), a Trio cria e agenda automaticamente cada cobrança na periodicidade definida. Você não precisa fazer nada a cada ciclo — basta reagir aos webhooks. Use este modo quando o valor é fixo ou quando você já consegue determinar o valor com antecedência.
Com automatic_schedule: false (gestão manual), você é responsável por criar e agendar cada cobrança a cada ciclo. Esse modo é necessário, por exemplo, quando o valor variável só é conhecido perto da data de cobrança. Veja a seção Gestão manual de cobranças.
Retentativas e clientes que não pagam
Aretry_policy define o que acontece quando uma cobrança não é liquidada.
Se automated_attempt_retry for enviado como true, a Trio será responsável por criar e gerenciar automaticamente essas retentativas. Caso seja enviado como false, o gerenciamento das retentativas fica sob responsabilidade da sua aplicação.
3r_7d— a cobrança é retentada 3 vezes ao longo de 7 dias, em dias alternados. Cada retentativa gera uma nova attempt. Se nenhuma tentativa for liquidada, a cobrança vai para um status final de falha ou expiração.none— não há retentativas. Uma tentativa com falha encerra a cobrança.
Cancelar a recorrência quando o cliente não paga. A política de retentativas atua no nível da cobrança, não da recorrência. Se a sua regra de negócio é encerrar a assinatura após uma cobrança não paga, monitore os webhooks de attempt (recurrence_collection_attemptcom tipofailedouexpired) e/ou de cobrança (recurrence_collectioncom tipoexpiredourejected). Ao detectar o esgotamento das retentativas, chame o endpoint de cancelamento da recorrência para implementar o cancelamento automático por inadimplência.
Gestão de cobranças (collections)
Cada cobrança representa uma ocorrência de débito da recorrência. O ciclo de vida de uma cobrança passa pelos status:created, active, settled, expired, rejected, cancelled. As tentativas de liquidação têm os status: requested, scheduled, settled, cancelled, rejected, expired, failed.
Gestão manual: criar a próxima cobrança
Comautomatic_schedule: false, crie a próxima cobrança da recorrência:
POST: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/create_next_collection
200 traz a cobrança criada (RecurrenceCollection) com seus estágios (stages) e tentativas (attempts).
Agendar uma cobrança (gestão manual)
Depois de criada, a cobrança precisa ser agendada para ser enviada ao banco recebedor. O agendamento deve ocorrer entre 2 e 10 dias antes da data de pagamento do ciclo. No agendamento você pode, opcionalmente, informar o valor (para recorrências de valor variável), a data de vencimento e umexternal_id.
POST: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/{id}/schedule
amount: valor em centavos. Use para informar/atualizar o valor antes de agendar. Não funciona em recorrências de valor fixo.due_date: data de vencimento da tentativa.external_id: sua referência para a tentativa.
204 No Content. Acompanhe o resultado pelo webhook recurrence_collection_attempt com tipo scheduled e, depois, settled ou failed.
Atualizar o valor de uma cobrança antes do envio
Para recorrências de valor variável, você pode atualizar o valor de uma cobrança que ainda não foi enviada ao banco recebedor:PUT: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/{id}
amount: novo valor em centavos.- Só é possível atualizar enquanto a cobrança ainda não foi enviada. Em recorrências de valor fixo, o valor não pode ser alterado.
200 retorna a cobrança atualizada.
Cancelar uma cobrança
Você pode cancelar uma cobrança específica (sem cancelar a recorrência inteira):POST: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/{id}/cancel
requester_tax_number(obrigatório): CPF/CNPJ de quem está solicitando o cancelamento.entity_id(opcional): identificador da entidade.
200 retorna a cobrança com status cancelled. As próximas cobranças da recorrência seguem normalmente.
Cancelando a recorrência
Para encerrar a recorrência por completo (nenhuma cobrança futura será gerada):POST: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/{id}/cancel
requester_tax_number(obrigatório): CPF/CNPJ de quem solicita o cancelamento.
200 retorna a recorrência com status cancelled. Você também recebe o webhook recurrence.cancelled.
Consultas
Consultar uma recorrência
GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/{id}
Parâmetros de query úteis:
load_stages(true/false): inclui o histórico de estágios da recorrência.load_requests(true/false): inclui as solicitações de autorização (jornadaapp).entity_id,bank_account_id,virtual_account_id: filtros opcionais.
Listar recorrências
GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences
from_datetimeeto_datetime(obrigatórios): janela de tempo.virtual_account_id,entity_id: filtros opcionais.limit,before,after: paginação.
Consultar uma solicitação de autorização
GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/requests/{id}
Use load_stages para incluir os estágios da solicitação.
Consultar e listar cobranças
Consultar uma cobrança específica, com estágios e tentativas:GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/{id}
load_stageseload_attempts: incluem estágios e tentativas.
GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections
recurrence_id(obrigatório),from_datetimeeto_datetime(obrigatórios).limit,before,after: paginação.
Consultar e listar tentativas
Listar tentativas de uma cobrança:GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/attempts
recurrence_idecollection_id(obrigatórios).from_datetime,to_datetime,limit,before,after: opcionais.
GET: https://api.sandbox.trio.com.br/banking/cashin/pix/recurrences/collections/attempts/{id}
load_stages: inclui os estágios da tentativa.
Webhooks
A comunicação assíncrona em cada etapa é feita por webhooks. Há três categorias relacionadas ao Pix Automático.Recorrência — categoria recurrence
Disparada nas mudanças de estado da recorrência (o “contrato” de autorização).
Exemplo de payload
Cobrança — categoria recurrence_collection
Disparada nas mudanças de estado de cada cobrança.
Exemplo de payload
Tentativa da cobrança — categoria recurrence_collection_attempt
Disparada em cada tentativa de liquidação de uma cobrança. É aqui que você acompanha o resultado efetivo do débito e as retentativas.
Exemplo de payload
Resumo do fluxo de ponta a ponta
A tabela abaixo amarra cada etapa do processo ao endpoint e ao webhook correspondente.Boa prática: trate sempre os estados finais via webhook (settled,failed,expired,cancelled) e use as consultas (GET) para reconciliação. Para inadimplência, combine o monitoramento das tentativas com aretry_policye decida, na sua aplicação, se cancela a recorrência.

