List joiner cases
GET /jml/onboarding/cases
Scope jml:read Plan Seed+
Lists joiner (on-boarding) cases with a reconciled summary of their items: GRANTED when the access is detected in the inventory, ATTESTED when a person confirmed it, else PENDING. Requires the jml:read scope; employee name and email are returned only for tokens that also hold pii:read, which are subject to a per-token request window (429 RATE_LIMITED).
Example
curl "https://api.autociso.io/api/v1/jml/onboarding/cases" \
-H "Authorization: Bearer <your-api-token>"import requests
response = requests.get(
"https://api.autociso.io/api/v1/jml/onboarding/cases",
headers={"Authorization": "Bearer <your-api-token>"},
)
print(response.json())const response = await fetch("https://api.autociso.io/api/v1/jml/onboarding/cases", {
method: "GET",
headers: { "Authorization": "Bearer <your-api-token>" },
});
console.log(await response.json());Response 200
{
"data": [
{
"caseId": "lfc_example000002",
"employee": {
"employeeId": "empl_example000002",
"emailMasked": "a***@example.com",
"department": "Sales",
"jobTitle": "Account Executive",
"employmentType": "FULL_TIME",
"employeeStatus": "ACTIVE",
"startDate": "2026-10-01"
},
"status": "IN_PROGRESS",
"openedAt": "2026-09-25T08:00:00Z",
"dueAt": "2026-10-01T08:00:00Z",
"summary": {
"total": 3,
"granted": 1,
"pending": 1,
"attested": 1
},
"ready": false,
"overdue": true,
"generatedAt": "2026-09-25T08:00:00Z",
"generatedFromProfileIds": [
"aprf_example000001"
]
}
],
"error": null,
"meta": {
"limit": 25,
"offset": 0,
"total": 1,
"accessDataAsOf": "2026-09-29T02:00:00Z"
}
}Query parameters
limitintegerPage size. Default 25, maximum 100; a larger value is rejected with 400 VALIDATION_FAILED.offsetintegerZero-based offset. Maximum 100000.sort[openedAt]string"asc" | "desc"sort[dueAt]string"asc" | "desc"filter[status][eq]stringCase status. CANCELLED cases are excluded unless an eq or in filter names CANCELLED."OPEN" | "IN_PROGRESS" | "COMPLETED" | "CANCELLED"filter[status][ne]string"OPEN" | "IN_PROGRESS" | "COMPLETED" | "CANCELLED"filter[status][in]array of string"OPEN" | "IN_PROGRESS" | "COMPLETED" | "CANCELLED"filter[employeeId][eq]stringfilter[employeeId][in]array of stringfilter[openedAt][gt]string (date-time)filter[openedAt][gte]string (date-time)filter[openedAt][lt]string (date-time)filter[openedAt][lte]string (date-time)filter[dueAt][gt]string (date-time)filter[dueAt][gte]string (date-time)filter[dueAt][lt]string (date-time)filter[dueAt][lte]string (date-time)
Returns
The data field of the standard { data, error, meta } envelope:
An array of object:
caseIdstring requiredemployeeobject requiredIdentity block of a case. Only employeeId is guaranteed; the other fields are absent when unknown or not disclosed.employeeIdstring requiredInternal employee id.emailMaskedstringMasked email address, safe to display.namestringFull name. Present only for tokens holding both jml:read and pii:read; without pii:read the key is absent.emailstringEmail address. Present only for tokens holding both jml:read and pii:read; without pii:read the key is absent.departmentstringjobTitlestringemploymentTypestringemployeeStatusstringstartDatestring (date)Calendar date YYYY-MM-DD.endDatestring (date)Calendar date YYYY-MM-DD.
statusstring requiredCase status, returned as stored; it is not derived from the item statuses. Use ready and overdue for the reconciled picture."OPEN" | "IN_PROGRESS" | "COMPLETED" | "CANCELLED"openedAtstring (date-time) requireddueAtstring (date-time) or null requiredsummaryobject requiredCounts of joiner items per reconciled status. total is the sum of the three.totalinteger requiredgrantedinteger requiredpendinginteger requiredattestedinteger required
readyboolean requiredTrue when no item is pending (every item is granted or attested).overdueboolean requiredTrue when an open case that is not ready is past its due date.generatedAtstring (date-time) or null requiredWhen the items were generated from access profiles; null for cases created otherwise.generatedFromProfileIdsarray of string requiredIds of the access profiles the items were generated from (ids only). Empty, never null.
The meta field:
limitinteger requiredoffsetinteger requiredtotalinteger requiredaccessDataAsOfstring (date-time) or null requiredLatest access detection time used for this response.
Errors
| Status | Code | Retry | Meaning |
|---|---|---|---|
| 400 | VALIDATION_FAILED |
no | Invalid query parameter. code VALIDATION_FAILED; args.parameter names the parameter, args.reason the rule, args.allowed the permitted values of an enum. |
| 401 | INVALID_TOKEN |
no | Missing (UNAUTHORIZED) or invalid, expired or revoked (INVALID_TOKEN) token. |
| 402 | FEATURE_GATED |
no | The tenant plan does not include lifecycle workflows. code FEATURE_GATED; args.feature, args.minTier, args.minTierName. |
| 403 | INSUFFICIENT_SCOPE |
no | The token lacks the jml:read scope (INSUFFICIENT_SCOPE; a token holding pii:read alone reaches no endpoint here), or the request is refused (FORBIDDEN). A token holding pii:read is also refused with INSUFFICIENT_SCOPE when personal data cannot be disclosed to it (personal-data disclosure is disabled for the tenant, or the token has no creator); it is never silently downgraded to the masked shape. |
| 429 | RATE_LIMITED |
yes | Rate limit exceeded. code RATE_LIMITED; wait Retry-After seconds. Applies to the personal-data (pii:read) request window on case endpoints, where Retry-After is the time until the window ends. That window is shared by all calls of the token, over REST and MCP; a request that fails with 503 AUDIT_UNAVAILABLE is not refunded, so retrying spends more of it. Do not build a design that depends on an exact number of requests. It also applies to concurrent feed requests on the items feeds, where Retry-After is 1. The body carries no meta. |
| 500 | INTERNAL_ERROR |
no | Unexpected server error. code INTERNAL_ERROR; quote error.id to support. |
| 503 | BILLING_UNAVAILABLE |
yes | A dependency is temporarily unavailable (BILLING_UNAVAILABLE), or a response containing name or email could not be audited and was withheld (AUDIT_UNAVAILABLE). Retry later. |
Last reviewed: 2026-10-13
Was this page helpful?