How it works
- A customer at another bank initiates a TED transfer addressed to one of your institution’s accounts
- Every 30 seconds, the plugin polls the JD SPB network for new incoming transfers
- The recipient account is validated against your CRM using the document number in the transfer message
- The amount is credited to the recipient’s account automatically (minus the cashin fee, if configured)

Detection and processing timeline
What your customer experiences after the origin bank sends the transfer:
| Time | What happens |
|---|---|
| T+0s | Origin bank submits the transfer to the BACEN network |
| T+30s | Plugin detects the transfer; status moves to RECEIVED |
| T+32s | Recipient account is looked up and confirmed; status moves to PROCESSING |
| T+35s | Amount is credited to the recipient’s account; status moves to COMPLETED |
| T+36s | Webhook notification is sent to your system |
Transfer states
| State | What it means for the recipient |
|---|---|
RECEIVED | Transfer detected on the network; being processed |
PROCESSING | Recipient account confirmed; credit is being applied |
COMPLETED | Funds have arrived in the recipient’s account |
FAILED | Recipient could not be identified; funds returned to sender |
Receiving fee (cashin)
Your organization can optionally charge a fee on incoming transfers. When enabled, the fee is deducted from the amount before it is credited — the recipient receives the net amount. The fee amount and configuration are set per organization via the Fees Engine. Formula:
credited amount = transfer amount − fee
Example: a R2.50 fee results in R$997.50 credited to the recipient’s account. This is the opposite of TED OUT, where the fee is added on top and the sender pays more.
What happens when a recipient isn’t found
If the document number in the incoming transfer cannot be matched to an account in your CRM, the transfer is automatically returned to the origin bank. The sending customer receives their money back. No manual intervention is needed and no funds remain unaccounted for. The transfer record is marked as
FAILED with the reason “Recipient account could not be identified.”
Querying received transfers
Use the List Transfers endpoint to retrieve all incoming transfers. Filter by
type=TED_IN to view only received transfers.
Endpoint: GET /v1/transfers
Response (key fields):
Webhooks
Configure a webhook to get real-time notifications when transfers arrive. The
transfer.incoming.completed event fires as soon as a transfer is credited. See Webhooks for setup and event payload details.
Reconciliation
For accounting and finance reconciliation, each transfer record includes the following fields:
| Field | Usage |
|---|---|
controlNumber | JD SPB control number — unique per transfer, used for interbank reconciliation |
transferId | Lerian internal identifier |
createdAt | Timestamp when the transfer was detected |
completedAt | Timestamp when funds were credited |
Processing guarantees
The plugin is designed so that no transfer is lost and no transfer is credited twice:
- No duplicate credits — each transfer message carries a unique sequence number; the plugin rejects any attempt to process the same message more than once
- Automatic retry on failure — transient errors (such as a momentary service interruption) are retried with exponential backoff before any failure state is recorded
- Dead-letter queue for unresolvable issues — if a transfer cannot be processed after all retries, it is moved to a dead-letter queue for manual review, ensuring nothing is silently dropped

