cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/billing/statements/billing_statement_example" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header "Accept: application/json"import os
import requests
base_url = os.environ["AMLOK_API_BASE_URL"].rstrip("/")
headers = {'Accept': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request(
"GET", base_url + "/v1/billing/statements/billing_statement_example",
headers=headers, timeout=30, allow_redirects=False,
)
response.raise_for_status()
print(response.json())
const baseUrl = process.env.AMLOK_API_BASE_URL;
const apiKey = process.env.AMLOK_API_KEY;
if (!baseUrl || !apiKey) throw new Error("Configure AMLOK_API_BASE_URL and AMLOK_API_KEY");
const headers = {
"Accept": "application/json"
};
headers.Authorization = `Bearer ${apiKey}`;
const response = await fetch(baseUrl.replace(/\/$/, "") + "/v1/billing/statements/billing_statement_example", {
method: "GET", headers,
redirect: "error", signal: AbortSignal.timeout(30000),
});
if (!response.ok) throw new Error(`AMLOK returned HTTP ${response.status}`);
console.log(await response.json());{
"data": {
"id": "billing_statement_example",
"object": "billing_statement",
"record_version": 1,
"created_at": "2026-10-23T14:00:00Z",
"updated_at": "2026-10-23T14:00:00Z",
"workspace_id": "wsp_example",
"from": "2026-10-01T00:00:00Z",
"to": "2026-11-01T00:00:00Z",
"billing_account_id": "billing_account_example",
"currency": "CAD",
"status": "provisional",
"revision": 1,
"supersedes_id": null,
"as_of": "2026-10-23T14:00:00Z",
"opening_balance": "12000.00",
"funding": "0.00",
"usage": "8.00",
"refunds": "0.00",
"adjustments": "0.00",
"closing_balance": "11992.00",
"ledger_sequence_from": 2,
"ledger_sequence_to": 3,
"snapshot_id": "billing_snapshot_example"
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "complete"
}
}
Reporting
Retrieve billing statement
Statements reconcile posted ledger movements and carry their own frozen snapshot_id. Final revisions are immutable; later corrections create a linked revision. Return revisions in period-start, revision, id order. Date filters match overlapping statement periods. Use report_type statement to export the exact statement snapshot and period.
Required scope: billing:read. The API key is bound to exactly one workspace, institution and environment. There is no workspace override; this binding applies to every read and export.
GET
/
v1
/
billing
/
statements
/
{id}
cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/billing/statements/billing_statement_example" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header "Accept: application/json"import os
import requests
base_url = os.environ["AMLOK_API_BASE_URL"].rstrip("/")
headers = {'Accept': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request(
"GET", base_url + "/v1/billing/statements/billing_statement_example",
headers=headers, timeout=30, allow_redirects=False,
)
response.raise_for_status()
print(response.json())
const baseUrl = process.env.AMLOK_API_BASE_URL;
const apiKey = process.env.AMLOK_API_KEY;
if (!baseUrl || !apiKey) throw new Error("Configure AMLOK_API_BASE_URL and AMLOK_API_KEY");
const headers = {
"Accept": "application/json"
};
headers.Authorization = `Bearer ${apiKey}`;
const response = await fetch(baseUrl.replace(/\/$/, "") + "/v1/billing/statements/billing_statement_example", {
method: "GET", headers,
redirect: "error", signal: AbortSignal.timeout(30000),
});
if (!response.ok) throw new Error(`AMLOK returned HTTP ${response.status}`);
console.log(await response.json());{
"data": {
"id": "billing_statement_example",
"object": "billing_statement",
"record_version": 1,
"created_at": "2026-10-23T14:00:00Z",
"updated_at": "2026-10-23T14:00:00Z",
"workspace_id": "wsp_example",
"from": "2026-10-01T00:00:00Z",
"to": "2026-11-01T00:00:00Z",
"billing_account_id": "billing_account_example",
"currency": "CAD",
"status": "provisional",
"revision": 1,
"supersedes_id": null,
"as_of": "2026-10-23T14:00:00Z",
"opening_balance": "12000.00",
"funding": "0.00",
"usage": "8.00",
"refunds": "0.00",
"adjustments": "0.00",
"closing_balance": "11992.00",
"ledger_sequence_from": 2,
"ledger_sequence_to": 3,
"snapshot_id": "billing_snapshot_example"
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "complete"
}
}
Required scope:
billing:read
Statements reconcile posted ledger movements and carry their own frozen snapshot_id. Final revisions are immutable; later corrections create a linked revision. Return revisions in period-start, revision, id order. Date filters match overlapping statement periods. Use report_type statement to export the exact statement snapshot and period.
Required scope: billing:read. The API key is bound to exactly one workspace, institution and environment. There is no workspace override; this binding applies to every read and export.
Product scope · Processing lifecycle · ErrorsAuthorizations
Server-to-server API key bound to exactly one workspace, institution tenant and environment. No caller-supplied workspace override is accepted. Do not use in public browser code.
Path Parameters
Authorized resource identifier.