BookKeptevidence chain
For developers

The BookKept API

You probably already run something for candidates and vacancies. The compliance layer is the part nobody has, so you should not have to replace what works to get it. Push your placements and timesheets in, take the KIDs, the umbrella register and the evidence chain out.

Keys

An agency generates its own keys from Settings. A key belongs to exactly one agency, and there is no way to ask for another agency's data with a valid key.

The secret is shown once, when the key is created. We store only its SHA-256, so it cannot be recovered or shown again. If it leaks, revoke it and issue another; revocation takes effect on the next request rather than eventually.

Authenticate with a bearer token:
Authorization: Bearer bk_live_…

Scopes

Grants are per area and per level, not one global read and write. An integration that pushes placements has no business reading your billing ledger, so it cannot. Write implies read for the same area only; it never leaks across areas.

A scope is written area:level, and a key carries a space-separated list:

placements:write timesheets:write compliance:read
That key can push the book and the weeks, read the compliance position, and cannot see the money at all.

What no key can do

Three things are closed to every key whatever its scopes, because they are not integration work.

Anything we have not published is also refused. A new endpoint has to be classified deliberately, so it can never quietly widen a key you were issued months ago.

Shape

JSON in, JSON out, over HTTPS. Errors carry a message written for a person, because our refusals say why: a self-billed invoice raised before its agreement exists, a right-to-work check missing the evidence October requires, an umbrella placement with no umbrella named. Those are the product working, not failures to route around.

An unknown or revoked key gets 401. A valid key reaching outside its grants gets 403, and the message names the area it would have needed. Every write lands on the same hash-chained audit trail a person's click would, attributed to the key that made it.

Endpoints

The published surface, by area. Anything not listed here is refused to every key, including endpoints added after your key was issued.

placements

timesheets

compliance

billing

jobs

A worked example

The usual first integration: your CRM owns candidates and vacancies, BookKept owns the evidence chain.

The point

Adopt the compliance layer without a migration

Nothing here asks you to move your candidate data or retrain a desk. Keep the system your consultants know, and put the part that carries statutory risk somewhere it is evidenced, dated and hash-chained. If you later want the whole thing, the importer takes your book as five CSVs and reads your own column headings.

Compliance guides