cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/data/records?borrower_id=bor_synthetic" \
--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/data/records?borrower_id=bor_synthetic', 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/data/records?borrower_id=bor_synthetic", {
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": "dr_synthetic_v1",
"borrower_id": "bor_synthetic",
"connection_id": "con_synthetic",
"integration_id": "bank_synthetic",
"resource_type": "bank_transaction",
"resource_id": "txn_synthetic",
"record_version": 1,
"ingested_at": "2026-11-06T12:00:00Z",
"source_as_of": "2026-11-06T12:00:00Z",
"access": "available",
"access_reason": null,
"normalized": {
"id": "txn_synthetic",
"object": "bank_transaction",
"subject_id": "biz_synthetic",
"created_at": "2026-11-06T12:00:00Z",
"updated_at": "2026-11-06T12:00:00Z",
"observed_at": "2026-11-06T12:00:00Z",
"record_version": 1,
"source_refs": [],
"data_status": "partial",
"missing_fields": [],
"schema_version": "1.0.0",
"account_id": "acct_synthetic",
"direction": "inflow",
"status": "posted",
"amount": {
"amount": "1250.00",
"currency": "CAD"
},
"extensions": {
"synthetic_provider": {
"original_description": "SYNTHETIC CUSTOMER PAYMENT"
}
}
},
"source_payload": {
"status": "available",
"value": {
"description": "SYNTHETIC CUSTOMER PAYMENT",
"amount": "1250.00",
"currency": "CAD"
},
"reason": null
},
"document_ids": []
}
],
"meta": {
"request_id": "req_synthetic",
"schema_version": "1.0.0",
"environment": "sandbox"
},
"page": {
"next_cursor": null,
"has_more": false,
"snapshot_id": "snap_synthetic",
"as_of": "2026-11-06T12:00:00Z",
"changes_cursor": "data_cursor_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
}
}Data
List data records
Read all authorized collected and enriched records for a borrower, independently of an origination or risk package. The first page creates a stable snapshot and an atomic changes_cursor. No page truncation; follow next_cursor until has_more is false.
GET
/
v1
/
data
/
records
cURL
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/data/records?borrower_id=bor_synthetic" \
--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/data/records?borrower_id=bor_synthetic', 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/data/records?borrower_id=bor_synthetic", {
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": "dr_synthetic_v1",
"borrower_id": "bor_synthetic",
"connection_id": "con_synthetic",
"integration_id": "bank_synthetic",
"resource_type": "bank_transaction",
"resource_id": "txn_synthetic",
"record_version": 1,
"ingested_at": "2026-11-06T12:00:00Z",
"source_as_of": "2026-11-06T12:00:00Z",
"access": "available",
"access_reason": null,
"normalized": {
"id": "txn_synthetic",
"object": "bank_transaction",
"subject_id": "biz_synthetic",
"created_at": "2026-11-06T12:00:00Z",
"updated_at": "2026-11-06T12:00:00Z",
"observed_at": "2026-11-06T12:00:00Z",
"record_version": 1,
"source_refs": [],
"data_status": "partial",
"missing_fields": [],
"schema_version": "1.0.0",
"account_id": "acct_synthetic",
"direction": "inflow",
"status": "posted",
"amount": {
"amount": "1250.00",
"currency": "CAD"
},
"extensions": {
"synthetic_provider": {
"original_description": "SYNTHETIC CUSTOMER PAYMENT"
}
}
},
"source_payload": {
"status": "available",
"value": {
"description": "SYNTHETIC CUSTOMER PAYMENT",
"amount": "1250.00",
"currency": "CAD"
},
"reason": null
},
"document_ids": []
}
],
"meta": {
"request_id": "req_synthetic",
"schema_version": "1.0.0",
"environment": "sandbox"
},
"page": {
"next_cursor": null,
"has_more": false,
"snapshot_id": "snap_synthetic",
"as_of": "2026-11-06T12:00:00Z",
"changes_cursor": "data_cursor_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 all authorized collected and enriched records for a borrower, independently of an origination or risk package. The first page creates a stable snapshot and an atomic changes_cursor. No page truncation; follow next_cursor until has_more is false. All IDs and cursors must belong to the authorized workspace and environment. Required scope: data:read.
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 <= 100Borrower whose authorized data is read; required on every page.
Minimum string length:
1connection id
Minimum string length:
1integration id
Minimum string length:
1resource type
Minimum string length:
1