Riskproof Data API User documentation
A guide to using the API to retrieve site information, module statuses and snapshot dates.
RiskProof Data API
This site is used to document RiskProof's Data API. These allow clients to extract data for reporting and data warehousing.
Table of Contents
URIs
The production APIs start with the prefix https://api.riskproof.com/data/v1/
Authentication
Request Header: "API-Key".
- Each client is issued with their own API Key. This is used with the API-Key header in the HTTP request header.
Rate Limits
- API request rate is limited to 10 API requests per minute. If this is exceeded the service will return HTTP 429 Too Many Requests.
- Data egress is limited to 1GB per day. If this is exceeded the service will return HTTP 403
- Where pagination is implemented the number of records returned per request is limited to 10,000 items
Pagination
Get /checklists/ and /checklists/published implement paging using Limit and Offset URL parameters. The response payload also includes links to previous and next pages. The default (and maximum) value for Limit is 10000. The default value for Offset is 0.
Deltas
Get /checklists/ and /checklists/published implement deltas using a changedSince URL parameter.
Timing
Currently the APIs pull data from a data warehouse that is refreshed each night between 12:30am and 4:30am UTC. To get a consistent set of data you should pull data after this time.
Error Handling
- HTTP 400 Bad Request. Indicates that some aspect of the request is invalid e.g. Offset or Limit query parameters outside valid ranges.
- HTTP 401 Unauthorised. Indicates that the API key is missing or invalid.
- HTTP 403 Forbidden. Indicates that the daily data egress quota has been exceeded.
- HTTP 429 Too Many Requests. API rate limit has been exceeded. The response header RetryAfter indicates the number of seconds remaining before a retry is possible.
- HTTP 500 Internal Server Error. An unexpected error.
Sites [/sites/{siteID}]
The sites api gives access to a list of sites and a summary of their risk rating.
- Parameters
- siteID (optional, string,
7562076B-236C-44D6-883E-A01ED6BE7C5E) ...
- siteID (optional, string,
Sites [GET /sites]
Retrieve list of sites
- Also available GET /sites/{siteID} endpoint
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1
currentPage: 1 - body
{"sites":[{"siteID":"7562076B-236C-44D6-883E-A01ED6BE7C5E","siteName":"100123 Manchester Store","siteCode":"100123","overallStatus":"Amber","auditStatus":"Green","registryStatus":"Amber","monitoringStatus":"Red","riskAssessmentStatus":"Green","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Site Detail [GET /sites/detail]
Retrieves more detailed risk ratings
- Also available GET /sites/{siteID}/detail endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"sites":[{"siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","siteName":"100123 Manchester Store","siteCode" : "100123","overallStatus": "Amber","audit": {"auditStatus": "Green","openCriticalActions" : 0,"openHighActions" : 0,"openMediumActions" : 0,"openOverdueActions" : 0},"registry": {"registryStatus": "Amber","expiredItems":10,"almostDue":10,"inDate":28},"monitoring": {"monitoringStatus": "Red","overdueDefects": 35,"openDefects": 0},"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Site History [GET /sites/{siteID}/history]
Retrieve historic month end risk ratings
- Also available GET /sites/{siteID}/history endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"sites" : [{"siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","siteName":"100123 Manchester Store","siteCode" : "100123","statusHistory" : [{"period" : "202108","overall" : "Green","auditStatus" : "Green","registryStatus" : "Green","monitoringStatus" : "Green","riskAssessmentStatus" : "Green"},{"period" : "202107","overall" : "Green","auditStatus" : "Green","registryStatus" : "Green","riskAssessmentStatus" : "Green"},{"period" : "202106","overall" : "Green","auditStatus" : "Green","registryStatus" : "Green","riskAssessmentStatus" : "Amber"}],"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Monitoring [/checklists/{scheduledChecklistID}]
The Monitoring api gives access to a list of scheduled checklists and a summary of their actions
- Parameters
- scheduledChecklistID (optional, string,
236C076B-7562-44D6-7C5E-A01ED6BE883E) ...
- scheduledChecklistID (optional, string,
Checklist [GET /checklists]
Retrieves scheduled checklists
- Paging is available with this end point
- Also available GET /checklists/{scheduledChecklistID} endpoint
- Deltas are available using the changedSince query parameter eg &changedSince=2022-01-28T09:38:41.341Z
- Request
- headers
API-Key: {access token}
Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"scheduledChecklists" : [{"scheduledChecklistID": "236C076B-7562-44D6-7C5E-A01ED6BE883E","checklistName":"Daily temperature check","frequency" : "Daily","category" : "Fridges","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","scheduledDate" : "2022-01-27T00:00:00Z","openWindow" : "2022-01-27T06:00:00Z","closeWindow" : "2022-01-27T12:00:00Z","completedDate" : "2022-01-27T10:13:57.234Z","status" : "Complete","actions": 0,"completedByUserID" : "FAE16F0C-7580-4A74-A89A-F5C8B91C8839","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Checklist Action [GET /checklists/actions]
Retrieves actions associated with scheduled checklists
- API Status: Published
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"checklistActions" : [{"actionID": "D8D35CB9-AC21-4B88-A8EC-000554FFFF05","scheduledChecklistID": "B8583406-BBBF-53BB-8129-000012978C43","siteID": "F37E4617-ED95-4809-944C-301B0C4C6E20","dueDate": "2022-03-23T23:59:59Z","completeDate": "2022-07-02T19:13:19.6770000Z","section": "Frozen","question": "Carry out the daily date checks","comment": "some things out of date","status": "Closed","closeComment": "out of date items removed","closedByUserID": "461A8093-595B-0B87-246S-527D23589C3B","snapshotDate": "2022-03-22T17:46:44.5500000Z"}]}
- headers
Checklist Published [GET /checklists/published]
Retrieves the answers completed in published scheduled checklists
- Paging is available with this end point
- Deltas are available using the changedSince query parameter eg &changedSince=2022-01-28T09:38:41.341Z
The answers array May have 0 or more answers depending on whether the question was answered and the type of question.
- Optional Question. When a question has not been answered (optional) then the answer array will be empty
- Further info prompt. When a question has a further additional text prompt then the answer array will contain the answer to the original question plus the answer to the further question
- Pass/Fail/NA answer. The answer array will include the selected option. If the option selected is either Pass or NA then it will contain the answer to the further question
- Photo Answer. When a photo question has been answered and an images attached the answer array will contain the guid of the image
- Multi-answer When a question using the multi-answer answer types has been answered with more than 1 answer, then the answer array will contain the texts of all the selected options eg ["Option 1", "Option 2"]
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"checklistAnswers" : [{"scheduledChecklistID": "B8583406-BBBF-53BB-8829-000012978C43","snapshotDate": "2024-07-10T11:28:04.4000000Z","sections": [{"sectionName": "Temprature Check","questions": [{"question": "Name of person completing checks.","answer": [ "Jonny" ],"answerType": "ShortText"},{"question": "Temperature of the freezer.","answer": ["-18°C to -25°C TARGET"],"answerType": "SingleAnswerChoice"},{"question": "Freezer condition.","answer": ["Seals not operating","Build up of Ice","Lighting faulty"],"answerType": "MultiAnswerChoice"}]}]}]}
- headers
On-Demand checklists
The scheduled checklists data set returned by the API includes details of On Demand checklists. These checklists aren’t scheduled in advanced but are completed (and retrospectively scheduled) on demand. These items will have a "frequency" of “On-Demand”.
This type of checklist can never have the status of Missed or Pending. They are either Completed with a schedule entry created retrospectively or not saved.
Riskproof’s Checklist reporting methodology
The reports in Riskproof in most cases provide information about closed scheduled checklists. The definition of a closed scheduled checklist is that "closeWindow" is in the past. At this point it is clear whether a checklist is missed of completed.
The data API releases information about a scheduled checklist on the day the "scheduledDate" is reached. Depending on the frequency and open window settings the actual checklist may not open until later in the day or even on following days. Initially it has a status of Pending.
Scheduled checklists have one of 3 statuses. Missed, Completed or a new status Pending. Pending means that the scheduled checklist will open soon, or is already open, but hasn’t been completed. When the "closeWindow" passes this status of Pending checklists will change to Missed or Completed.
If you are trying to report on missed checklists in September 2026, the methodology, that is compatible with Riskproof’s reports is to select checklists whose "closeWindow" is between 01-September-2026 00:00:00 and 01-October-2026 00:00:00 AND whose "closeWindow" is before today1 AND "frequency" <> “On-Demand“2.
1 Riskproof’s reports often use data sets with known outcomes (Completed or Missed). This is achieved by using data where the "closeWindow" has passed.
2 Riskproof has separate reports for On Demand and scheduled checklists. If you are checking for missed checklists, and given On-Demand checklists can’t be missed, you would exclude these.
Timing of updates
The data returned by the Data API is “snapshotted” in the early hours. At that point the status is determined based on the available data at that time. If a scheduled checklist is changed in Riskproof after that time, it will be the following day until the status is refreshed.
Riskproof’s mobile app
Where checklists have been completed with the mobile, it is possible, if the app is offline, for the details of a completed checklist to be delayed. In practice a small number (<1% ) of checklists take more that 24h to deliver the details of a completed checklist to be save fully back to Riskproof.
The mobile app records the time when the checklist was completed, and this information is retained along with the checklist data, so even in the event that there is a delay in saving data, there is a proper record of whether a checklist was completed on time or missed.
In the scenario where a daily checklists was completed on time in the app but it it took, for example, 36 hours to save, the checklist would initially show as missed in Riskproof but then will change to Complete when Riskproof receives the data from the app.
Audit [/audits/{auditEventID}]
The Audit api gives access to a list of published Audits and a summary of their actions
- Parameters
- auditEventID (optional, string,
53039649-71f2-44e6-b4ef-e095a1f4bff2) ...
- auditEventID (optional, string,
Audits [GET /audits]
Retrieves audits
- Also available GET /audits/{auditEventID} endpoint
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"audits" : [{"auditEventID": "53039649-71f2-44e6-b4ef-e095a1f4bff2","auditRoundName":"Medium store v 2.1","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","startDate" : "2022-01-27T00:00:00Z","publishedDate" : "2022-01-27T10:13:57.234Z","auditorUserID": "92970946-0A70-D199-CEC2-EAE66B5EBBAD","managerName": "Paul Glover","currentAuditStatus" : "Amber","overallPercentage" : 90.1,"actions": 0,"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Audit Actions [GET /audits/actions]
Retrieves actions associated with audits
- Also available GET /audits/{auditEventID}/actions endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1totalPages: 1currentPage: 1
currentPage: 1 - body
{"auditActions" : [{"actionID" : "c4feb6bb-5b92-427e-92c3-8196a60ab4a5","auditEventID": "236C076B-7562-44D6-7C5E-A01ED6BE883E","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","auditSection" : "Food Safety","auditPoint" : "Hygiene practices","auditSubPoint" : "Are all food preparation and food storage areas free from risks of contamination?","dueDate" : "2022-01-30T23:59:59Z","comment" : "Build up of ice in the freezer. Please ensure that the freezer is defrosted and the build of ice is removed. Further investigation may be necessary to establish the cause of ice build-up.","status" : "Closed","priority" : "High","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Fire [/fras/{FRAEventID}]
The FRAs api gives access to a list of published Fire Risk Assessments and a summary of their actions
- Parameters
- FRAEventID (optional, string,
53039649-71f2-44e6-b4ef-e095a1f4bff2) ...
- FRAEventID (optional, string,
FRAs [GET /fras]
Retrieves audits
- Also available GET /fras/{FRAEventID} endpoint
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"fras" : [{"FRAEventID": "53039649-71f2-44e6-b4ef-e095a1f4bff2","FRARoundName":"Medium store v 2.1","FRASetName":"FRA master set v 2.2","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","startDate" : "2022-01-27T00:00:00Z","publishedDate" : "2022-01-27T10:13:57.234Z","auditorUserID": "92970946-0A70-D199-CEC2-EAE66B5EBBAD","managerName": "Paul Glover","currentFRAStatus" : "Amber","observed": 150,"nonConformant": 17,"notApplicable": 1,"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
FRA Actions [GET /fras/actions]
Retrieves details of actions relating to non conformant subpoints within a Fire Risk Assessment
- Also available GET /fras/{FRAEventID}/actions endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"fraSubPoints" : [{"actionID" : "c4feb6bb-5b92-427e-92c3-8196a60ab4a5","fraEventID": "236C076B-7562-44D6-7C5E-A01ED6BE883E","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","FRASection" : "Food Safety","FRAPoint" : "Hygiene practices","FRASubPoint" : "Are all food preparation and food storage areas free from risks of contamination?","dueDate" : "2022-01-30T23:59:59Z","comment" : "Build up of ice in the freezer. Please ensure that the freezer is defrosted and the build of ice is removed. Further investigation may be necessary to establish the cause of ice build-up.","status" : "Closed","priority" : "High","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Users [/users/{userID}]
The Users api gives access to a list of Users.
- Parameters
- userID (optional, string,
abd2abc6-14f4-4efd-9cb1-fe3962ff1443)
- userID (optional, string,
Users [GET /users]
Retrieves users. This set will contain and additional the psuedo user "11111111-1111-1111-1111-111111111111" which is used to represent "external" users who do not belong to this client
- API Status: Published
- Also available GET /users/{userID} endpoint
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"users":[{"userID":"abd2abc6-14f4-4efd-9cb1-fe3962ff1443","email":"test@example.com","forename":"Joanne","surname":"Doe","accessEnabled":true,"role":"Store Manager","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Helpline [/helpline/{caseID}]
The Helpline api gives access to a list of Helpline incident cases and a summary of their actions and notes
- Parameters
- caseID (optional, string,
53039649-71f2-44e6-b4ef-e095a1f4bff2) ...
- caseID (optional, string,
Helpline [GET /helpline]
Retrieves Helpline incidents
- Also available GET /helpline/{caseID} endpoint
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"cases" : [{"caseID": "53039649-71f2-44e6-b4ef-e095a1f4bff2","reference" : 18975654,"yourReference" : "IN/12689","createdDate" : "2022-01-27T10:17:34.876Z","createdUserID" : "46a297b2-3d4d-4df2-a11c-359552e7448e","lastUpdatedDate" : "2022-01-29T11:43:14.356Z","lastUpdatedUserID" : "ccf4b3e5-93b5-448b-ab68-6091bcd8a205","closedDate" : "2022-01-29T11:43:14.356Z","closedUserID" : "ccf4b3e5-93b5-448b-ab68-6091bcd8a205","caseType" : "Foreign Body","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","incidentDate" : "2022-01-27T09:30:00Z","description" : "Customer slipped on spillage.","notificationChannel" : "In Person","status" : "Closed","riddorReported" : false,"actions": 0,"notes": 2,"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Helpline Actions [GET /helpline/actions]
Retrieves actions associated with Helpline incident cases
- Also available GET /Helpline/{caseID}/actions endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"caseActions" : [{"actionID" : "86dc308f-af3c-466b-bc2c-05a4e2eeffbb","caseID": "53039649-71f2-44e6-b4ef-e095a1f4bff2","siteID": "7562076B-236C-44D6-883E-A01ED6BE7C5E","createdDate" : "2022-01-27T10:17:34.876Z","createdUserID" : "46a297b2-3d4d-4df2-a11c-359552e7448e","lastUpdatedDate" : "2022-01-29T11:43:14.356Z","lastUpdatedUserID" : "ccf4b3e5-93b5-448b-ab68-6091bcd8a205","closedDate" : "2022-01-29T11:43:14.356Z","completedBy" : "Freddy","dueDate" : "2022-01-30T23:59:59Z","actionDescription" : "Clean floor","actionPriority" : "Recommendation","assignedTo" : "ccf4b3e5-93b5-448b-ab68-6091bcd8a205","status" : "Closed","snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Helpline Notes [GET /helpline/notes]
Retrieves notes associated with Helpline incident cases
- Also available GET /Helpline/{caseID}/notes endpoint
- Request
- headers
API-Key: {access token}Content-type:'application/json'
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{"caseNotes" : [{"caseNoteID" : "86dc308f-af3c-466b-bc2c-05a4e2eeffbb","caseID": "53039649-71f2-44e6-b4ef-e095a1f4bff2","createdDate" : "2022-01-29T11:43:14.356Z","createdUserID" : "ccf4b3e5-93b5-448b-ab68-6091bcd8a205","noteText": "Need to check service records","timeSpent" : 60,"snapshotDate" :"2022-01-28T09:38:41.341Z"}]}
- headers
Training
The training api gives access to colleague training records, details and plans.
There are 3 common statuses for a course on a Colleague’s plan:
- Logged means that the training was manually logged.
- Attended means that it was an e-learning course that was successfully completed.
- Enrolled means that the colleague was enrolled on a e-learning course but haven’t completed it.
Colleagues [GET /training/colleagues]
Retrieve list of training colleagues.
Colleagues can be linked to a user login account using userID against the Users data set.
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1 - body
{
"trainingColleagues": [
{
"colleagueID": "80A4D3C4-2B1B-4BD5-8B05-0006621D3DF8",
"siteID": "09A3CF7B-3AE9-4065-94C7-A48E7418087D",
"forenames": "John",
"surname": "doe",
"payrollURN": "",
"currentlyEmployed": true,
"startDate": "2010-09-02T15:25:02.3100000Z",
"endDate": null,
"trainingPlanID": "D60D003B-0602-491B-B45A-4A64E482B3D4",
"trainingPlanName": "Kitchen Staff",
"userID": "F71B7430-549A-20E2-67C9-6C6491487462",
"snapshotDate": "2026-10-15T11:53:05.8985352Z"
},
]
}
- headers
Records [GET /training/records]
Retrieve list of colleague training records. This data set include latest and previous attendences of a course.
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1
- headers
-
- body
{
"trainingRecords": [
{
"colleagueID": "80E4D3D3-2B1B-4BD5-8B05-0006621D3DF8",
"courseID": "35428FD6-7895-4874-97B5-0C50758BF574",
"courseName": "Manual Handling Awareness",
"status": "Logged",
"enrolmentDate": null,
"completionDate": "2011-02-10T00:00:00Z",
"expiryDate": "2012-02-10T00:00:00Z",
"certificateID": "7FCA85EB-0AD8-4FF0-B40B-226AC48FA870",
"snapshotDate": "2026-10-13T15:33:42.8973727Z"
},
]
}
- body
Training Plans [GET /training/plans]
Retrieves colleague compliance against their training plan, detailing for each colleague the courses on their plan, whether they have completed those courses, and when any accreditation expires.
- Request
- headers
API-Key: {access token}Content-type: application/json
- headers
- Response 200 (application/json)
- headers
totalPages: 1currentPage: 1
- headers
-
- body
{
"trainingPlans": [
{
"colleagueID": "80E4E4C4-2B1B-4BD5-8B05-0006621D3DF8",
"trainingPlanID": "D60D103B-0602-491B-B46A-4A64E482B3D4",
"trainingPlanName": "Kitchen Staff",
"courseID": "11F683BF-4873-42EB-9B51-823D7A6077BE",
"courseName": "Compliance Induction",
"status": "Logged",
"completionDate": "2010-02-27T00:00:00Z",
"expiryDate": "2010-05-27T00:00:00Z",
"snapshotDate": "2026-10-14T15:03:56.7446651Z"
},
]}
- body