Statements Summary
La référence de l'API est en anglais. Les guides, l'authentification, les webhooks et les codes d'erreur sont en français.
Returns counts and aggregated amounts of the same movements List Statements returns, grouped by balance (currency).
Only balances, directions and types with records in the period are included in the response. Without dates, the last 30 days are summarised; the widest range accepted is 90 days (inclusive). total_amount is a string with 8 decimals. With no records in the period, by_balance is an empty array ([]), not an object. Data can be up to 5 minutes old.
https://bridge.bifrostcrypto.com/v1/statements/summarystatements:read(une clé nouvelle sans liste est en lecture seule)Headers
| Key | Value | Description |
|---|---|---|
X-Bifrost-Invoke | {{api_key}} | Private API key |
Query Parameters
| Parameter | Example | Description |
|---|---|---|
date_from | 2026-01-01 | Start date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is 29 days before date_to (a 30-day inclusive window). Read in UTC−03:00. |
date_to | 2026-03-31 | End date of the period (inclusive). Format: YYYY-MM-DD. Omitted, it is today when date_from is also omitted, otherwise date_from + 29 days. Read in UTC−03:00. |
cURL Example
curl -X GET "https://bridge.bifrostcrypto.com/v1/statements/summary?date_from=2026-01-01&date_to=2026-03-31" \
-H "X-Bifrost-Invoke: YOUR_API_KEY"Response Example
{
"message": "statement_summary_retrieved_success",
"filters": {
"date_from": "2026-01-01",
"date_to": "2026-03-31"
},
"summary": {
"by_balance": {
"balance_bitcoin": {
"total_count": 16,
"by_direction": {
"in": {
"count": 12,
"total_amount": "0.05000000"
},
"out": {
"count": 4,
"total_amount": "0.02000000"
}
},
"by_type": {
"DEPOSIT": {
"count": 10,
"total_amount": "0.04000000"
},
"WITHDRAWAL": {
"count": 4,
"total_amount": "0.02000000"
},
"FEE": {
"count": 1,
"total_amount": "0.00100000"
},
"RATE": {
"count": 1,
"total_amount": "0.00050000"
}
}
},
"balance_ethereum": {
"total_count": 8,
"by_direction": {
"in": {
"count": 5,
"total_amount": "1.20000000"
},
"out": {
"count": 3,
"total_amount": "0.50000000"
}
},
"by_type": {
"DEPOSIT": {
"count": 5,
"total_amount": "1.20000000"
},
"WITHDRAWAL": {
"count": 3,
"total_amount": "0.50000000"
}
}
}
},
"totals": {
"total_statements": 24,
"balances_used": [
"balance_bitcoin",
"balance_ethereum"
]
}
}
}Errors
Every error has the shape error.code, error.message and, when useful, error.details. Authentication, scope and rate-limit errors (401, 403, 429) apply to every endpoint and are described under Authentication.
| Status | Code | When | What to do |
|---|---|---|---|
| 400 | invalid_format | A date is not YYYY-MM-DD; details.field names it. | Fix the request before sending it again. |
| 400 | invalid_date_range | date_from is after date_to. | Fix the request before sending it again. |
| 400 | date_range_too_wide | The window is longer than details.max_days (90). | Query the period in smaller windows. |
| 500 | database_error | The query failed. | Nothing was changed. Retry later. |
Autres réponses
Réponses qui ne sont pas le chemin nominal et qui doivent malgré tout être traitées dans votre intégration.
Called without dates
filters always reports the window that was actually used, and date_range_defaulted marks that you did not choose it. Read those fields instead of assuming the period covers your whole history.
{
"message": "statement_summary_retrieved_success",
"filters": {
"date_from": "2026-08-13",
"date_to": "2026-09-11",
"date_range_defaulted": true
},
"summary": {
"...": "..."
}
}Date range too wide
Ask for a window longer than max_days and the request is refused rather than served slowly. Other 400 codes: invalid_format (date not in YYYY-MM-DD; details.field) and invalid_date_range (date_from after date_to). A database failure answers 500 database_error.
{
"error": {
"code": "date_range_too_wide",
"message": "The requested date range exceeds the maximum allowed",
"details": {
"max_days": 90
}
}
}