Skip to main content
TED OUT lets your customers send money to any account at any Brazilian bank. The two-step flow, initiate then confirm, lets the customer review the fee before the system commits the transfer.

How it works for your customer


Step 1: Enter details and review fee The customer provides the recipient’s bank details and the amount. The system calculates the fee and returns the total cost before it debits anything. The customer sees exactly what they will pay. Step 2: Confirm and send After the customer confirms, the system places a hold on the funds (amount + fee) in their account. It submits the transfer through JD’s SPB gateway to the BACEN network and issues a confirmation number at once.

Prerequisites


Before you initiate a transfer:
  • The sender must have a registered account in CRM.
  • The sender’s balance must cover the transfer amount plus the applicable fee.
  • You must request the transfer on a business day, inside the operating window (06:30 to 17:00 Brasília time by default).

Step 1: Initiate the transfer


The customer submits the recipient’s details and the amount. The system validates the request, calculates the fee, and creates a transfer intent that is valid until the close of that day’s operating window. The system moves no funds at this stage. See the full request specification in the Initiate Transfer reference. Endpoint: POST /v1/transfers/initiate Response (key fields):
Fee direction (cash-out): For TED OUT transfers, the plugin adds the fee on top of the transfer amount, so totalAmount = amount + feeAmount. The plugin holds, then debits, the full total from the sender’s account. TED IN works the other way and deducts the fee from the received amount.
The transfer intent expires at expiresAt, the close of that day’s operating window. If the customer does not confirm in time, create a new initiation.

Step 2: Confirm the transfer


After the customer reviews the fee and confirms, submit the initiationId to process the transfer. The system provisions the funds and sends the payment to the BACEN network. Most integrations process the transfer with only the initiationId. Some tenants sign TED OUT payloads outside the plugin. These tenants first call POST /v1/transfers/signing/prepare. They then send signingArtifactId, payloadHash, and signature with the same initiationId. See the full request specification in the Process Transfer reference. Endpoint: POST /v1/transfers/process Response (key fields):

Settlement timeline


1

Submitted

The system provisions the funds and sends the transfer to the BACEN network. Status: PROCESSING.
2

Settled

The STR confirms settlement, and the plugin debits the held funds. Status: COMPLETED.
3

Status available

The plugin exposes the COMPLETED status through the transfer and reconciliation APIs. It does not emit transfer.completed for TED OUT.
TED settles same-day (D+0) for transfers submitted inside the operating window.

Operating hours


Request TED transfers only on business days, 06:30–17:00 (Brasília, UTC-3, by default). The plugin rejects any transfer outside this window at once and moves no funds. It also rejects BACEN bank holidays. The error response gives the next available time.

Error handling


JD or the STR rejects the transfer. The plugin releases the hold, so the full amount, including the fee, returns to the sender’s available balance. Status: REJECTED. When JD rejects the transfer at submission, the plugin sends a transfer.rejected webhook.
The plugin retries the JD call (jdspb.max_retries, default 3). If the outcome stays unknown after retries (a 5xx or a timeout from JD SPB), the plugin does not auto-revert the transfer. It keeps the hold and the PROCESSING status, and hands the transfer to the reconciliation worker, which asks JD for the outcome. If reconciliation runs out of attempts, the transfer becomes FAILED with the hold still in place, and waits for an operator (MANUAL_REVIEW). A clear 4xx rejection differs: it reverts the hold at once (see the rejected case above).
The destination bank can return the funds after settlement, for example on account closure or a regulatory hold. The original transfer stays COMPLETED. The plugin creates a new TED_IN refund transfer that credits the returned amount to the original sender, with originalTransferId and devolutionCode. The plugin keeps the fee. It also sends a transfer_outgoing.devolution_notified webhook.
Every mutating transfer request must include an X-Idempotency header (max 255 characters). Reuse the same key to repeat a request whose response you did not receive. After a 5xx, read the transfer before you send it again. See the developer guide for details.
For a full list of error codes, see the TED error reference.

Check transfer status


Track the progress of a transfer at any time. Endpoint: GET /v1/transfers/ Response (key fields):

Cancel a transfer


You can cancel a transfer while it is in CREATED or PENDING status, before the plugin submits it to the network. Endpoint: POST /v1/transfers//cancel
You cannot cancel a transfer in PROCESSING or a later state. After the plugin submits it to the BACEN network, the transfer must complete or fail before any reversal.

Common ISPB codes


Last verified: 2026-02-06. Values are subject to change. For a complete list, consult the ISPB directory on the Central Bank website.