cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/billing/payments" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header 'Accept: application/json'import os
import requests
headers = {'Accept': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request('GET', os.environ["AMLOK_API_BASE_URL"] + '/v1/billing/payments', headers=headers, timeout=30, allow_redirects=False)
response.raise_for_status()
print(response.json())
const headers = {"Accept": "application/json"};
headers.Authorization = `Bearer ${process.env.AMLOK_API_KEY}`;
const response = await fetch(process.env.AMLOK_API_BASE_URL + "/v1/billing/payments", {
method: "GET", headers, redirect: "error", signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());
{
"data": [
{
"id": "pay_synthetic",
"snapshot_id": "snap_synthetic",
"created_at": "2026-11-06T12:00:00Z",
"updated_at": "2026-11-06T12:00:00Z",
"status": "succeeded",
"purpose": "manual_top_up",
"amount": "5000.00",
"currency": "CAD",
"credited_amount": "5000.00",
"refunded_amount": "0.00",
"method": {
"type": "card",
"label": "Visa ending 4242"
},
"external_reference": "PAY-SYNTHETIC-0042",
"settled_at": "2026-11-06T12:00:00Z",
"failure_reason": null,
"transaction_ids": [
"txn_funding_synthetic"
],
"record_version": 1
}
],
"meta": {
"request_id": "req_synthetic",
"schema_version": "1.0.0",
"environment": "sandbox"
},
"page": {
"next_cursor": null,
"has_more": false,
"snapshot_id": "snap_synthetic",
"expires_at": "2026-11-06T13:00:00Z"
}
}{
"error": {
"code": "validation_error",
"message": "Validation error.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "unauthenticated",
"message": "Unauthenticated.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "forbidden",
"message": "Forbidden.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "not_found",
"message": "Not found.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "invalid_state",
"message": "Invalid state.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "cursor_expired",
"message": "Cursor expired.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limited.",
"retryable": true,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "temporarily_unavailable",
"message": "Temporarily unavailable.",
"retryable": true,
"request_id": "req_synthetic",
"field": null
}
}Billing
List billing payments
Read top-up and contract-funding payment attempts, including pending, failed, settled, returned and refunded states. Pending or failed payments are not spendable credits.
GET
/
v1
/
billing
/
payments
cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/billing/payments" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header 'Accept: application/json'import os
import requests
headers = {'Accept': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request('GET', os.environ["AMLOK_API_BASE_URL"] + '/v1/billing/payments', headers=headers, timeout=30, allow_redirects=False)
response.raise_for_status()
print(response.json())
const headers = {"Accept": "application/json"};
headers.Authorization = `Bearer ${process.env.AMLOK_API_KEY}`;
const response = await fetch(process.env.AMLOK_API_BASE_URL + "/v1/billing/payments", {
method: "GET", headers, redirect: "error", signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());
{
"data": [
{
"id": "pay_synthetic",
"snapshot_id": "snap_synthetic",
"created_at": "2026-11-06T12:00:00Z",
"updated_at": "2026-11-06T12:00:00Z",
"status": "succeeded",
"purpose": "manual_top_up",
"amount": "5000.00",
"currency": "CAD",
"credited_amount": "5000.00",
"refunded_amount": "0.00",
"method": {
"type": "card",
"label": "Visa ending 4242"
},
"external_reference": "PAY-SYNTHETIC-0042",
"settled_at": "2026-11-06T12:00:00Z",
"failure_reason": null,
"transaction_ids": [
"txn_funding_synthetic"
],
"record_version": 1
}
],
"meta": {
"request_id": "req_synthetic",
"schema_version": "1.0.0",
"environment": "sandbox"
},
"page": {
"next_cursor": null,
"has_more": false,
"snapshot_id": "snap_synthetic",
"expires_at": "2026-11-06T13:00:00Z"
}
}{
"error": {
"code": "validation_error",
"message": "Validation error.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "unauthenticated",
"message": "Unauthenticated.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "forbidden",
"message": "Forbidden.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "not_found",
"message": "Not found.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "invalid_state",
"message": "Invalid state.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "cursor_expired",
"message": "Cursor expired.",
"retryable": false,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limited.",
"retryable": true,
"request_id": "req_synthetic",
"field": null
}
}{
"error": {
"code": "temporarily_unavailable",
"message": "Temporarily unavailable.",
"retryable": true,
"request_id": "req_synthetic",
"field": null
}
}Read top-up and contract-funding payment attempts, including pending, failed, settled, returned and refunded states. Pending or failed payments are not spendable credits. All IDs and cursors must belong to the authorized workspace and environment. Required scope: billing:read. Owner authority is required. Related reads can pin snapshot_id from billing summary to reconcile the same as-of state; expired snapshots return 410, never a silent refresh.
Examples use synthetic IDs. Replace them with values returned by your environment.
Authorizations
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.
Query Parameters
cursor
Minimum string length:
1limit
Required range:
1 <= x <= 100status
Available options:
pending, processing, succeeded, failed, cancelled, partially_refunded, refunded, returned purpose
Available options:
initial_funding, renewal, automatic_top_up, manual_top_up created from. UTC ranges are inclusive from and exclusive to; reject to <= from.
created to. UTC ranges are inclusive from and exclusive to; reject to <= from.
snapshot id
Minimum string length:
1