Internal transfers
An internal transfer moves funds between accounts inside LB Pay, without leaving for BACEN. Because it does not touch the external settlement network, it completes faster — but the integration rules are identical to every other write operation.
API: POST /v1/transfer, GET /v1/transfer/{externalId}
curl --request POST \
--url "https://api.sdb.lbpay.com.br/v1/transfer" \
--header "Authorization: Bearer $TOKEN" \
--header 'content-type: application/json' \
--data '{
"externalId": "5f6a7b8c-9d0e-1f2a-3b4c-5d6e7f8a9b0c",
"amount": 2500,
"toAccountNumber": "00098765"
}'
amount is in cents. toAccountNumber cannot be the account paying.
Rules that still apply
- One
externalIdper transfer, persisted before sending and reused on retries. See Idempotency. - Timeouts require a
GET, not an assumption. See Retries and timeouts.
Statuses
The terminal success status is COMPLETED — not SUCCESS, which is what Pix-Out uses.
Mapping the two flows to the same vocabulary is a common source of transfers that appear
stuck forever.
PENDING and CONFIRMED are transitional: take no action until the transfer reaches
COMPLETED, REJECTED, EXPIRED or ERROR. The full table and the state diagram are in
Status Machine — Internal transfer.
Related
- Internal transfer errors
- Reconciliation — internal transfers appear in the statement