Sign in

Authentication

Merchant API key

gethttps://api.eyt.com.br/v1/pix/balance

Use Authorization: Bearer pix_YOUR_MERCHANT_KEY for merchant endpoints. Account login tokens and dashboard Client ID/Secret credentials are a separate account-management flow.

FieldDescription
Productionhttps://api.eyt.com.br
Sandboxhttps://sandbox.eyt.com.br
AuthorizationBearer pix_...
Content-Typeapplication/json
Idempotency-KeyRequired for charge/payout creation. Reuse the same key and identical body when retrying an uncertain request.

Production requires the issued client mTLS certificate and matching private key. Keep sandbox and production credentials separate. The examples are illustrative and never submit live requests from this page.

Illustrative response

200
{
  "balanceMinor": 10000,
  "currency": "BRL"
}

Updated today

Was this page helpful?

Pix - Cash In

Create Pix charge

posthttps://api.eyt.com.br/v1/pix/charges
FieldDescription
amountMinorInteger BRL cents, at least 1000 (R$ 10.00). Channel limits also apply.
expiresInSeconds60–86400
descriptionOptional, up to 140 characters.
payerRequired on the production channel: name, document (11 or 14 digits), email and phone (10–15 digits). Use actual payer data, not the placeholders in this example.

Response status: active, paid or expired. The bank/payment confirmation changes the charge to paid. endToEndId is nullable before settlement.

{
  "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"
}

Sandbox only: POST /v1/sandbox/charges/{id}/pay simulates payment; POST /v1/sandbox/charges/{id}/expire simulates expiry. Both use the sandbox merchant key.

Request body

{
  "amountMinor": 1500,
  "expiresInSeconds": 3600,
  "description": "Example",
  "payer": {
    "name": "<payer name>",
    "document": "<CPF or CNPJ digits>",
    "email": "payer@example.com",
    "phone": "<phone digits>"
  }
}

Illustrative response

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"
}

Pix - Cash In

Create charge with TXID

puthttps://api.eyt.com.br/v1/pix/charges/{txid}

Creates a charge with a caller-supplied alphanumeric TXID (26–35 characters). This is a creation/idempotency operation, not a cancellation or arbitrary update. Confirm support for your production channel before using custom TXIDs.

FieldDescription
amountMinorInteger BRL cents, at least 1000 (R$ 10.00). Channel limits also apply.
expiresInSeconds60–86400
descriptionOptional, up to 140 characters.
payerRequired on the production channel: name, document (11 or 14 digits), email and phone (10–15 digits). Use actual payer data, not the placeholders in this example.

Response status: active, paid or expired. The bank/payment confirmation changes the charge to paid. endToEndId is nullable before settlement.

{
  "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"
}

Sandbox only: POST /v1/sandbox/charges/{id}/pay simulates payment; POST /v1/sandbox/charges/{id}/expire simulates expiry. Both use the sandbox merchant key.

Request body

{
  "amountMinor": 1500,
  "expiresInSeconds": 3600,
  "description": "Example",
  "payer": {
    "name": "<payer name>",
    "document": "<CPF or CNPJ digits>",
    "email": "payer@example.com",
    "phone": "<phone digits>"
  }
}

Illustrative response

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"
}

Updated today

Pix - Cash In

Get and list charges

gethttps://api.eyt.com.br/v1/pix/charges/{id}

Use the charge UUID returned as id. List with GET /v1/pix/charges?page=1&pageSize=20&status=active. pageSize: 1–100. The list contains items, page, pageSize and 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"
}

Illustrative response

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"
}

Pix - Cash In

Configure webhooks and retries

puthttps://api.eyt.com.br/v1/pix/webhooks

One URL and event subscription per merchant in each environment. This endpoint replaces the configuration and returns a new signing secret on every PUT, including updates. Store the returned secret securely and update your verifier. GET returns secret: null.

{
  "url": "https://merchant.example/webhooks",
  "events": [
    "charge.*",
    "payout.*"
  ]
}
FieldDescription
X-EYT-TimestampUnix seconds.
X-EYT-Signaturehex HMAC-SHA256(secret, timestamp + "." + rawBody)
X-EYT-Eventcharge.paid / payout.settled / payout.failed
X-EYT-Delivery-IdIdentifier of this attempt; regenerated on retries. Do not use it alone to deduplicate an event.

Validate the signature using the exact raw request body and a timestamp tolerance of 300 seconds. Compare signatures in constant time. Accepting any HTTP 2xx completes delivery. Respond promptly after durably accepting the event.

Retry policy

FieldDescription
1Initial attempt when due
21 min
35 min
415 min
51 h
64 h

Six attempts total: the initial attempt plus five retries. Each delay starts after the preceding failed attempt. Nominal backoff total: 5 hours 21 minutes, plus request durations, queueing and scheduling. This is not a delivery deadline. Sandbox Lambda suspension may delay processing until a later invocation. After attempt 6 fails, automatic retries stop.

{
  "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
  }
}

The envelope contains id, type, objectId, createdAt and data. Event data uses domain status casing (for example Paid or Failed); GET responses use lowercase. Process idempotently by object and event state, and use GET to reconcile the current status. data.failureReason mirrors the payout field: null when no reason was recorded, otherwise a short explanation string.

Request body

{
  "url": "https://merchant.example/webhooks",
  "events": [
    "charge.*",
    "payout.*"
  ]
}

Illustrative response

200
{
  "url": "https://merchant.example/webhooks",
  "events": [
    "charge.*",
    "payout.*"
  ],
  "secret": "<save returned secret>",
  "active": true
}

Updated today

Pix - Cash In

Request refund

posthttps://api.eyt.com.br/v1/pix/charges/{id}/refunds

Use the charge UUID. Body: amountMinor in cents and a non-empty reason. Idempotency-Key is required. GET on this route lists refunds; PUT is also supported for creation. A recorded refund is not proof of banking settlement.

Request body

{
  "amountMinor": 100,
  "reason": "Customer request"
}

Illustrative response

201
{
  "id": "<refund UUID>",
  "chargeId": "<charge UUID>",
  "amountMinor": 100,
  "reason": "Customer request"
}

Pix - Cash Out

Limits and error handling

gethttps://api.eyt.com.br/v1/pix/payout-limit

Transaction limits are set per merchant at onboarding and may change over time. Use GET /v1/pix/payout-limit for the current daily payout allowance that applies to your account.

The gateway counts the daily payout allowance from 00:00 UTC. When a new payout would exceed the allowance, POST /v1/pix/payouts returns 422 daily_limit_exceeded before anything is sent.

FieldDescription
422 validation_errorInvalid input, missing Idempotency-Key, or DICT key not found (see details).
422 daily_limit_exceededDaily payout allowance exceeded.
422 saldo_insuficienteInsufficient balance before sending.
503 unavailableService unavailable: retry the request (idempotency applies).
404 not_foundResource not found in merchant scope.

These are request errors, not failureReason values. On a failed payout, failureReason carries the reason EYT confirmed for the failure (or null); a timeout with an unknown payment outcome stays processing while reconciliation runs. The 30-minute review threshold is not an automatic failure.

Illustrative response

200
{
  "dailyLimitMinor": "<your daily allowance in minor units>"
}

Updated today

Pix - Cash Out

Get balance

gethttps://api.eyt.com.br/v1/pix/balance

balanceMinor is the merchant ledger balance in BRL cents. This is not the shared bank account balance.

{
  "balanceMinor": 10000,
  "currency": "BRL"
}

Illustrative response

200
{
  "balanceMinor": 10000,
  "currency": "BRL"
}

Pix - Cash Out

Create payout

posthttps://api.eyt.com.br/v1/pix/payouts
FieldDescription
destinationKeyDestination PIX key.
destinationKeyTypecpf / cnpj / email / phone / random
amountMinorPositive integer, BRL cents.

Idempotency-Key is required. Allowlist enforcement is per merchant. With enforcement disabled, prior key registration is unnecessary. With enforcement enabled, an unregistered recipient is blocked.

The 201 response is the initial snapshot, often approved. GET /v1/pix/payouts/{id} returns the current state: approved, blocked, processing, settled or failed. Do not treat approved as settlement or blindly create another payout after a 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"
}

Request body

{
  "destinationKey": "recipient@example.com",
  "destinationKeyType": "email",
  "amountMinor": 1500
}

Illustrative response

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"
}

Updated today

Pix - Cash Out

Get payout and details

gethttps://api.eyt.com.br/v1/pix/payouts/{id}

Use the payout UUID (id), not endToEndId. GET /v1/pix/payouts lists items, page, pageSize and total. GET /v1/pix/payouts/{id}/details adds optional pspStatus, a bank-side status that may be null; it is not a failure explanation.

failed payouts expose failureReason (in POST/GET responses, in the payout.failed webhook, and on /details): null when no reason was recorded, otherwise a short explanation string. It is diagnostic text, not an enum β€” do not branch business logic on specific values; branch on status instead. The failed transition means EYT confirmed nothing was sent, and the principal returns to the balance at that moment; the fee is not refunded. blocked payouts (balance/allowlist) never carry 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"
}

Illustrative response

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"
}

Updated today

Pix - Cash Out

Pay a QR code

posthttps://api.eyt.com.br/v1/pix/payments/qrcode

This route is separate from payouts by key. It takes brCode and optional amountMinor. Channel support must be confirmed before production use.

Request body

{
  "brCode": "<BR Code>",
  "amountMinor": 1500
}

Illustrative response

201
{
  "id": "<payment UUID>",
  "endToEndId": null,
  "amountMinor": 1500
}

Pix - Cash Out

Read webhook configuration

gethttps://api.eyt.com.br/v1/pix/webhooks

The same configuration covers incoming and outgoing Pix. Subscribe to payout.* to include all payout state events. Use PUT /v1/pix/webhooks/rotate to rotate the signing secret.

One URL and event subscription per merchant in each environment. This endpoint replaces the configuration and returns a new signing secret on every PUT, including updates. Store the returned secret securely and update your verifier. GET returns secret: null.

{
  "url": "https://merchant.example/webhooks",
  "events": [
    "charge.*",
    "payout.*"
  ]
}
FieldDescription
X-EYT-TimestampUnix seconds.
X-EYT-Signaturehex HMAC-SHA256(secret, timestamp + "." + rawBody)
X-EYT-Eventcharge.paid / payout.settled / payout.failed
X-EYT-Delivery-IdIdentifier of this attempt; regenerated on retries. Do not use it alone to deduplicate an event.

Validate the signature using the exact raw request body and a timestamp tolerance of 300 seconds. Compare signatures in constant time. Accepting any HTTP 2xx completes delivery. Respond promptly after durably accepting the event.

Retry policy

FieldDescription
1Initial attempt when due
21 min
35 min
415 min
51 h
64 h

Six attempts total: the initial attempt plus five retries. Each delay starts after the preceding failed attempt. Nominal backoff total: 5 hours 21 minutes, plus request durations, queueing and scheduling. This is not a delivery deadline. Sandbox Lambda suspension may delay processing until a later invocation. After attempt 6 fails, automatic retries stop.

{
  "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
  }
}

The envelope contains id, type, objectId, createdAt and data. Event data uses domain status casing (for example Paid or Failed); GET responses use lowercase. Process idempotently by object and event state, and use GET to reconcile the current status. data.failureReason mirrors the payout field: null when no reason was recorded, otherwise a short explanation string.

Illustrative response

200
{
  "url": "https://merchant.example/webhooks",
  "events": [
    "charge.*",
    "payout.*"
  ],
  "secret": null,
  "active": true
}

Compatibility reference for disputes. Availability on this channel must be confirmed with support.

Disputes

List open disputes

gethttps://api.eyt.com.br/v1/disputes?status=aberta

Lists all open disputes. Supports pagination via page and limit.

Query params

FieldTypeDescription
pageintegeroptionalPage (default: 1).
limitintegeroptionalItems per page (default: 20, max: 100).

Responses

200 OK
dataarrayList of disputes.
totalintegerTotal open disputes.
pageintegerCurrent page.

Compatibility reference for disputes. Availability on this channel must be confirmed with support.

Disputes

Get dispute by ID

gethttps://api.eyt.com.br/v1/disputes/{id}

Gets details of a specific dispute, including reason, amount, defense deadline and event history.

Path params

FieldTypeDescription
idstringrequiredDispute identifier.

Responses

200 OK
idstringDispute identifier.
motivostringDispute reason.
valornumberContested amount.
prazo_defesastringDefense submission deadline.
statusstringABERTA, EM_ANALISE, GANHA, PERDIDA.

Compatibility reference for disputes. Availability on this channel must be confirmed with support.

Disputes

Submit dispute defense

posthttps://api.eyt.com.br/v1/disputes/{id}/defesa

Submits a defense for an open dispute. Include the justification and, optionally, supporting attachments.

After submission, the dispute enters status EM_ANALISE and cannot be edited.

Path params

FieldTypeDescription
idstringrequiredDispute identifier.

Body params

FieldTypeDescription
justificativastringrequiredDefense text.
anexosarrayoptionalURLs or IDs of attached documents.

Responses

200 OK
idstringDispute identifier.
statusstringEM_ANALISE.

Bank Slip

Bank slip proof availability

gethttps://api.eyt.com.br/v1/pix/bank-slips/{id}/proof

This route is not currently implemented. It returns HTTP 501 with code not_implemented; it does not provide a working PDF receipt.

Illustrative response

501
{
  "code": "not_implemented",
  "message": "Bank slip proof endpoint not yet available.",
  "details": []
}