Skip to main content
POST
/
api
/
v1
/
dict
/
funds-recoveries
/
{id}
/
refund
Create a refund under a funds recovery
curl --request POST \
  --url https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amountCents": 123,
  "endToEndId": "<string>",
  "reason": "<string>",
  "requestedByISPB": "<string>"
}
'
import requests

url = "https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund"

payload = {
"amountCents": 123,
"endToEndId": "<string>",
"reason": "<string>",
"requestedByISPB": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amountCents: 123,
endToEndId: '<string>',
reason: '<string>',
requestedByISPB: '<string>'
})
};

fetch('https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amountCents' => 123,
'endToEndId' => '<string>',
'reason' => '<string>',
'requestedByISPB' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund"

payload := strings.NewReader("{\n \"amountCents\": 123,\n \"endToEndId\": \"<string>\",\n \"reason\": \"<string>\",\n \"requestedByISPB\": \"<string>\"\n}")

req, _ := http.NewRequest("POST", url, payload)

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))

}
HttpResponse<String> response = Unirest.post("https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amountCents\": 123,\n \"endToEndId\": \"<string>\",\n \"reason\": \"<string>\",\n \"requestedByISPB\": \"<string>\"\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://spi.sandbox.lerian.net/api/v1/dict/funds-recoveries/{id}/refund")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amountCents\": 123,\n \"endToEndId\": \"<string>\",\n \"reason\": \"<string>\",\n \"requestedByISPB\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "amountCents": 123,
  "createdAt": "<string>",
  "endToEndId": "<string>",
  "id": "<string>",
  "reason": "<string>",
  "reportStatus": "<string>",
  "requestedByISPB": "<string>",
  "status": "<string>",
  "updatedAt": "<string>",
  "effectiveRefundedAmountCents": 123,
  "fundsRecoveryId": "<string>",
  "monitorAccount": true,
  "refundAccount": {
    "accountNumber": "<string>",
    "accountType": "<string>",
    "participant": "<string>",
    "taxIdNumber": "<string>",
    "branch": "<string>"
  }
}
{
"code": "<string>",
"detail": "<string>",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "<string>",
"status": 123,
"title": "<string>",
"type": "about:blank"
}

Authorizations

Authorization
string
header
required

JWT bearer token issued by the identity provider.

Path Parameters

id
string
required

Funds recovery UUID (local record id) the refund is bound to

Body

application/json

DICT refund to create under the funds recovery and report to BACEN

amountCents
integer<int64>
required

Refund amount in integer minor units (BRL centavos); must be greater than zero

Example:

150000

endToEndId
string
required

BACEN end-to-end identifier (E2E ID) of the PIX transaction to refund

Example:

"E1234567820260614ABCDEFGHIJKLMNO"

reason
string
required

Free-text justification for the refund request

requestedByISPB
string
required

ISPB (8 numeric digits) of the participant requesting the refund; gated to the calling direct's scope (JRN-151)

Example:

"12345678"

Response

Created

Persisted local DICT refund request record

amountCents
integer<int64>
required

Refund amount in integer minor units (BRL centavos)

Example:

150000

createdAt
string
required

Record creation timestamp (RFC 3339, UTC)

Example:

"2026-06-14T12:00:00Z"

endToEndId
string
required

BACEN end-to-end identifier (E2E ID) of the refunded PIX transaction

Example:

"E1234567820260614ABCDEFGHIJKLMNO"

id
string
required

Server-assigned refund record UUID

Example:

"550e8400-e29b-41d4-a716-446655440001"

reason
string
required

Free-text justification for the refund request

reportStatus
string
required

BACEN report delivery state: PENDING, SENT, or FAILED (FAILED is retryable; the local record stands)

Example:

"SENT"

requestedByISPB
string
required

ISPB (8 numeric digits) of the participant that requested the refund

Example:

"12345678"

status
string
required

Local refund lifecycle state: REQUESTED, ACCEPTED, REJECTED, SETTLED, or CANCELLED

Example:

"REQUESTED"

updatedAt
string
required

Last update timestamp (RFC 3339, UTC)

Example:

"2026-06-14T12:00:00Z"

effectiveRefundedAmountCents
integer<int64>

MED 2.0: effective refunded amount in cents recorded on an accepting close (verbatim); omitted until close

Example:

75000

fundsRecoveryId
string

Local funds-recovery id this refund is bound to (refund-under-recovery); omitted for a standalone refund

Example:

"550e8400-e29b-41d4-a716-446655440003"

monitorAccount
boolean

MED 2.0: whether the destination account is monitored

Example:

true

refundAccount
object

MED 2.0: destination account of a refund-under-recovery; omitted for a standalone refund