curl --request POST \
--url https://api.example.com/v1/transfers/{transferId}/reconciliation/retry \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency: <x-idempotency>' \
--header 'X-Organization-Id: <x-organization-id>' \
--data '
{
"reason": "JD cabine confirms the settlement; requeueing for a fresh query"
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/transfers/{transferId}/reconciliation/retry"
payload := strings.NewReader("{\n \"reason\": \"JD cabine confirms the settlement; requeueing for a fresh query\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
req.Header.Add("X-Idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}const options = {
method: 'POST',
headers: {
'X-Organization-Id': '<x-organization-id>',
'X-Idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({reason: 'JD cabine confirms the settlement; requeueing for a fresh query'})
};
fetch('https://api.example.com/v1/transfers/{transferId}/reconciliation/retry', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.example.com/v1/transfers/{transferId}/reconciliation/retry"
payload = { "reason": "JD cabine confirms the settlement; requeueing for a fresh query" }
headers = {
"X-Organization-Id": "<x-organization-id>",
"X-Idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"transferId": "770e8400-e29b-41d4-a716-446655440003",
"reconciliationStatus": "AWAITING",
"requeuedAt": "2026-08-28T15:04:05Z"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0401",
"title": "Unauthorized",
"status": 401,
"detail": "Missing Token",
"code": "BTF-0401",
"category": "plugin",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0405",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"code": "BTF-0405",
"category": "plugin",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0429",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded",
"code": "BTF-0429",
"category": "rate_limit",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}Retry Transfer Reconciliation
Use this endpoint to return an outbound TED parked in manual review to the reconciliation queue, so the worker queries its settlement again. No transfer is re-sent and no hold is touched: only the reconciliation state moves back to AWAITING, with a zeroed attempt counter. The operator reason is required and is recorded in the audit trail.
curl --request POST \
--url https://api.example.com/v1/transfers/{transferId}/reconciliation/retry \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Idempotency: <x-idempotency>' \
--header 'X-Organization-Id: <x-organization-id>' \
--data '
{
"reason": "JD cabine confirms the settlement; requeueing for a fresh query"
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/transfers/{transferId}/reconciliation/retry"
payload := strings.NewReader("{\n \"reason\": \"JD cabine confirms the settlement; requeueing for a fresh query\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
req.Header.Add("X-Idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}const options = {
method: 'POST',
headers: {
'X-Organization-Id': '<x-organization-id>',
'X-Idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({reason: 'JD cabine confirms the settlement; requeueing for a fresh query'})
};
fetch('https://api.example.com/v1/transfers/{transferId}/reconciliation/retry', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.example.com/v1/transfers/{transferId}/reconciliation/retry"
payload = { "reason": "JD cabine confirms the settlement; requeueing for a fresh query" }
headers = {
"X-Organization-Id": "<x-organization-id>",
"X-Idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"transferId": "770e8400-e29b-41d4-a716-446655440003",
"reconciliationStatus": "AWAITING",
"requeuedAt": "2026-08-28T15:04:05Z"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0401",
"title": "Unauthorized",
"status": 401,
"detail": "Missing Token",
"code": "BTF-0401",
"category": "plugin",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0405",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"code": "BTF-0405",
"category": "plugin",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0429",
"title": "Too Many Requests",
"status": 429,
"detail": "Rate limit exceeded",
"code": "BTF-0429",
"category": "rate_limit",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin"
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}{
"type": "https://errors.lerian.studio/v1/BTF-0200",
"title": "Not Found",
"status": 404,
"detail": "transfer not found",
"code": "BTF-0200",
"requestId": "6d3e2a68-1f2b-4c3d-9e4f-5a6b7c8d9e0f",
"service": "plugin",
"category": "deterministic",
"instance": "4bf92f3577b34da6a3ce929d0e0e4736",
"errors": [
{
"message": "transferId must be a valid UUID",
"location": "body.senderAccountId"
}
],
"upstream": {
"code": "AAC90",
"message": "Assinatura invalida"
}
}Authorizations
JWT Bearer token authentication. The tenantId is derived from the bearer token or authenticated request context and is not supplied through X-Organization-Id.
Headers
Midaz organization scope for the request, used for downstream CRM, Fees, and Midaz calls. Required on org-scoped transfer routes in every deployment mode; a missing or non-UUID value returns 400. This is not the tenant identifier — tenantId is derived from the bearer JWT or authenticated context, never from this header. Background workers (TED IN poller, reconciliation) have no request header and, in single-tenant mode, fall back to the deployment's ORGANIZATION_ID env.
Required idempotency key for safe retries. Use a UUID v4 or unique business identifier. If the same key is sent again and the original request was already processed, the cached response is returned.
See Retries and idempotency for details.
255Path Parameters
The unique identifier of the transfer.
Body
Operator justification for the requeue.
500"JD cabine confirms the settlement; requeueing for a fresh query"
Was this page helpful?

