kapi WorksDocs

Employees and invitations during a period

GET/v1/people

Employees and invitation records that existed between from and to. Requires people:read. Names, work emails and certificate check codes also need people:read; without it they are left out.

Authorization

bearerAuth people:read
AuthorizationBearer <token>

A company API key, not an OAuth access token: kw_live_ in production, kw_test_ elsewhere. Send it only in the Authorization header. A key sent in a URL is revoked.

In: header

Scope: people:read

Query Parameters

from?|

Required on the first page. Period start, inclusive; a date starts the company's day. Omit it with a cursor, which keeps it. At most 400 days before to.

to?|

Required on the first page. Period end, inclusive, as an instant or a company date. Omit it with a cursor, which keeps it.

cursor?string

Opaque next_cursor from the previous page. Send it unchanged to the same endpoint. It pins the snapshot and filters, and grants no access.

limit?integer

Rows per page, 1 to 200. Larger values are treated as 200. A page can hold fewer rows to stay within 3 MiB, so follow next_cursor until it is null.

Range1 <= value
Default200

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

# Supply the key from your server's secret manager. Do not log it.# curl reads the header from stdin, keeping the key out of its arguments.printf 'header = "Authorization: Bearer %s"\n' "$KAPI_WORKS_API_KEY" |  curl --config - --silent --show-error --fail-with-body \  'https://example.com/v1/people'
{  "data": [    {      "deployment_id": "00000000-0000-4000-8000-000000000001",      "organization_id": "4f6b2a52-1c1e-4f7a-9d3e-2b7c8a9e0d11",      "learning_space_id": "8b2d6c3e-5f41-4a8e-9c27-1d0e3f4a5b62",      "person_id": "c3a1e7f2-8d64-4b1f-a9e2-6f5d4c3b2a10",      "learner_profile_id": "c3a1e7f2-8d64-4b1f-a9e2-6f5d4c3b2a10",      "invitation_id": null,      "entry_type": "employee",      "sequence": 1190,      "valid_from": "2026-08-28T10:02:00Z",      "recorded_at": "2026-08-28T10:02:03Z",      "cause": "change",      "logic_version": 4,      "person_name": "Amira Okafor",      "work_email": "amira.okafor@example.com",      "invited_at": "2026-08-27T09:15:00Z",      "joined_at": "2026-08-28T10:02:00Z",      "left_at": null,      "invitation_expires_at": null,      "invitation_state": null,      "invitation_status": null,      "access_state": "active",      "team_ids": [        "b6d4f2a8-9e1c-4a35-8f72-0e9d8c7b6a54"      ],      "doors": [        "employee"      ],      "records_owed": 4,      "records_completed": 3,      "no_required_records": false    }  ],  "total": 1,  "snapshot": {    "organization_id": "4f6b2a52-1c1e-4f7a-9d3e-2b7c8a9e0d11",    "deployment_id": "00000000-0000-4000-8000-000000000001",    "as_at": "2026-10-09T09:00:00Z",    "from": null,    "known_at": "2026-10-09T08:59:41Z",    "sequence": 1284,    "capture_sequence": 352,    "chain_hash": "3f9a1c7e5b2d8f4a6c0e9b1d3f5a7c9e2b4d6f8a0c1e3b5d7f9a2c4e6b8d0f1a",    "logic": {      "version": 4,      "date": "2026-10-06"    },    "history_complete_from": "2026-10-06T05:00:00Z",    "available": true  },  "next_cursor": null}