curl --request POST \
--url https://api.example.com/spi/v1/transfers/cashout/process \
--header 'Authorization: Bearer demo-access-token' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: pix-demo-20260903-000001' \
--header 'X-Account-Id: 019606a1-3b4c-7d8e-9f01-234567890abc' \
--header 'X-End-To-End-Id: E12345678202605061030abcdef12345' \
--data '{
"amount": "100.00",
"initiationId": "019606a1-3b4c-7d8e-9f01-234567890abc"
}'import requests
url = "https://api.example.com/spi/v1/transfers/cashout/process"
payload = {
"amount": "100.00",
"initiationId": "019606a1-3b4c-7d8e-9f01-234567890abc"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-Account-Id": "<x-account-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-Account-Id': '<x-account-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount: '100.00', initiationId: '019606a1-3b4c-7d8e-9f01-234567890abc'})
};
fetch('https://api.example.com/spi/v1/transfers/cashout/process', 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://api.example.com/spi/v1/transfers/cashout/process",
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([
'amount' => '100.00',
'initiationId' => '019606a1-3b4c-7d8e-9f01-234567890abc'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-Account-Id: <x-account-id>"
],
]);
$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://api.example.com/spi/v1/transfers/cashout/process"
payload := strings.NewReader("{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-Account-Id", "<x-account-id>")
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://api.example.com/spi/v1/transfers/cashout/process")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Account-Id", "<x-account-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/spi/v1/transfers/cashout/process")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Account-Id"] = '<x-account-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}"
response = http.request(request)
puts response.read_body{
"accountId": "019606a0-1a2b-7c3d-8e4f-567890123abc",
"aliasId": "019606a1-3b4c-7d8e-9f01-234567890abc",
"amount": "100.00",
"createdAt": "2026-05-06T10:30:00Z",
"currency": "BRL",
"description": "Pagamento de aluguel",
"destination": {
"account": {
"branch": "0001",
"number": "0007654321",
"participant": "87654321",
"type": "CACC"
},
"key": "+5511999998888",
"owner": {
"document": "12345678901",
"name": "João da Silva",
"tradeName": "Empresa Exemplo LTDA",
"type": "NATURAL_PERSON"
}
},
"endToEndId": "E12345678202605061030abcdef12345",
"feeCharge": {
"applied": true,
"calculationType": "FIXED",
"fees": [
{
"amount": "1.50",
"calculationType": "FIXED",
"calculationValue": "1.50",
"creditAccount": "019606a3-5d6e-7f80-1a2b-345678901bcd",
"feeLabel": "PIX_TRANSFER_FEE"
}
],
"netAmount": "98.50",
"totalAmount": "1.50"
},
"id": "019606a2-4c5d-7e8f-90a1-345678901bcd",
"initiatedAt": "2026-05-06T10:30:00Z",
"initiationType": "DICT",
"ledger": {
"destinationOperationId": "019606a5-7f80-7182-3c4d-56789012cdf1",
"revert": {
"destinationOperationId": "019606a5-7f80-7182-3c4d-56789012cdf1",
"sourceOperationId": "019606a5-7f80-7182-3c4d-56789012cdf0",
"transactionId": "019606a5-7f80-7182-3c4d-56789012cdef"
},
"sourceOperationId": "019606a5-7f80-7182-3c4d-56789012cdf0",
"transactionId": "019606a5-7f80-7182-3c4d-56789012cdef"
},
"metadata": {
"field": "field-example"
},
"paymentType": "PIX",
"purpose": "IACT",
"source": {
"account": {
"branch": "0001",
"number": "0007654321",
"participant": "87654321",
"type": "CACC"
},
"key": "+5511999998888",
"owner": {
"document": "12345678901",
"name": "João da Silva",
"tradeName": "Empresa Exemplo LTDA",
"type": "NATURAL_PERSON"
}
},
"status": "COMPLETED",
"type": "OUTBOUND",
"updatedAt": "2026-05-06T10:30:05Z",
"urgency": "HIGH"
}{
"code": "PIX-0030",
"title": "Idempotency Key Required",
"message": "The Idempotency-Key header is required for this operation and must be within the accepted length."
}{
"code": "PIX-0031",
"title": "Idempotency Key Conflict",
"message": "The Idempotency-Key was already used with a different request."
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upstream": {
"code": "E4001",
"message": "account not found at provider"
}
}Process and confirm a Pix transfer (step 2)
Confirms a previously initiated transfer, debits the source account, and submits the Pix payment for processing.
curl --request POST \
--url https://api.example.com/spi/v1/transfers/cashout/process \
--header 'Authorization: Bearer demo-access-token' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: pix-demo-20260903-000001' \
--header 'X-Account-Id: 019606a1-3b4c-7d8e-9f01-234567890abc' \
--header 'X-End-To-End-Id: E12345678202605061030abcdef12345' \
--data '{
"amount": "100.00",
"initiationId": "019606a1-3b4c-7d8e-9f01-234567890abc"
}'import requests
url = "https://api.example.com/spi/v1/transfers/cashout/process"
payload = {
"amount": "100.00",
"initiationId": "019606a1-3b4c-7d8e-9f01-234567890abc"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"X-Account-Id": "<x-account-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'X-Account-Id': '<x-account-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({amount: '100.00', initiationId: '019606a1-3b4c-7d8e-9f01-234567890abc'})
};
fetch('https://api.example.com/spi/v1/transfers/cashout/process', 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://api.example.com/spi/v1/transfers/cashout/process",
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([
'amount' => '100.00',
'initiationId' => '019606a1-3b4c-7d8e-9f01-234567890abc'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"X-Account-Id: <x-account-id>"
],
]);
$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://api.example.com/spi/v1/transfers/cashout/process"
payload := strings.NewReader("{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("X-Account-Id", "<x-account-id>")
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://api.example.com/spi/v1/transfers/cashout/process")
.header("Idempotency-Key", "<idempotency-key>")
.header("X-Account-Id", "<x-account-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/spi/v1/transfers/cashout/process")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["X-Account-Id"] = '<x-account-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"100.00\",\n \"initiationId\": \"019606a1-3b4c-7d8e-9f01-234567890abc\"\n}"
response = http.request(request)
puts response.read_body{
"accountId": "019606a0-1a2b-7c3d-8e4f-567890123abc",
"aliasId": "019606a1-3b4c-7d8e-9f01-234567890abc",
"amount": "100.00",
"createdAt": "2026-05-06T10:30:00Z",
"currency": "BRL",
"description": "Pagamento de aluguel",
"destination": {
"account": {
"branch": "0001",
"number": "0007654321",
"participant": "87654321",
"type": "CACC"
},
"key": "+5511999998888",
"owner": {
"document": "12345678901",
"name": "João da Silva",
"tradeName": "Empresa Exemplo LTDA",
"type": "NATURAL_PERSON"
}
},
"endToEndId": "E12345678202605061030abcdef12345",
"feeCharge": {
"applied": true,
"calculationType": "FIXED",
"fees": [
{
"amount": "1.50",
"calculationType": "FIXED",
"calculationValue": "1.50",
"creditAccount": "019606a3-5d6e-7f80-1a2b-345678901bcd",
"feeLabel": "PIX_TRANSFER_FEE"
}
],
"netAmount": "98.50",
"totalAmount": "1.50"
},
"id": "019606a2-4c5d-7e8f-90a1-345678901bcd",
"initiatedAt": "2026-05-06T10:30:00Z",
"initiationType": "DICT",
"ledger": {
"destinationOperationId": "019606a5-7f80-7182-3c4d-56789012cdf1",
"revert": {
"destinationOperationId": "019606a5-7f80-7182-3c4d-56789012cdf1",
"sourceOperationId": "019606a5-7f80-7182-3c4d-56789012cdf0",
"transactionId": "019606a5-7f80-7182-3c4d-56789012cdef"
},
"sourceOperationId": "019606a5-7f80-7182-3c4d-56789012cdf0",
"transactionId": "019606a5-7f80-7182-3c4d-56789012cdef"
},
"metadata": {
"field": "field-example"
},
"paymentType": "PIX",
"purpose": "IACT",
"source": {
"account": {
"branch": "0001",
"number": "0007654321",
"participant": "87654321",
"type": "CACC"
},
"key": "+5511999998888",
"owner": {
"document": "12345678901",
"name": "João da Silva",
"tradeName": "Empresa Exemplo LTDA",
"type": "NATURAL_PERSON"
}
},
"status": "COMPLETED",
"type": "OUTBOUND",
"updatedAt": "2026-05-06T10:30:05Z",
"urgency": "HIGH"
}{
"code": "PIX-0030",
"title": "Idempotency Key Required",
"message": "The Idempotency-Key header is required for this operation and must be within the accepted length."
}{
"code": "PIX-0031",
"title": "Idempotency Key Conflict",
"message": "The Idempotency-Key was already used with a different request."
}{
"code": "ERR-0001",
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example",
"upstream": {
"code": "E4001",
"message": "account not found at provider"
}
}Authorizations
JWT bearer token issued by the identity provider.
Headers
Client-generated key used to retry exactly the same request safely.
1 - 64UUID of the account associated with the operation.
"019606a1-3b4c-7d8e-9f01-234567890abc"
Idempotency key — caller-supplied 32-char BCB endToEndId. Omit to let SPI generate one.
"E12345678202605061030abcdef12345"
Body
Response
Created
"100.00"
"2026-05-06T10:30:00Z"
"E12345678202605061030abcdef12345"
"019606a2-4c5d-7e8f-90a1-345678901bcd"
"COMPLETED"
"OUTBOUND"
"2026-05-06T10:30:05Z"
"019606a0-1a2b-7c3d-8e4f-567890123abc"
Cross-mechanism settled and reserved refund amount. Returned only for INBOUND transfers.
"60.00"
"BRL"
"Pagamento de aluguel"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
"2026-05-06T10:30:00Z"
"DICT"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
"PIX"
"IACT"
Amount minus alreadyRefundedAmount. Returned only for INBOUND transfers and can be negative.
"40.00"
Show child attributes
Show child attributes
"HIGH"
Was this page helpful?

