openapi: 3.2.0
info:
version: 0.1.0
title: Whitespace Platform Questionnaire API
description:
Last update 29th May 2025
Our intention is to cover the API calls most of use to those wanting to integrate external systems to the Whitespace Platform. We will give some descriptions about usage, but put full detail in standalone documents at
https://apidocs.whitespace.co.uk/. We intend to have the published endpoints and schemas documented to the level that the code generated can be used safely and without modification to call our APIs safely.
Calls exclusive to brokers or underwriters have a comment of Broker Only and Underwriter Only respectively. All other calls work for both, but functionality might depend on the stage the risk is at, or other contextual factors.
Where certain properties refer to RootID or similar, they are actually referring to the ID of the entire slip, encompassing all stages and instances of the contract. This is a unique 38-character reference starting with the letters IC. If they mention riskID or docID or placingID, these are refering to the ID of a specific document or contract instance within the slip. This is always the RootID of the base slip followed by a double colon, ::, and further characters.
Once your Integration is ready to go live, the URL for production is https://www.whitespaceplatform.com
servers:
- description: Sandbox Environment
url: https://sandbox.whitespace.co.uk/
- description: Tess Environment
url: https://tess.whitespace.co.uk/
- description: Beta Environment
url: https://beta.whitespace.co.uk/
- description: Staging Environment
url: https://staging.whitespace.co.uk/
security:
- bearerAuth: []
tags:
- name: Questionnaire
paths:
/api/v23.09/data/questionnaire/{riskID}:
get:
summary: Gets a list of answered Questions in the risk
description: Get a list of Questions with their Answers from the questionnaire associated with the risk. NOTE this only returns questions which have been answered. As such, this call is intended for integrators looking to extract data from the questionnaire, while the questionnaire/answer endpoint is more suitable for answering outstanding questions.
tags:
- Questionnaire
parameters:
- in: path
name: riskID
schema:
type: string
required: true
description: The unique ID of the risk
example: IC63D86D53-3B1F-459F-9D35-5C2D4F0E4854
responses:
'200':
description: successful response
content:
application/json:
schema:
type: object
properties:
questions:
type: array
items:
type: object
properties:
tag:
type: string
example: Pension_Or_Benefits_Plan_Company_Sponsor
value:
type: string
example: 'Yes'
id:
type: string
example: Pension or Benefits Plan - Company Sponsor
label:
type: string
example: Does the company sponsor any pension or benefits plan?
table:
type: object
properties:
rows:
type: array
items:
type: object
additionalProperties:
oneOf:
- type: string
- type: number
- type: object
properties:
value:
type: string
example: GBP 1,000,000
phType:
type: string
example: Amount
description: A cell value (string, number, or an object with value/phType)
labels:
type: object
additionalProperties:
type: string
example:
Total_Plan_Assets_Amount: Total Plan Assets Amount
Asset_Amount_Year: Year
metadata:
type: object
properties:
userID:
type: string
example: MU9FCFC64E-7694-420A-BE61-2ABEDB3E8F52
fetchedAt:
type: string
format: date-time
example: '2024-12-16 10:16:04'
documentID:
type: string
example: IC193F7106-EF8F-4F30-A217-7A6DA1258505
documentRevision:
type: string
example: 7-56a99bd7700e9a8bf17475c9063ed230
env:
type: string
example: apitest
rev:
type: string
example: 2-af869e73e714e1f2ba3a7770566135ad
example:
questions:
- tag: Pension_Or_Benefits_Plan_Company_Sponsor
value: 'Yes'
id: Pension or Benefits Plan - Company Sponsor
label: Does the company sponsor any pension or benefits plan?
- tag: Plans_Adequately_Funded
value: 'Yes'
id: Plans Adequately Funded
label: Are the plans adequately funded as attested by an Actuary?
- tag: Total_Participants_Of_Plans
value: '1'
id: Total Participants of Plans
label: What is the total number of participants of the plans?
- id: Total Plan Assets Amount
label: What is the total plan assets amount(all plans combined)?
table:
rows:
- Total_Plan_Assets_Amount:
value: GBP 1,000,000
phType: Amount
Asset_Amount_Year: '2024'
- Asset_Amount_Year: '2025'
Total_Plan_Assets_Amount:
value: USD 2,000,000
phType: Amount
labels:
Total_Plan_Assets_Amount: Total Plan Assets Amount
Asset_Amount_Year: Year
metadata:
userID: MU9FCFC64E-7694-420A-BE61-2ABEDB3E8F52
fetchedAt: '2024-12-16 10:16:04'
documentID: IC193F7106-EF8F-4F30-A217-7A6DA1258505
documentRevision: 7-56a99bd7700e9a8bf17475c9063ed230
env: apitest
/api/questionnaire/{riskID}:
get:
summary: Gets a list of Questions in the risk
description: Get a full list of Questions that have been added to a risk/template''s questionnaire. This list includes Questions that do not yet have answers, and provides information about the rules/validations applying to a Question. As such, this call is intended for integrators looking to use the questionnaire/answer endpoint to add answers via API, while the v23.09/data/questionnaire call is more suitable for extracting data.
tags:
- Questionnaire
parameters:
- in: path
name: riskID
schema:
type: string
required: true
description: The unique ID of the Risk.
example: IC63D86D53-3B1F-459F-9D35-5C2D4F0E4854
responses:
'200':
description: successful response
content:
application/json:
schema:
type: object
properties:
rules:
type: object
additionalProperties:
type: object
properties:
type:
type: string
example: list
description: The type of rule, i.e 'list' or 'regex' or 'date'
values:
type: array
description: If rule type is list, then this will specify all the possible values the answer can have
items:
type: string
regex:
type: string
example: ^(?:AED|AFN|ALL|AMD|ANG|ANG|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BGN|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYR|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HRK|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LTL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRO|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLL|SOS|SRD|SSP|STD|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|UYI|UYU|UZS|VEF|VND|VUV|WST|XAF|XCD|XDR|XOF|XPF|XSU|XUA|YER|ZAR|ZMW|ZWL)[ -]?(?:\d{1,3}(?:,\d{3})*|\d{1,9})(?:\.\d{1,4})?\$|^(?:nil|none|Nil|None|NIL|NONE)\$
example:
type: string
example: GBP 1,000,000
phType:
type: string
example: Amount
description: Placeholder type i.e 'Amount' or 'Date'
template:
type: string
example: CCY AMOUNT
description: A template of how an answer should look
tags:
type: object
additionalProperties:
type: object
properties:
ruleID:
type: string
example: '37'
description: Look up the ruleId in the Rules array to get information on the rule
preferredListPresentation:
type: string
example: buttons
description: How the list of values should be presented to the user
questions:
type: array
items:
type: object
properties:
text:
type: string
example: Who is the client contact?
description: The text of the question
answer:
type: string
example: Bruce Crown
description: The answer to the question
id:
type: string
example: Client Contact Name
description: The unique ID of the question
dependents:
type: array
items:
description: If any other questions are dependant on this question, the Id''s will be shown here
type: object
properties:
id:
type: string
example: Client Contact Name
tag:
type: string
example: Client_Contact_Name
description: The tag of the question
condition:
description: If the question requires a condition for it to appear, details will be shown here
type: object
properties:
question:
type: object
properties:
id:
type: string
value:
type: string
table:
type: array
items:
type: object
properties:
text:
type: string
tag:
type: string
/api/questionnaire/{riskID}/answer:
post:
tags:
- Questionnaire
summary: Add Answers to a set of questions - Broker Only
description: Use the GET /questionnaire endpoint OR go via /risks/{riskID} to obtain a list of questions available on the risk/template. This call is then used to add answers to the relevant questions. You need to add all the answers in one payload. NOTE that because some questions are dependent on others being answered in a specific way, some of the answers added might not appear in the UI until the parent questions have been answered appropriately.
parameters:
- in: path
name: riskID
schema:
type: string
required: true
description: The unique ID of the risk/template
example: IC213DA609-D6B5-4A05-86B8-3FD91E861F57
requestBody:
content:
application/json:
schema:
type: object
properties:
rev:
type: string
example: 2-af869e73e714e1f2ba3a7770566135ad
answers:
type: array
items:
type: object
properties:
id:
type: string
description: the ID of the question
example: Client Contact Name
dataType:
type: string
description: can be 'text' or 'date'
example: text
value:
type: string
description: A sample text string
example: Bruce Crown
required:
- id
- dataType
- value
required:
- rev
- answers
responses:
'200':
description: successful response
content:
application/json:
schema:
type: object
properties:
id:
type: string
example: ICC8C95CB8-D71F-469B-837A-45491CC4466A
ok:
type: boolean
example: true
rev:
type: string
example: 7-ade833b5c2a23808f0a8a3f95c50b883
'401':
$ref: '#/paths/~1api~1risks~1save/post/responses/401'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT