curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/monitoring-periods?subject_id=biz_example&limit=100" \
--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/monitoring-periods?subject_id=biz_example&limit=100",
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/monitoring-periods?subject_id=biz_example&limit=100", {
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": "monitoring_period_example",
"object": "monitoring_period",
"workspace_id": "wsp_example",
"subject_id": "biz_example",
"period_start": "2026-10-01T00:00:00Z",
"period_end": "2026-11-01T00:00:00Z",
"first_activated_at": "2026-10-01T00:00:00Z",
"charged_at": "2026-10-01T00:00:00Z",
"billing_usage_id": "billing_usage_signal",
"status": "active",
"workload_id": "workload_signal_example",
"baseline_snapshot_id": "rsk_baseline",
"rate_card_id": "billing_rate_card_example",
"tier": "standard",
"blocked_reason": null
}
],
"page": {
"next_cursor": null,
"has_more": false,
"limit": 100
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "complete"
}
}List monitoring periods
Signal charges the full agreed monthly rate once per borrower/business/workspace at 00:00 UTC on the first day of the month, before monitoring proceeds. First activation during a month charges the full monthly rate immediately, without proration; the next charge is at the next month boundary. Repeated monitor creation, pauses, resumes, checks and reassessments do not add charges in an already paid period. Insufficient credits block monitoring without a debit or debt; funding resumes only the current period after its single successful charge, without charging missed inactive months. User-paused monitoring remains paused until the user resumes it. Account cancellation stops processing and all further deductions immediately. Read one shared record per subject/month, including its charge and workload references. Periods are immutable in identity; current status and charged_at reflect activation. API reads never create a charge.
curl --request GET --fail-with-body --max-time 30 \
"${AMLOK_API_BASE_URL}/v1/monitoring-periods?subject_id=biz_example&limit=100" \
--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/monitoring-periods?subject_id=biz_example&limit=100",
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/monitoring-periods?subject_id=biz_example&limit=100", {
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": "monitoring_period_example",
"object": "monitoring_period",
"workspace_id": "wsp_example",
"subject_id": "biz_example",
"period_start": "2026-10-01T00:00:00Z",
"period_end": "2026-11-01T00:00:00Z",
"first_activated_at": "2026-10-01T00:00:00Z",
"charged_at": "2026-10-01T00:00:00Z",
"billing_usage_id": "billing_usage_signal",
"status": "active",
"workload_id": "workload_signal_example",
"baseline_snapshot_id": "rsk_baseline",
"rate_card_id": "billing_rate_card_example",
"tier": "standard",
"blocked_reason": null
}
],
"page": {
"next_cursor": null,
"has_more": false,
"limit": 100
},
"meta": {
"request_id": "req_example",
"schema_version": "1.4.2",
"generated_at": "2026-10-23T14:00:00Z",
"data_status": "complete"
}
}monitoring:read
Signal charges the full agreed monthly rate once per borrower/business/workspace at 00:00 UTC on the first day of the month, before monitoring proceeds. First activation during a month charges the full monthly rate immediately, without proration; the next charge is at the next month boundary. Repeated monitor creation, pauses, resumes, checks and reassessments do not add charges in an already paid period. Insufficient credits block monitoring without a debit or debt; funding resumes only the current period after its single successful charge, without charging missed inactive months. User-paused monitoring remains paused until the user resumes it. Account cancellation stops processing and all further deductions immediately. Read one shared record per subject/month, including its charge and workload references. Periods are immutable in identity; current status and charged_at reflect activation. API reads never create a charge.
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.
Query Parameters
Authorized borrower/business.
Inclusive UTC period-start boundary.
Exclusive UTC period-start boundary.
Default 100; maximum 200.
1 <= x <= 200Opaque continuation bound to the original filters and snapshot.