curl --request GET \
--url https://api.qbank.cl/platform/v1/balances/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qbank.cl/platform/v1/balances/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qbank.cl/platform/v1/balances/history', 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.qbank.cl/platform/v1/balances/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.qbank.cl/platform/v1/balances/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.qbank.cl/platform/v1/balances/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/balances/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"account_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"from": "2026-06-12",
"to": "2026-07-11",
"granularity": "day",
"timezone": "America/New_York",
"assets": {
"USDT": {
"series": [
{
"date": "2026-06-12",
"balance": "100.000000"
},
{
"date": "2026-06-13",
"balance": "100.000000"
},
{
"date": "2026-07-11",
"balance": "125.430000"
}
],
"first": "100.000000",
"last": "125.430000",
"change_pct": "25.43"
},
"BTC": {
"series": [
{
"date": "2026-06-12",
"balance": "0.00060000"
},
{
"date": "2026-07-11",
"balance": "0.00060000"
}
],
"first": "0.00060000",
"last": "0.00060000",
"change_pct": "0.00"
},
"BANK_USD": {
"series": [
{
"date": "2026-06-12",
"balance": "1500.00"
},
{
"date": "2026-07-11",
"balance": "1725.50"
}
],
"first": "1500.00",
"last": "1725.50",
"change_pct": "15.03"
}
},
"total_usd": {
"series": [
{
"date": "2026-06-12",
"balance_usd": "163.73"
},
{
"date": "2026-07-11",
"balance_usd": "191.34"
}
],
"first": "163.73",
"last": "191.34",
"change_pct": "16.86",
"spot_priced_dates": [],
"unpriced_assets": []
},
"period": {
"in_usd": "280.20",
"out_usd": "254.77",
"net_usd": "25.43"
},
"current": {
"items": [
{
"asset": "USDT",
"available": "125.430000",
"held": "10.000000",
"usd_estimate": "135.43"
},
{
"asset": "USDC",
"available": "0.000000",
"held": "0.000000",
"usd_estimate": "0.00"
},
{
"asset": "BTC",
"available": "0.00060000",
"held": "0.00000000",
"usd_estimate": "65.91"
},
{
"asset": "GOLD",
"available": "0.000000",
"held": "0.000000",
"usd_estimate": "0.00"
}
],
"net_worth_usd_estimate": "201.34"
}
}{
"error": "invalid_range",
"message": "from and to are required (YYYY-MM-DD)"
}{
"error": "unauthorized",
"message": "invalid or missing credentials"
}{
"error": "account_required",
"message": "this endpoint requires an account credential"
}Obtener historial de saldos
Evolución diaria de los saldos de la cuenta para gráficos de dashboard: una serie por asset (el saldo disponible de cierre de cada día, arrastrado en días sin movimientos) más una serie agregada en USD que valoriza cada saldo al precio de referencia histórico de cada día (USDT/USDC a la par; BTC/GOLD/SILVER/PLATINUM y USD/BOB/MXN/ARS al precio del día). Incluye las entradas/salidas totales del período y el snapshot actual (available + held), para que el front arme una tarjeta de saldo estilo dashboard con su variación porcentual. La serie refleja el saldo disponible (los holds no tienen historia); current trae el held de hoy por asset. Los días valorizados con el precio spot de hoy (antes de que exista precio histórico) se declaran en spot_priced_dates — los valores jamás se inventan.
El mapa assets incluye también los espejos de las cuentas banking (BANK_USD, BANK_EUR) como serie propia en su propia moneda (2 decimales). No forman parte del agregado total_usd, que cubre los diez saldos del libro mayor (USD, USDT, USDC, BTC, GOLD, SILVER, PLATINUM, BOB, MXN, ARS).
curl --request GET \
--url https://api.qbank.cl/platform/v1/balances/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.qbank.cl/platform/v1/balances/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.qbank.cl/platform/v1/balances/history', 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.qbank.cl/platform/v1/balances/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.qbank.cl/platform/v1/balances/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.qbank.cl/platform/v1/balances/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.qbank.cl/platform/v1/balances/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"account_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"from": "2026-06-12",
"to": "2026-07-11",
"granularity": "day",
"timezone": "America/New_York",
"assets": {
"USDT": {
"series": [
{
"date": "2026-06-12",
"balance": "100.000000"
},
{
"date": "2026-06-13",
"balance": "100.000000"
},
{
"date": "2026-07-11",
"balance": "125.430000"
}
],
"first": "100.000000",
"last": "125.430000",
"change_pct": "25.43"
},
"BTC": {
"series": [
{
"date": "2026-06-12",
"balance": "0.00060000"
},
{
"date": "2026-07-11",
"balance": "0.00060000"
}
],
"first": "0.00060000",
"last": "0.00060000",
"change_pct": "0.00"
},
"BANK_USD": {
"series": [
{
"date": "2026-06-12",
"balance": "1500.00"
},
{
"date": "2026-07-11",
"balance": "1725.50"
}
],
"first": "1500.00",
"last": "1725.50",
"change_pct": "15.03"
}
},
"total_usd": {
"series": [
{
"date": "2026-06-12",
"balance_usd": "163.73"
},
{
"date": "2026-07-11",
"balance_usd": "191.34"
}
],
"first": "163.73",
"last": "191.34",
"change_pct": "16.86",
"spot_priced_dates": [],
"unpriced_assets": []
},
"period": {
"in_usd": "280.20",
"out_usd": "254.77",
"net_usd": "25.43"
},
"current": {
"items": [
{
"asset": "USDT",
"available": "125.430000",
"held": "10.000000",
"usd_estimate": "135.43"
},
{
"asset": "USDC",
"available": "0.000000",
"held": "0.000000",
"usd_estimate": "0.00"
},
{
"asset": "BTC",
"available": "0.00060000",
"held": "0.00000000",
"usd_estimate": "65.91"
},
{
"asset": "GOLD",
"available": "0.000000",
"held": "0.000000",
"usd_estimate": "0.00"
}
],
"net_worth_usd_estimate": "201.34"
}
}{
"error": "invalid_range",
"message": "from and to are required (YYYY-MM-DD)"
}{
"error": "unauthorized",
"message": "invalid or missing credentials"
}{
"error": "account_required",
"message": "this endpoint requires an account credential"
}Autorizaciones
JWT de sesión (de register/login) o llave de API (pk_...).
X-API-Key: <token> se acepta como header alternativo.
Parámetros de consulta
Fecha inicial (YYYY-MM-DD, zona horaria de la organización, inclusive).
Fecha final (YYYY-MM-DD, zona horaria de la organización, inclusive). Rango máximo 366 días.
Respuesta
Serie diaria de saldo por asset más el agregado USD.
"day"
"America/New_York"
Una serie de saldo de cierre diario por asset. Incluye los diez saldos del ledger (USD, USDT, USDC, BTC, GOLD, SILVER, PLATINUM, BOB, MXN, ARS) y los espejos de las cuentas banking (BANK_USD, BANK_EUR) en su propia moneda; las series banking quedan fuera de total_usd.
Show child attributes
Show child attributes
Valor agregado en USD de todos los saldos por día.
Show child attributes
Show child attributes
Entradas/salidas totales del período en USD.
Show child attributes
Show child attributes
Snapshot actual (available + held, valorizado a spot).
Show child attributes
Show child attributes