curl --request POST --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/attribute-calculations" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header "Accept: application/json" \
--header 'Idempotency-Key: idem_example_1001' \
--header 'Content-Type: application/json' \
--data '{
"subject_id": "biz_example",
"keys": [
"operating_inflows"
],
"window_start": "2026-09-01",
"window_end": "2026-10-01",
"input_manifest_id": "manifest_example",
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
}'import os
import requests
base_url = os.environ["AMLOK_API_BASE_URL"].rstrip("/")
headers = {'Accept': 'application/json',
'Idempotency-Key': 'idem_example_1001',
'Content-Type': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request(
"POST", base_url + "/v1/attribute-calculations",
headers=headers, timeout=30, allow_redirects=False,
json={'subject_id': 'biz_example',
'keys': ['operating_inflows'],
'window_start': '2026-09-01',
'window_end': '2026-10-01',
'input_manifest_id': 'manifest_example',
'processing_context': {'product': 'insights',
'workflow_run_id': 'wfr_example'}},
)
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",
"Idempotency-Key": "idem_example_1001",
"Content-Type": "application/json"
};
headers.Authorization = `Bearer ${apiKey}`;
const response = await fetch(baseUrl.replace(/\/$/, "") + "/v1/attribute-calculations", {
method: "POST", headers,
redirect: "error", signal: AbortSignal.timeout(30000),
body: JSON.stringify({
"subject_id": "biz_example",
"keys": [
"operating_inflows"
],
"window_start": "2026-09-01",
"window_end": "2026-10-01",
"input_manifest_id": "manifest_example",
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
}),
});
if (!response.ok) throw new Error(`AMLOK returned HTTP ${response.status}`);
console.log(await response.json());{
"data": {
"id": "calc_example",
"status": "queued",
"subject_id": "biz_example",
"attribute_ids": [],
"errors": [],
"stop_reason": null,
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "pending"
}
}Calculate attributes
Calculate selected attributes from a frozen evidence window.
Required scope: risk:calculate. GET /v1/attribute-calculations/ reports job state; values in /v1/attributes. Once account cancellation is submitted, processing and usage deductions stop immediately. Reject new operational commands with 409 invalid_state; pending work is cancelled without another debit. Read-only reporting remains available until workspace deletion. Discover input_manifest_id through GET /v1/input-manifests. It must be ready and belong to the same subject and workspace. The calculation window must be contained within its frozen coverage. This is a stage of an authorized Insights or Signal workflow. processing_context is required; unrelated, completed, unpaid, cancelled or unentitled contexts return 409 invalid_state. It creates no separate AMLOK charge. The orchestrator deduplicates equivalent stage work within the parent. Accepted commands have a durable request receipt. Full response replay lasts 24 hours; afterward the same key and target return 409 idempotency_result_expired without re-execution. Different payloads return 409 idempotency_conflict. Use GET /v1/request-receipts/lookup to find the original resource. The fingerprint includes the resolved target path and intended payload; a key used on another target is rejected rather than replayed onto it. Pre-execution validation or insufficient-credit rejection creates no accepted receipt.
curl --request POST --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/attribute-calculations" \
--header "Authorization: Bearer ${AMLOK_API_KEY}" \
--header "Accept: application/json" \
--header 'Idempotency-Key: idem_example_1001' \
--header 'Content-Type: application/json' \
--data '{
"subject_id": "biz_example",
"keys": [
"operating_inflows"
],
"window_start": "2026-09-01",
"window_end": "2026-10-01",
"input_manifest_id": "manifest_example",
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
}'import os
import requests
base_url = os.environ["AMLOK_API_BASE_URL"].rstrip("/")
headers = {'Accept': 'application/json',
'Idempotency-Key': 'idem_example_1001',
'Content-Type': 'application/json'}
headers["Authorization"] = "Bearer " + os.environ["AMLOK_API_KEY"]
response = requests.request(
"POST", base_url + "/v1/attribute-calculations",
headers=headers, timeout=30, allow_redirects=False,
json={'subject_id': 'biz_example',
'keys': ['operating_inflows'],
'window_start': '2026-09-01',
'window_end': '2026-10-01',
'input_manifest_id': 'manifest_example',
'processing_context': {'product': 'insights',
'workflow_run_id': 'wfr_example'}},
)
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",
"Idempotency-Key": "idem_example_1001",
"Content-Type": "application/json"
};
headers.Authorization = `Bearer ${apiKey}`;
const response = await fetch(baseUrl.replace(/\/$/, "") + "/v1/attribute-calculations", {
method: "POST", headers,
redirect: "error", signal: AbortSignal.timeout(30000),
body: JSON.stringify({
"subject_id": "biz_example",
"keys": [
"operating_inflows"
],
"window_start": "2026-09-01",
"window_end": "2026-10-01",
"input_manifest_id": "manifest_example",
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
}),
});
if (!response.ok) throw new Error(`AMLOK returned HTTP ${response.status}`);
console.log(await response.json());{
"data": {
"id": "calc_example",
"status": "queued",
"subject_id": "biz_example",
"attribute_ids": [],
"errors": [],
"stop_reason": null,
"processing_context": {
"product": "insights",
"workflow_run_id": "wfr_example"
}
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "pending"
}
}risk:calculate
Calculate selected attributes from a frozen evidence window.
Required scope: risk:calculate. GET /v1/attribute-calculations/ reports job state; values in /v1/attributes. Once account cancellation is submitted, processing and usage deductions stop immediately. Reject new operational commands with 409 invalid_state; pending work is cancelled without another debit. Read-only reporting remains available until workspace deletion. Discover input_manifest_id through GET /v1/input-manifests. It must be ready and belong to the same subject and workspace. The calculation window must be contained within its frozen coverage. This is a stage of an authorized Insights or Signal workflow. processing_context is required; unrelated, completed, unpaid, cancelled or unentitled contexts return 409 invalid_state. It creates no separate AMLOK charge. The orchestrator deduplicates equivalent stage work within the parent. Accepted commands have a durable request receipt. Full response replay lasts 24 hours; afterward the same key and target return 409 idempotency_result_expired without re-execution. Different payloads return 409 idempotency_conflict. Use GET /v1/request-receipts/lookup to find the original resource. The fingerprint includes the resolved target path and intended payload; a key used on another target is rejected rather than replayed onto it. Pre-execution validation or insufficient-credit rejection creates no accepted receipt.
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.
Headers
Optional caller correlation ID; the response includes AMLOK request_id.
Reuse for retries of the same intended command and identical payload. Retention: 24 hours.
Body
Parent must belong to this workspace. Same-subject stages need no association. Only person KYC may target a different subject: supply an active subject_association_id linking that person to the parent business. Insights requires an unfinished authorized root run; Signal requires an active paid period. Stage scope, consent, association and workload are checked on every attempt. The parent business remains the billing and workload subject. No standalone service or extra charge.
- Option 1
- Option 2
Show child attributes
Show child attributes
Subject being assessed.
1Requested attribute names.
1Inclusive interval start.
Exclusive interval end.
Immutable authorized evidence manifest.
1