curl --request GET \
--url https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance \
--header 'X-Access-Key: <api-key>' \
--header 'X-Access-Request-Id: <api-key>' \
--header 'X-Access-Signature: <api-key>' \
--header 'X-Access-Timestamp: <api-key>'import requests
url = "https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance"
headers = {
"X-Access-Key": "<api-key>",
"X-Access-Timestamp": "<api-key>",
"X-Access-Request-Id": "<api-key>",
"X-Access-Signature": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Access-Key': '<api-key>',
'X-Access-Timestamp': '<api-key>',
'X-Access-Request-Id': '<api-key>',
'X-Access-Signature': '<api-key>'
}
};
fetch('https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance', 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://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Key: <api-key>",
"X-Access-Request-Id: <api-key>",
"X-Access-Signature: <api-key>",
"X-Access-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Key", "<api-key>")
req.Header.Add("X-Access-Timestamp", "<api-key>")
req.Header.Add("X-Access-Request-Id", "<api-key>")
req.Header.Add("X-Access-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance")
.header("X-Access-Key", "<api-key>")
.header("X-Access-Timestamp", "<api-key>")
.header("X-Access-Request-Id", "<api-key>")
.header("X-Access-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Key"] = '<api-key>'
request["X-Access-Timestamp"] = '<api-key>'
request["X-Access-Request-Id"] = '<api-key>'
request["X-Access-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"amount": {
"ccy": "BRL",
"decimals": 2,
"value": 1250075
},
"locked": {
"ccy": "BRL",
"decimals": 2,
"value": 25000
},
"available": {
"ccy": "BRL",
"decimals": 2,
"value": 1225075
},
"asset": {
"ccy": "BRL",
"type": "fiat",
"symbol": "R$",
"decimals": 2,
"name": "Brazilian Real"
}
}{
"error": {
"code": 400,
"status": "INVALID_ARGUMENT",
"message": "Filter expression references an unsupported field.",
"details": [
{
"reason": "INVALID_ARGUMENT",
"description": "Field `nonexistent` is not allowed for filtering on this endpoint.",
"metadata": {}
}
]
}
}{
"error": {
"code": 401,
"status": "SIGNATURE_INVALID",
"message": "Request signature could not be verified.",
"details": [
{
"reason": "SIGNATURE_INVALID",
"description": "The provided signature does not match the canonical request.",
"metadata": {
"decisionId": "acd_9RmKvTpYzH2wN8qJ5b"
}
}
]
}
}{
"error": {
"code": 403,
"status": "RBAC_DENY",
"message": "The credential is not permitted to perform this action.",
"details": [
{
"reason": "RBAC_DENY",
"description": "Missing required role binding on the target resource.",
"metadata": {
"decisionId": "acd_8PaJvNqLcK3xW5sR4d"
}
}
]
}
}{
"error": {
"code": 404,
"status": "WALLET_NOT_FOUND",
"message": "Wallet not found.",
"details": [
{
"reason": "WALLET_NOT_FOUND",
"description": "No wallet exists with name `production-main`.",
"metadata": {}
}
]
}
}{
"error": {
"code": 429,
"status": "RESOURCE_EXHAUSTED",
"message": "Rate limit exceeded for this credential.",
"details": [
{
"reason": "RESOURCE_EXHAUSTED",
"description": "You have exceeded the request quota for this endpoint.",
"metadata": {
"retry_after_seconds": 12
}
}
]
}
}{
"error": {
"code": 500,
"status": "INTERNAL",
"message": "An unexpected error occurred.",
"details": [
{
"reason": "INTERNAL",
"description": "Internal server error.",
"metadata": {
"id": "exc_5KaHsBxYzW3pM2dV"
}
}
]
}
}{
"error": {
"code": 503,
"status": "PROVIDER_UNAVAILABLE",
"message": "Upstream payment provider is unavailable.",
"details": [
{
"reason": "PROVIDER_UNAVAILABLE",
"description": "The provider returned a transient error or did not respond.",
"metadata": {
"id": "exc_5KaHsBxYzW3pM2dV"
}
}
]
}
}Get wallet balance
Returns a real-time balance snapshot for the given wallet — total, locked, and immediately available amounts. The snapshot is read from the underlying provider on every call; values are not cached.
curl --request GET \
--url https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance \
--header 'X-Access-Key: <api-key>' \
--header 'X-Access-Request-Id: <api-key>' \
--header 'X-Access-Signature: <api-key>' \
--header 'X-Access-Timestamp: <api-key>'import requests
url = "https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance"
headers = {
"X-Access-Key": "<api-key>",
"X-Access-Timestamp": "<api-key>",
"X-Access-Request-Id": "<api-key>",
"X-Access-Signature": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Access-Key': '<api-key>',
'X-Access-Timestamp': '<api-key>',
'X-Access-Request-Id': '<api-key>',
'X-Access-Signature': '<api-key>'
}
};
fetch('https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance', 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://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Access-Key: <api-key>",
"X-Access-Request-Id: <api-key>",
"X-Access-Signature: <api-key>",
"X-Access-Timestamp: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Access-Key", "<api-key>")
req.Header.Add("X-Access-Timestamp", "<api-key>")
req.Header.Add("X-Access-Request-Id", "<api-key>")
req.Header.Add("X-Access-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance")
.header("X-Access-Key", "<api-key>")
.header("X-Access-Timestamp", "<api-key>")
.header("X-Access-Request-Id", "<api-key>")
.header("X-Access-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://txengine.bloobank.com/txengine/v1/wallets/{wallet}/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Access-Key"] = '<api-key>'
request["X-Access-Timestamp"] = '<api-key>'
request["X-Access-Request-Id"] = '<api-key>'
request["X-Access-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"amount": {
"ccy": "BRL",
"decimals": 2,
"value": 1250075
},
"locked": {
"ccy": "BRL",
"decimals": 2,
"value": 25000
},
"available": {
"ccy": "BRL",
"decimals": 2,
"value": 1225075
},
"asset": {
"ccy": "BRL",
"type": "fiat",
"symbol": "R$",
"decimals": 2,
"name": "Brazilian Real"
}
}{
"error": {
"code": 400,
"status": "INVALID_ARGUMENT",
"message": "Filter expression references an unsupported field.",
"details": [
{
"reason": "INVALID_ARGUMENT",
"description": "Field `nonexistent` is not allowed for filtering on this endpoint.",
"metadata": {}
}
]
}
}{
"error": {
"code": 401,
"status": "SIGNATURE_INVALID",
"message": "Request signature could not be verified.",
"details": [
{
"reason": "SIGNATURE_INVALID",
"description": "The provided signature does not match the canonical request.",
"metadata": {
"decisionId": "acd_9RmKvTpYzH2wN8qJ5b"
}
}
]
}
}{
"error": {
"code": 403,
"status": "RBAC_DENY",
"message": "The credential is not permitted to perform this action.",
"details": [
{
"reason": "RBAC_DENY",
"description": "Missing required role binding on the target resource.",
"metadata": {
"decisionId": "acd_8PaJvNqLcK3xW5sR4d"
}
}
]
}
}{
"error": {
"code": 404,
"status": "WALLET_NOT_FOUND",
"message": "Wallet not found.",
"details": [
{
"reason": "WALLET_NOT_FOUND",
"description": "No wallet exists with name `production-main`.",
"metadata": {}
}
]
}
}{
"error": {
"code": 429,
"status": "RESOURCE_EXHAUSTED",
"message": "Rate limit exceeded for this credential.",
"details": [
{
"reason": "RESOURCE_EXHAUSTED",
"description": "You have exceeded the request quota for this endpoint.",
"metadata": {
"retry_after_seconds": 12
}
}
]
}
}{
"error": {
"code": 500,
"status": "INTERNAL",
"message": "An unexpected error occurred.",
"details": [
{
"reason": "INTERNAL",
"description": "Internal server error.",
"metadata": {
"id": "exc_5KaHsBxYzW3pM2dV"
}
}
]
}
}{
"error": {
"code": 503,
"status": "PROVIDER_UNAVAILABLE",
"message": "Upstream payment provider is unavailable.",
"details": [
{
"reason": "PROVIDER_UNAVAILABLE",
"description": "The provider returned a transient error or did not respond.",
"metadata": {
"id": "exc_5KaHsBxYzW3pM2dV"
}
}
]
}
}asset descriptor. The snapshot is read live from the underlying provider on every call; values are not cached.
The three balances:
| Field | Meaning |
|---|---|
amount | Total balance, including funds reserved for in-flight outbound orders. |
locked | Funds reserved for outbound orders currently in PENDING or PROCESSING. Not spendable. |
available | Funds you can immediately commit to a new outbound order. available = amount - locked. |
available, not amount. An outbound order against insufficient available will finalize as FAILED with errorCode: INSUFFICIENT_FUNDS.Authorizations
Opaque credential identifier provisioned during onboarding. See the Integration Guide for the request-signing protocol.
Unix epoch timestamp in UTC milliseconds. See the Integration Guide for skew tolerance.
Unique identifier per request (UUID v4 recommended). The
(accessKey, requestId) tuple must be unique within the replay
window defined by the Integration Guide.
Base64-encoded ECDSA signature of the canonical request, computed
with the private key paired to X-Access-Key. See the Integration
Guide for canonicalization rules and reference implementations.
Path Parameters
Wallet name (RFC 1035 DNS label).
1 - 63^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$Response
The current balance snapshot.
Real-time balance snapshot of a wallet — total, locked, and immediately available amounts, plus the asset descriptor.
A monetary amount expressed in integer minor units together with its currency and decimal precision.
Show child attributes
Show child attributes
A monetary amount expressed in integer minor units together with its currency and decimal precision.
Show child attributes
Show child attributes
A monetary amount expressed in integer minor units together with its currency and decimal precision.
Show child attributes
Show child attributes
Descriptor of a fiat currency or crypto asset, including its display symbol and decimal precision.
Show child attributes
Show child attributes