How it works
- A customer at another bank starts a TED transfer to one of your institution’s accounts
- When TED IN polling is on (
JD_POLLING_ENABLED), the plugin polls the JD SPB network for new incoming transfers every 60 seconds (defaultJD_POLL_INTERVAL_SECONDS) - The plugin looks up the recipient account in your CRM by the document number in the transfer message
- The plugin credits the recipient account, minus the cashin fee if you configured one. The plugin posts the credit on the recipient’s Midaz ledger, under the ledger routing for that organization, ledger, and TED IN
Detection and processing timeline
The stages below show what happens after the origin bank sends the transfer:
Typical time: The credit completes within one poll cycle. With the default 60-second poll interval, the funds land in about a minute.
Transfer states
Receiving fee (cashin)
Your organization can charge a fee on incoming transfers. When you enable it, the plugin deducts the fee from the amount before it credits the recipient. The recipient receives the net amount. You set the fee amount and configuration per organization through the Fees Engine. Formula:
credited amount = transfer amount − fee
Example: a R2.50 fee credits R$997.50 to the recipient’s account. This is the opposite of TED OUT, where the plugin adds the fee on top and the sender pays more.
What happens when a recipient isn’t found
If the plugin cannot match the document number in the incoming transfer to an account in your CRM, the tenant policy
jd_polling.auto_return_authorized decides what happens. The plugin credits nothing and creates no transfer record in either case.
false(default): the plugin returns nothing. It retains the message with reasonRECIPIENT_NOT_FOUND_RETURN_UNAUTHORIZED. An operator settles the funds outside the plugin, then records the outcome with Close Unsettled TED IN Credit. The close moves no money.true: the plugin returns the transfer to the origin bank (STR0010 devolução), and the sending customer gets the money back.
- The recipient’s account is not in the ledger or matches more than one account in your CRM.
- The ledger refuses the credit.
- The fee leaves nothing to credit.
- The fee cannot be resolved and
fees.fail_closed_defaultistrue.
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):
Operational endpoints
These operator endpoints control the TED IN polling loop. They target scripts and runbooks, not end-user traffic.
For request body, response, status codes, and error codes, see the TED OpenAPI specification.
Messages that wait for an operator
Monitor each of these queues on its own. They are not interchangeable:
The webhook DLQ is a different path: it holds failed outbound webhook deliveries, not inbound transfers. See Webhooks.
Webhooks
Configure a webhook to get real-time notifications when transfers arrive. The
transfer_incoming.completed event fires as soon as the plugin credits a transfer. See Webhooks for setup and event payload details.
Reconciliation
For accounting and finance reconciliation, each transfer record includes these fields:
The plugin persists transfer records for reconciliation and audit.
Processing guarantees
- No duplicate credits: the plugin stores each JD message once, by its sequence number (
NumCabSeq). It also deduplicates credits by control number, sender ISPB, and amount. - Message first: the plugin stores each message before it processes it. A message that it cannot finish stays unprocessed, and the next poll cycle processes it again.
- Operator queues: a message that the plugin can neither credit nor return waits in the queues above.

