Skip to main content

Partner API: Handbooks

List handbooks, assign employees and groups, and read signature status and activity logs.

All under /organizations/{orgId}/handbooks, access token. Handbooks themselves are authored in the AirMason editor; the API lets you distribute them and monitor completion.

List and get handbooks

GET /organizations/{orgId}/handbooks

and GET /organizations/{orgId}/handbooks/{handbookId}

{
"id": "hb_3f9…",
"name": "Employee Handbook 2026",
"status": "published",
"currentVersion": 7,
"requiresSignature": true,
"requiresAcknowledgement": false,
"publishedAt": "2026-01-15T16:00:00.000Z",
"url": "https://books.airmason.com/acme-corp/employee-handbook-2026",
"assignedEmployeeCount": 412,
"signedCount": 388,
"createdAt": "2025-11-02T11:20:00.000Z"
}

status is one of draft, published, or archived.

Get employees and groups assignments

GET /organizations/{orgId}/handbooks/{handbookId}/assignments

Returns the current assignments.

Assign employees and groups

PUT /organizations/{orgId}/handbooks/{handbookId}/assignments

{
"groups": ["Sales", "Lisbon Office"],
"employees": ["ext:R-10482"]
}

Replaces the handbook's full assignment set. Newly assigned employees are notified (by email, or via the employee.handbook_assigned webhook if you've disabled emails).

Signature and acknowledgement status

GET /organizations/{orgId}/handbooks/{handbookId}/signatures

One row per assigned employee.

Filter with status=pending|signed|acknowledged, version=<n> (defaults to the current version), or signedSince=<timestamp>.

{
"data": [
{
"employee": { "id": "e7c1…", "employeeId": "R-10482", "email": "sam.okafor@acme.com" },
"version": 7,
"status": "signed",
"firstViewedAt": "2026-01-16T09:02:11.000Z",
"signedAt": "2026-01-16T09:14:37.000Z",
"acknowledgedAt": null,
"remindersSent": 0
}
],
"summary": { "assigned": 412, "viewed": 401, "signed": 388, "acknowledged": 0, "pending": 24 },
"pagination": { "limit": 25, "offset": 0, "total": 412 }
}

status is pending (assigned, not yet actioned), signed, or acknowledged, depending on what the handbook requires. firstViewedAt is populated as soon as the employee opens the handbook, regardless of status.

Activity log

GET /organizations/{orgId}/handbooks/{handbookId}/activity

A chronological, paginated log of everything that happened to the handbook. Filter with type and since.

{
"data": [
{
"id": "al_91…",
"type": "handbook.published",
"occurredAt": "2026-01-15T16:00:00.000Z",
"actor": { "type": "collaborator", "email": "hr@acme.com" },
"details": { "version": 7, "publishType": "manual" }
},
{
"id": "al_92…",
"type": "employee.signed",
"occurredAt": "2026-01-16T09:14:37.000Z",
"actor": { "type": "employee", "employeeId": "R-10482" },
"details": { "version": 7 }
}
],
"pagination": { "limit": 25, "offset": 0, "total": 1204 }
}

Types include handbook.created, handbook.published, handbook.launched, handbook.assignment_changed, employee.viewed, employee.signed, employee.acknowledged, employee.reminder_sent, policy.added, policy.updated, handbook.downloaded.

An organization-wide log (employees, groups, settings, integrations) is available at GET /organizations/{orgId}/activity.


Partner API documentation:

Did this answer your question?