curl --request GET \
--url https://calibri.io/api/v2/atlas/account/wallet \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/wallet"
headers = {"X-Auth-Apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Apikey': '<api-key>'}};
fetch('https://calibri.io/api/v2/atlas/account/wallet', 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://calibri.io/api/v2/atlas/account/wallet",
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-Auth-Apikey: <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://calibri.io/api/v2/atlas/account/wallet"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Apikey", "<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://calibri.io/api/v2/atlas/account/wallet")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/wallet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"onramp_customer": true,
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"auto_redeem": {
"auto_redeemer_address": "0x4Fd2…",
"available": true,
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"enabled": false,
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
}
},
"owners": {
"owners": [
"0x7790…e855"
],
"passkey_active": true,
"passkey_signer": "0x7790…e855",
"safe": "0x2b01…E22a"
},
"redeemable": {
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"markets": [
{
"auto_redeem_failed": false,
"condition_id": "0x8f3a…",
"event_slug": "btc-updown-5m-1730",
"market_id": "120",
"redeemable": "10",
"result": "no",
"settled_at": "2026-09-16T17:35:10Z",
"title": "Bitcoin Up or Down 5m — 17:30–17:35 UTC"
}
],
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
}
},
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
},
"session_key": {
"enabled": true,
"default_ttl": 2592000,
"handler_installed": true,
"idle_lock_seconds": 900,
"last_key_id": "7",
"max_ttl": 15552000,
"safe": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD"
}
}CTF wallet
The same funding config without the market fields — your Safe (the deposit destination), its owner, and any outstanding setup. For a wallet page that is not tied to a market.
curl --request GET \
--url https://calibri.io/api/v2/atlas/account/wallet \
--header 'X-Auth-Apikey: <api-key>'import requests
url = "https://calibri.io/api/v2/atlas/account/wallet"
headers = {"X-Auth-Apikey": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Auth-Apikey': '<api-key>'}};
fetch('https://calibri.io/api/v2/atlas/account/wallet', 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://calibri.io/api/v2/atlas/account/wallet",
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-Auth-Apikey: <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://calibri.io/api/v2/atlas/account/wallet"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Auth-Apikey", "<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://calibri.io/api/v2/atlas/account/wallet")
.header("X-Auth-Apikey", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://calibri.io/api/v2/atlas/account/wallet")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Auth-Apikey"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"onramp_customer": true,
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"auto_redeem": {
"auto_redeemer_address": "0x4Fd2…",
"available": true,
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"enabled": false,
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
}
},
"owners": {
"owners": [
"0x7790…e855"
],
"passkey_active": true,
"passkey_signer": "0x7790…e855",
"safe": "0x2b01…E22a"
},
"redeemable": {
"blockchain_key": "polygon-mainnet",
"chain_id": 137,
"conditional_tokens_address": "0x4D97DCd97eC945f40cF65F87097ACe5EA0476045",
"domain_name": "Calibri CTF Prediction Markets",
"exchange_address": "0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83",
"markets": [
{
"auto_redeem_failed": false,
"condition_id": "0x8f3a…",
"event_slug": "btc-updown-5m-1730",
"market_id": "120",
"redeemable": "10",
"result": "no",
"settled_at": "2026-09-16T17:35:10Z",
"title": "Bitcoin Up or Down 5m — 17:30–17:35 UTC"
}
],
"owner_address": "0xE1188438C85C98aADFf1a88f97764E607B4978C3",
"proxy_address": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD",
"safe_status": "ready",
"session_keys_enabled": true,
"signature_type": 2,
"usdc_address": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
}
},
"safe_setup": {
"calls": [
{
"data": "0x095ea7b3…",
"hash": "0x9ab1…",
"nonce": 4,
"operation": 0,
"to": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
}
],
"ready": true
},
"session_key": {
"enabled": true,
"default_ttl": 2592000,
"handler_installed": true,
"idle_lock_seconds": 900,
"last_key_id": "7",
"max_ttl": 15552000,
"safe": "0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD"
}
}Authorizations
HMAC-signed API key. Send X-Auth-Apikey, X-Auth-Nonce and X-Auth-Signature.
Query Parameters
Comma-separated sub-resources to carry inline, each under a key of the same name holding exactly what its own route returns: owners (GET /account/wallet/owners), session_key (GET /account/wallet/session-key), auto_redeem (GET /account/wallet/auto-redeem), redeemable (GET /account/wallet/redeemable). They are resolved in parallel from one wallet lookup, so one round-trip replaces five. Unknown names are ignored. Every requested key is always present: an include that is not applicable to the account (e.g. owners without a passkey wallet, a 400 on its own route) is null here rather than a failed request.
Response
"polygon-mainnet"
137
Gnosis' Conditional Tokens — where your collateral actually sits.
"0x4D97DCd97eC945f40cF65F87097ACe5EA0476045"
The EIP-712 domain name this exchange was DEPLOYED with. Hashed into every order signature, and different per network — sign with the served value, never a hard-coded one, or the signature will not recover.
"Calibri CTF Prediction Markets"
This deployment's CTF Exchange.
"0xB6Ac44d5A6388b8C7511F2fb20C0c03fD0CeDC83"
Whether the member is a customer at the fiat on-ramp provider already (their first checkout launched). The deposit sheet starts a cash checkout on opening only then.
What owns the Safe: your wallet EOA, or for a passkey member the secp256r1 signer contract. Served so a client can spot that a different wallet is connected — only the owner can sign for the Safe.
"0xE1188438C85C98aADFf1a88f97764E607B4978C3"
Your Safe — the deposit destination and the maker on your orders.
"0x0DECE7d83f8D47CD8dD8278c0F22c361C58577BD"
The single field that answers "can this member trade?". setup_required means an order would REST AND THEN FAIL TO SETTLE — worse than being rejected, so do not trade on it.
ready, setup_required, error, unavailable, unlinked "ready"
Whether this deployment has session trading keys switched on.
true
How this account signs orders: 2 = POLY_GNOSIS_SAFE (Safe owned by your wallet), 3 = POLY_1271 (Safe owned by a passkey). Sign the way your type requires. Whether the Safe is usable yet is safe_status, not this field.
2, 3 2
The collateral token.
"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
Present with include=auto_redeem: the body of GET /account/wallet/auto-redeem.
Show child attributes
Show child attributes
Present with include=owners: the body of GET /account/wallet/owners, or null on an account without a passkey wallet.
Show child attributes
Show child attributes
Present with include=redeemable: the body of GET /account/wallet/redeemable.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Present with include=session_key: the body of GET /account/wallet/session-key.
Show child attributes
Show child attributes