Autenticacao
Chave de API do merchant
Use Authorization: Bearer pix_SUA_CHAVE_MERCHANT nos endpoints do merchant. Tokens de login e Client ID/Secret do painel pertencem ao fluxo separado de gestão da conta.
| Campo | Descrição |
|---|---|
Production | https://api.eyt.com.br |
Sandbox | https://sandbox.eyt.com.br |
Authorization | Bearer pix_... |
Content-Type | application/json |
Idempotency-Key | Obrigatório ao criar cobrança/payout. Reutilize a mesma chave e o mesmo corpo ao repetir uma requisição de resultado incerto. |
Produção exige o certificado cliente mTLS emitido e a chave privada correspondente. Mantenha credenciais separadas por ambiente. Os exemplos são ilustrativos e esta página nunca envia requisições reais.
Resposta ilustrativa
200
{
"balanceMinor": 10000,
"currency": "BRL"
}Pix - Entrada
Criar cobrança Pix
| Campo | Descrição |
|---|---|
amountMinor | Inteiro em centavos de BRL, mínimo 1000 (R$ 10,00). Limites do canal também se aplicam. |
expiresInSeconds | 60–86400 |
description | Opcional, até 140 caracteres. |
payer | Obrigatório no canal de produção: name, document (11 ou 14 dígitos), email e phone (10–15 dígitos). Use dados reais do pagador, não os placeholders do exemplo. |
Status da resposta: active, paid ou expired. A confirmação do pagamento muda a cobrança para paid. endToEndId pode ser null antes da liquidação.
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Somente sandbox: POST /v1/sandbox/charges/{id}/pay simula pagamento; POST /v1/sandbox/charges/{id}/expire simula expiração. Ambos usam a chave merchant do sandbox.
Corpo da requisição
{
"amountMinor": 1500,
"expiresInSeconds": 3600,
"description": "Example",
"payer": {
"name": "<payer name>",
"document": "<CPF or CNPJ digits>",
"email": "payer@example.com",
"phone": "<phone digits>"
}
}Resposta ilustrativa
201
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Atualizado hoje
Pix - Entrada
Criar cobrança com TXID
Cria cobrança com TXID alfanumérico informado pelo cliente (26–35 caracteres). É uma operação de criação/idempotência, não de cancelamento ou alteração arbitrária. Confirme suporte no seu canal antes de usar TXID próprio.
| Campo | Descrição |
|---|---|
amountMinor | Inteiro em centavos de BRL, mínimo 1000 (R$ 10,00). Limites do canal também se aplicam. |
expiresInSeconds | 60–86400 |
description | Opcional, até 140 caracteres. |
payer | Obrigatório no canal de produção: name, document (11 ou 14 dígitos), email e phone (10–15 dígitos). Use dados reais do pagador, não os placeholders do exemplo. |
Status da resposta: active, paid ou expired. A confirmação do pagamento muda a cobrança para paid. endToEndId pode ser null antes da liquidação.
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Somente sandbox: POST /v1/sandbox/charges/{id}/pay simula pagamento; POST /v1/sandbox/charges/{id}/expire simula expiração. Ambos usam a chave merchant do sandbox.
Corpo da requisição
{
"amountMinor": 1500,
"expiresInSeconds": 3600,
"description": "Example",
"payer": {
"name": "<payer name>",
"document": "<CPF or CNPJ digits>",
"email": "payer@example.com",
"phone": "<phone digits>"
}
}Resposta ilustrativa
201
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Atualizado hoje
Pix - Entrada
Consultar e listar cobranças
Use o UUID retornado em id. Liste com GET /v1/pix/charges?page=1&pageSize=20&status=active. pageSize: 1–100. A lista contém items, page, pageSize e total.
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Resposta ilustrativa
200
{
"id": "00000000-0000-0000-0000-000000000123",
"merchantId": "00000000-0000-0000-0000-000000000001",
"amountMinor": 1500,
"status": "active",
"description": "Example",
"expiresAt": "2026-09-22T18:00:00Z",
"brCode": "<brCode returned by API>",
"txid": "<txid returned by API>",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Atualizado hoje
Pix - Entrada
Configurar webhooks e retries
Uma URL e uma assinatura de eventos por merchant em cada ambiente. Este endpoint substitui a configuração e devolve novo segredo a cada PUT, inclusive atualizações. Guarde o segredo e atualize o verificador. GET retorna secret: null.
{
"url": "https://merchant.example/webhooks",
"events": [
"charge.*",
"payout.*"
]
}| Campo | Descrição |
|---|---|
X-EYT-Timestamp | Segundos Unix. |
X-EYT-Signature | hex HMAC-SHA256(secret, timestamp + "." + rawBody) |
X-EYT-Event | charge.paid / payout.settled / payout.failed |
X-EYT-Delivery-Id | Identificador desta tentativa; muda nos retries. Não use isoladamente para deduplicar um evento. |
Valide a assinatura com o corpo bruto exato e tolerância de timestamp de 300 segundos. Compare assinaturas em tempo constante. Qualquer HTTP 2xx conclui a entrega. Responda rapidamente após registrar o evento de forma durável.
Política de retries
| Campo | Descrição |
|---|---|
1 | Tentativa inicial quando elegível |
2 | 1 min |
3 | 5 min |
4 | 15 min |
5 | 1 h |
6 | 4 h |
Seis tentativas no total: inicial mais cinco retries. Cada intervalo começa após a falha anterior. Soma nominal dos intervalos: 5 horas e 21 minutos, além de duração das requisições, fila e agendamento. Não é prazo máximo de entrega. A suspensão da Lambda no sandbox pode adiar processamento até outra invocação. Após a sexta falha, os retries automáticos param.
{
"id": "<delivery UUID>",
"type": "payout.failed",
"objectId": "<payout UUID>",
"createdAt": "<event timestamp>",
"data": {
"payoutId": "<payout UUID>",
"merchantId": "<merchant UUID>",
"status": "Failed",
"amountMinor": 1500,
"endToEndId": null,
"failureReason": null
}
}O envelope contém id, type, objectId, createdAt e data. data usa status do domínio (por exemplo Paid ou Failed); GET usa minúsculas. Processe por objeto e estado de forma idempotente e reconcilie o status atual por GET. data.failureReason espelha o campo do payout: null quando nenhum motivo foi registrado, senão uma string curta de explicação.
Corpo da requisição
{
"url": "https://merchant.example/webhooks",
"events": [
"charge.*",
"payout.*"
]
}Resposta ilustrativa
200
{
"url": "https://merchant.example/webhooks",
"events": [
"charge.*",
"payout.*"
],
"secret": "<save returned secret>",
"active": true
}Atualizado hoje
Pix - Entrada
Solicitar reembolso
Use o UUID da cobrança. Corpo: amountMinor em centavos e reason não vazio. Idempotency-Key obrigatório. GET lista reembolsos; PUT também é aceito para criação. Registro de reembolso não é prova de liquidação bancária.
Corpo da requisição
{
"amountMinor": 100,
"reason": "Customer request"
}Resposta ilustrativa
201
{
"id": "<refund UUID>",
"chargeId": "<charge UUID>",
"amountMinor": 100,
"reason": "Customer request"
}Atualizado hoje
Pix - Saida
Limites e tratamento de erros
Limites de transação são definidos por merchant no onboarding e podem mudar ao longo do tempo. Use GET /v1/pix/payout-limit para consultar a cota diária de payout vigente para a sua conta.
O gateway conta a cota diária de payout desde 00:00 UTC. Quando um novo payout excederia a cota, POST /v1/pix/payouts retorna 422 daily_limit_exceeded antes de qualquer envio.
| Campo | Descrição |
|---|---|
422 validation_error | Entrada inválida, Idempotency-Key ausente ou chave DICT não encontrada (consulte details). |
422 daily_limit_exceeded | Limite diário de payout excedido. |
422 saldo_insuficiente | Saldo insuficiente antes do envio. |
503 unavailable | Serviço indisponível: repita a requisição (idempotência se aplica). |
404 not_found | Recurso não encontrado no escopo do merchant. |
Esses são erros de requisição, não valores de failureReason. Em um payout failed, failureReason carrega o motivo da falha confirmado pela EYT (ou null); timeout com resultado incerto mantém processing durante conciliação. O limiar de revisão de 30 minutos não causa falha automática.
Resposta ilustrativa
200
{
"dailyLimitMinor": "<your daily allowance in minor units>"
}Atualizado hoje
Pix - Saida
Consultar saldo
balanceMinor é o saldo do ledger do merchant em centavos de BRL, não o saldo da conta bancária compartilhada.
{
"balanceMinor": 10000,
"currency": "BRL"
}Resposta ilustrativa
200
{
"balanceMinor": 10000,
"currency": "BRL"
}Atualizado hoje
Pix - Saida
Criar payout
| Campo | Descrição |
|---|---|
destinationKey | Chave PIX de destino. |
destinationKeyType | cpf / cnpj / email / phone / random |
amountMinor | Inteiro positivo em centavos de BRL. |
Idempotency-Key obrigatório. A exigência de allowlist é por merchant. Quando desativada, dispensa cadastro prévio da chave. Quando ativa, destinatário não cadastrado fica blocked.
A resposta 201 é o retrato inicial, frequentemente approved. GET /v1/pix/payouts/{id} retorna o estado atual: approved, blocked, processing, settled ou failed. approved não significa liquidação; não crie outro payout indiscriminadamente após timeout.
{
"id": "00000000-0000-0000-0000-000000000456",
"merchantId": "00000000-0000-0000-0000-000000000001",
"destinationKey": "recipient@example.com",
"destinationKeyType": "email",
"recipientName": null,
"recipientDocumentMasked": null,
"amountMinor": 1500,
"status": "approved",
"failureReason": null,
"isNewRecipient": false,
"createdBy": "system",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Corpo da requisição
{
"destinationKey": "recipient@example.com",
"destinationKeyType": "email",
"amountMinor": 1500
}Resposta ilustrativa
201
{
"id": "00000000-0000-0000-0000-000000000456",
"merchantId": "00000000-0000-0000-0000-000000000001",
"destinationKey": "recipient@example.com",
"destinationKeyType": "email",
"recipientName": null,
"recipientDocumentMasked": null,
"amountMinor": 1500,
"status": "approved",
"failureReason": null,
"isNewRecipient": false,
"createdBy": "system",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Atualizado hoje
Pix - Saida
Consultar payout e detalhes
Use o UUID do payout (id), não endToEndId. GET /v1/pix/payouts lista items, page, pageSize e total. GET /v1/pix/payouts/{id}/details acrescenta pspStatus opcional, status do lado bancário que pode ser null; não é explicação de falha.
Payouts failed expõem failureReason (nas respostas POST/GET, no webhook payout.failed e em /details): null quando nenhum motivo foi registrado, senão uma string curta de explicação. É texto de diagnóstico, não enum — não ramifique lógica de negócio em valores específicos; ramifique em status. A transição para failed significa que a EYT confirmou que nada foi enviado, e o principal volta ao saldo nesse momento; a taxa não é reembolsada. Payouts blocked (saldo/allowlist) nunca carregam failureReason.
{
"id": "00000000-0000-0000-0000-000000000456",
"merchantId": "00000000-0000-0000-0000-000000000001",
"destinationKey": "recipient@example.com",
"destinationKeyType": "email",
"recipientName": null,
"recipientDocumentMasked": null,
"amountMinor": 1500,
"status": "approved",
"failureReason": null,
"isNewRecipient": false,
"createdBy": "system",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Resposta ilustrativa
200
{
"id": "00000000-0000-0000-0000-000000000456",
"merchantId": "00000000-0000-0000-0000-000000000001",
"destinationKey": "recipient@example.com",
"destinationKeyType": "email",
"recipientName": null,
"recipientDocumentMasked": null,
"amountMinor": 1500,
"status": "approved",
"failureReason": null,
"isNewRecipient": false,
"createdBy": "system",
"endToEndId": null,
"createdAt": "2026-09-22T17:00:00Z",
"updatedAt": "2026-09-22T17:00:00Z"
}Atualizado hoje
Pix - Saida
Pagar QR Code
Esta rota é separada de payouts por chave. Recebe brCode e amountMinor opcional. Confirme suporte do canal antes de usar em produção.
Corpo da requisição
{
"brCode": "<BR Code>",
"amountMinor": 1500
}Resposta ilustrativa
201
{
"id": "<payment UUID>",
"endToEndId": null,
"amountMinor": 1500
}Atualizado hoje
Pix - Saida
Consultar configuração de webhook
A mesma configuração cobre entradas e saídas Pix. Assine payout.* para incluir eventos de payout. Use PUT /v1/pix/webhooks/rotate para rotacionar o segredo.
Uma URL e uma assinatura de eventos por merchant em cada ambiente. Este endpoint substitui a configuração e devolve novo segredo a cada PUT, inclusive atualizações. Guarde o segredo e atualize o verificador. GET retorna secret: null.
{
"url": "https://merchant.example/webhooks",
"events": [
"charge.*",
"payout.*"
]
}| Campo | Descrição |
|---|---|
X-EYT-Timestamp | Segundos Unix. |
X-EYT-Signature | hex HMAC-SHA256(secret, timestamp + "." + rawBody) |
X-EYT-Event | charge.paid / payout.settled / payout.failed |
X-EYT-Delivery-Id | Identificador desta tentativa; muda nos retries. Não use isoladamente para deduplicar um evento. |
Valide a assinatura com o corpo bruto exato e tolerância de timestamp de 300 segundos. Compare assinaturas em tempo constante. Qualquer HTTP 2xx conclui a entrega. Responda rapidamente após registrar o evento de forma durável.
Política de retries
| Campo | Descrição |
|---|---|
1 | Tentativa inicial quando elegível |
2 | 1 min |
3 | 5 min |
4 | 15 min |
5 | 1 h |
6 | 4 h |
Seis tentativas no total: inicial mais cinco retries. Cada intervalo começa após a falha anterior. Soma nominal dos intervalos: 5 horas e 21 minutos, além de duração das requisições, fila e agendamento. Não é prazo máximo de entrega. A suspensão da Lambda no sandbox pode adiar processamento até outra invocação. Após a sexta falha, os retries automáticos param.
{
"id": "<delivery UUID>",
"type": "payout.failed",
"objectId": "<payout UUID>",
"createdAt": "<event timestamp>",
"data": {
"payoutId": "<payout UUID>",
"merchantId": "<merchant UUID>",
"status": "Failed",
"amountMinor": 1500,
"endToEndId": null,
"failureReason": null
}
}O envelope contém id, type, objectId, createdAt e data. data usa status do domínio (por exemplo Paid ou Failed); GET usa minúsculas. Processe por objeto e estado de forma idempotente e reconcilie o status atual por GET. data.failureReason espelha o campo do payout: null quando nenhum motivo foi registrado, senão uma string curta de explicação.
Resposta ilustrativa
200
{
"url": "https://merchant.example/webhooks",
"events": [
"charge.*",
"payout.*"
],
"secret": null,
"active": true
}Atualizado hoje
Referência de compatibilidade para disputas. A disponibilidade deste canal deve ser confirmada com suporte.
Disputas
Listar disputas em aberto
Lista todas as disputas em aberto. Suporta paginacao via page e limit.
Query params
| Campo | Tipo | Descricao | |
|---|---|---|---|
page | integer | opcional | Pagina (padrao: 1). |
limit | integer | opcional | Itens por pagina (padrao: 20, max: 100). |
Responses
200 OK
data | array | Lista de disputas. |
total | integer | Total de disputas em aberto. |
page | integer | Pagina atual. |
Atualizado hoje
Referência de compatibilidade para disputas. A disponibilidade deste canal deve ser confirmada com suporte.
Disputas
Consultar disputa por ID
Consulta os detalhes de uma disputa especifica, incluindo motivo, valor, prazo para defesa e historico de eventos.
Path params
| Campo | Tipo | Descricao | |
|---|---|---|---|
id | string | obrigatorio | Identificador da disputa. |
Responses
200 OK
id | string | Identificador da disputa. |
motivo | string | Motivo da disputa. |
valor | number | Valor contestado. |
prazo_defesa | string | Data limite para envio da defesa. |
status | string | ABERTA, EM_ANALISE, GANHA, PERDIDA. |
Atualizado hoje
Referência de compatibilidade para disputas. A disponibilidade deste canal deve ser confirmada com suporte.
Disputas
Enviar defesa de disputa
Envia a defesa para uma disputa aberta. Inclua a justificativa e, opcionalmente, anexos comprovantes.
Apos o envio, a disputa entra em status EM_ANALISE e nao pode ser editada.
Path params
| Campo | Tipo | Descricao | |
|---|---|---|---|
id | string | obrigatorio | Identificador da disputa. |
Body params
| Campo | Tipo | Descricao | |
|---|---|---|---|
justificativa | string | obrigatorio | Texto da defesa. |
anexos | array | opcional | URLs ou IDs de documentos anexos. |
Responses
200 OK
id | string | Identificador da disputa. |
status | string | EM_ANALISE. |
Atualizado hoje
Bank Slip
Disponibilidade de comprovante de boleto
Esta rota ainda não está implementada. Retorna HTTP 501 com código not_implemented; não fornece comprovante PDF funcional.
Resposta ilustrativa
501
{
"code": "not_implemented",
"message": "Bank slip proof endpoint not yet available.",
"details": []
}Atualizado hoje