Wallets
Get wallet balances
Returns what the wallet holds, one element for each asset. Give date to read what it held at the end of that UTC day. Omit date to read what it holds now, which is the same figure the wallet resource carries.
GET
/
customers
/
{customerId}
/
wallets
/
{walletId}
/
balances
Get wallet balances
curl --request GET \
--url https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances', 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.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances",
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-api-key: <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://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"balances": [
{
"available": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
},
"pending": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
},
"frozen": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
}
}
],
"date": "2023-12-25"
}{
"type": "INVALID_OID_FORMAT",
"title": "Invalid Object ID Format",
"status": 400,
"detail": "A path or query parameter expected a valid object identifier but received a value that does not match the expected format.",
"resolution": "Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.",
"docs": "https://conduit-v2.mintlify.app/errors#invalid-oid-format",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "API_KEY_MISSING",
"title": "API Key Missing",
"status": 401,
"detail": "The request did not include an API key. All API requests must be authenticated.",
"resolution": "Include your API key in the 'x-api-key' header with every request.",
"docs": "https://conduit-v2.mintlify.app/errors#api-key-missing",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "FEATURE_NOT_ENABLED",
"title": "Feature Not Enabled",
"status": 403,
"detail": "Your account does not have access to this feature. Features are enabled on a per-account basis.",
"resolution": "Contact support to request access to this feature, or check your account settings to verify which features are enabled.",
"docs": "https://conduit-v2.mintlify.app/errors#feature-not-enabled",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "WALLET_NOT_FOUND",
"title": "Wallet Not Found",
"status": 404,
"detail": "No wallet exists with the specified ID, or the wallet belongs to a different organization.",
"resolution": "Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.",
"docs": "https://conduit-v2.mintlify.app/errors#wallet-not-found",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "RATE_LIMITED",
"title": "Rate Limited",
"status": 429,
"detail": "Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset on rate-limited route responses.",
"resolution": "Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.",
"docs": "https://conduit-v2.mintlify.app/errors#rate-limited",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z",
"retryAfterSeconds": 3
}{
"type": "INTERNAL_ERROR",
"title": "Internal Error",
"status": 500,
"detail": "An unexpected error occurred while processing your request.",
"resolution": "Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.",
"docs": "https://conduit-v2.mintlify.app/errors#internal-error",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}Authorizations
Path Parameters
Example:
"cus_1A2b3C4d5E6f7G8h9I0jKl"
Example:
"wlt_1A2b3C4d5E6f7G8h9I0jKl"
Query Parameters
A past UTC day, as YYYY-MM-DD. The reply holds what the account held at the end of that day. Omit it to read what the account holds now.
Response
What an account holds, at the end of a past UTC day or at this moment.
One element for each asset the account holds.
Show child attributes
Show child attributes
The UTC day the balances close, as YYYY-MM-DD. Absent when the balances are the ones the account holds now.
Pattern:
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$⌘I
Get wallet balances
curl --request GET \
--url https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances \
--header 'x-api-key: <api-key>'import requests
url = "https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances', 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.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances",
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-api-key: <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://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<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://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.conduit.financial/v2/customers/{customerId}/wallets/{walletId}/balances")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"balances": [
{
"available": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
},
"pending": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
},
"frozen": {
"code": "USD",
"amount": "<string>",
"chain": "ethereum"
}
}
],
"date": "2023-12-25"
}{
"type": "INVALID_OID_FORMAT",
"title": "Invalid Object ID Format",
"status": 400,
"detail": "A path or query parameter expected a valid object identifier but received a value that does not match the expected format.",
"resolution": "Verify that all IDs in the request URL and query parameters are correctly formatted. IDs are typically prefixed strings like 'cus_...', 'app_...', or 'doc_...'.",
"docs": "https://conduit-v2.mintlify.app/errors#invalid-oid-format",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "API_KEY_MISSING",
"title": "API Key Missing",
"status": 401,
"detail": "The request did not include an API key. All API requests must be authenticated.",
"resolution": "Include your API key in the 'x-api-key' header with every request.",
"docs": "https://conduit-v2.mintlify.app/errors#api-key-missing",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "FEATURE_NOT_ENABLED",
"title": "Feature Not Enabled",
"status": 403,
"detail": "Your account does not have access to this feature. Features are enabled on a per-account basis.",
"resolution": "Contact support to request access to this feature, or check your account settings to verify which features are enabled.",
"docs": "https://conduit-v2.mintlify.app/errors#feature-not-enabled",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "WALLET_NOT_FOUND",
"title": "Wallet Not Found",
"status": 404,
"detail": "No wallet exists with the specified ID, or the wallet belongs to a different organization.",
"resolution": "Verify the wallet ID is correct. Use the list wallets endpoint to find valid wallet IDs for your organization.",
"docs": "https://conduit-v2.mintlify.app/errors#wallet-not-found",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}{
"type": "RATE_LIMITED",
"title": "Rate Limited",
"status": 429,
"detail": "Too many requests. This error is returned by three independent checks: the per-organization bucket applied to every authenticated API request; the per-IP bucket applied to unauthenticated traffic before an API key is validated; and the per-IP bucket applied when repeated invalid API keys are submitted from the same address. Honor the Retry-After header (also exposed as retryAfterSeconds in the body) before retrying. Current limits and remaining budget are visible in X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset on rate-limited route responses.",
"resolution": "Sleep until Retry-After seconds have elapsed, then retry. For sustained workloads exceeding the per-organization defaults, request a rate-limit increase through your support contact.",
"docs": "https://conduit-v2.mintlify.app/errors#rate-limited",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z",
"retryAfterSeconds": 3
}{
"type": "INTERNAL_ERROR",
"title": "Internal Error",
"status": 500,
"detail": "An unexpected error occurred while processing your request.",
"resolution": "Retry the request after a brief delay. If the error persists, contact support and include the correlationId from the error response for investigation.",
"docs": "https://conduit-v2.mintlify.app/errors#internal-error",
"instance": "/v2/...",
"correlationId": "00469ea4-52c1-4ffa-bd05-9f28b236a5fe",
"timestamp": "2026-01-15T09:30:00.000Z"
}