Sharing policy content with other systems
Give a learning system, an HR tool or an intranet a key to read your published policies as JSON or xAPI, and let it check its copy is still current.
Policies are often needed somewhere other than Policy Core: a learning system that trains people on them, a job description that points at a duty, a payroll or finance procedure that quotes a rule. Policy Core can share the published text of your policies with those systems, so they quote what is really in force instead of a copy that went out of date.
Who can do this: Administrators only; Managers and administrators.
What is shared, and what is not #
- Shared: the title, reference, version, review date, every numbered part (as formatted text and as plain text), the requirements each part relates to, and appendices written in the system. Each policy and each part has a permanent identifier and a content hash.
- Never shared: drafts, old versions, reading records (unless a key is given that permission), and uploaded files themselves. For an uploaded form the system receives its name, type and size only.
- Read only. Another system can read your policies. It cannot change them, publish them or read anything else in Policy Core.
Make a key #
- Open Settings and find Share policy content with other systems. Only administrators can see it.
- Type what the key is for, for example Learning system.
- Tick Also reading confirmations only if that system is meant to receive people's names and work email addresses.
- Press Make a key. The key is shown once. Copy it into the other system straight away.
Make one key for each system, so that you can stop one without affecting the others. To stop a key, press Revoke. It stops working at once. Policy Core keeps only a scrambled form of each key, so nobody, including us, can read a key back to you.
Reading policies as JSON #
Every request carries the key in an Authorization header. The address starts with your Policy Core address, then /api/v1.
| Address | What you get |
|---|---|
/api/v1/policies | Every published policy: identifier, title, reference, version, dates and content hash. |
/api/v1/policies/{id} | One policy in full, with all its numbered parts and its appendices. |
/api/v1/policies/{id}/parts/{part-id} | A single part, with a ready-made citation such as "Infection prevention and control (POL-001), version 1.0, part 2.2.1". |
/api/v1/policies/{id}/verify?sha256={hash} | Whether the hash you hold is still the one in force. |
curl -H "Authorization: Bearer pck_your_key_here" \
https://your-policy-core.example/api/v1/policies
The identifier of a policy is the last part of its address in Policy Core. The identifier of a part is its permanent link key: the twelve characters after /ref/ on the Copy link of that part. Both stay the same when a policy is reorganised or renumbered, which is why a job description can quote a part safely.
Knowing a copy is correct #
Each policy has a content hash: a fingerprint of its title, version, every part and every written appendix. It changes whenever anything in force changes, and in no other case. A system that stores a copy can keep the hash with it and ask later whether the copy is current.
- Ask
verifywith the stored hash. The answer saysis_currenttrue or false, and gives the current version and hash. - Or ask for the policy again with the
ETagyou were given. If nothing changed you get an empty 304 answer, which makes regular checks cheap. - If a part is no longer in the version in force, asking for it returns 404 with a message. A system quoting that part should then flag it for a person to look at.
Learning systems: xAPI #
xAPI is the standard that learning systems and learning record stores use to record that someone did something. Policy Core supports it in two ways.
- Each policy as an activity.
/api/v1/policies/{id}/xapireturns the policy as an xAPI activity: a stable identifier, a name, a description and its version, so a learning system can refer to it. - Reading confirmations as statements.
/api/v1/xapi/statementsreturns each confirmation as a completed statement: who (name and work email), which policy and version, when, and how it was confirmed. It needs a key with the reading permission.
Policy Core does not send statements anywhere. The learning system or record store fetches them, so you decide what leaves and when. Use since for a start date and limit for the page size. When there are more, the answer has a more address to follow. Each confirmation always has the same statement identifier, so fetching a statement twice cannot create a duplicate.
Where this is useful #
| Where | What it does with Policy Core |
|---|---|
| Job descriptions and contracts | Quotes the exact part that applies, and shows a warning when that part changes or goes. |
| Payroll, finance and procurement procedures | Shows the rule in force at the point where someone needs it, rather than a copy. |
| Learning systems | Uses the policy as an activity and imports who has confirmed reading it. |
| Intranets and other tools | Lists current policies and links each one back to Policy Core. |
Limits and rules #
- Each key may make 300 requests a minute. Requests that arrive too often get a 429 answer and should wait.
- A key that is wrong is refused with a 401 answer. Repeated wrong keys from one place are slowed down.
- A statement page holds up to 500 statements.
- Everything is sent over a secure connection and nothing is cached by shared caches.
Creating and revoking keys is recorded in the activity log, without the key itself. The last time each key was used is shown next to it in Settings.
Is something wrong, unclear or missing on this page? Tell us what is wrong or missing on this page. We read every message and fix what we get wrong.