API Reference

Firm API

Firm profile, settings, API keys, webhooks, and users

Endpoints in this group

GET/v1/firm/me

Get current firm details

Responses

200Current firm details401Unauthorized
FieldTypeReqDescription
idstringNo
namestringNo
frnNumberstringNo
planstringNo
LEDGERPRINCIPALBOTH
createdAtstring (date-time)No
settingsFirmSettingsNo

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
PATCH/v1/firm/me/settings

Update firm settings

Toggle firm-level controls. Currently supports the impact-assessment enforcement gate; more settings will be added here rather than scattered across new endpoints. Compliance-relevant changes emit a FIRM_SETTINGS_UPDATED ledger event carrying the field-level diff and the authenticated actor (user or API key). No-op writes (where the incoming value already matches the stored value) are ignored — nothing is written to the database and no ledger record is emitted.

Request body

FieldTypeReqDescription
biasWarningThresholdnumberNoBias score at which a warning is raised
biasAlertThresholdnumberNoBias score at which an alert is raised
biasAbsoluteRejectionThresholdnumberNoBias score at which automatic rejection occurs
cdRejectionRateWarningThresholdnumberNoConsumer Duty rejection rate warning threshold
cdRejectionRateAlertThresholdnumberNoConsumer Duty rejection rate alert threshold
cdSlaComplianceWarningThresholdnumberNoConsumer Duty SLA compliance warning threshold
cdSlaComplianceAlertThresholdnumberNoConsumer Duty SLA compliance alert threshold
cdReadCompletionWarningThresholdnumberNoConsumer Duty read-completion warning threshold
enforceImpactAssessmentsbooleanNoWhen true, jobs submitted with aiContext.model are gated on a matching APPROVED impact assessment

Responses

200Updated firm settings401Unauthorized
FieldTypeReqDescription
biasWarningThresholdnumberNoBias score at which a warning is raised
biasAlertThresholdnumberNoBias score at which an alert is raised
biasAbsoluteRejectionThresholdnumberNoBias score at which automatic rejection occurs
cdRejectionRateWarningThresholdnumberNoConsumer Duty rejection rate warning threshold
cdRejectionRateAlertThresholdnumberNoConsumer Duty rejection rate alert threshold
cdSlaComplianceWarningThresholdnumberNoConsumer Duty SLA compliance warning threshold
cdSlaComplianceAlertThresholdnumberNoConsumer Duty SLA compliance alert threshold
cdReadCompletionWarningThresholdnumberNoConsumer Duty read-completion warning threshold
enforceImpactAssessmentsbooleanNoWhen true, jobs submitted with aiContext.model are gated on a matching APPROVED impact assessment

Example request

curl
curl -X PATCH "https://api.bedrockcompliance.co.uk/v1/firm/me/settings" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "biasWarningThreshold": 0,
  "biasAlertThreshold": 0,
  "biasAbsoluteRejectionThreshold": 0,
  "cdRejectionRateWarningThreshold": 0,
  "cdRejectionRateAlertThreshold": 0,
  "cdSlaComplianceWarningThreshold": 0,
  "cdSlaComplianceAlertThreshold": 0,
  "cdReadCompletionWarningThreshold": 0,
  "enforceImpactAssessments": true
}'
GET/v1/firm/me/settings

Get firm settings

Returns the current firm settings including bias thresholds, Consumer Duty thresholds, and impact-assessment enforcement.

Responses

200Current firm settings401Unauthorized
FieldTypeReqDescription
biasWarningThresholdnumberNoBias score at which a warning is raised
biasAlertThresholdnumberNoBias score at which an alert is raised
biasAbsoluteRejectionThresholdnumberNoBias score at which automatic rejection occurs
cdRejectionRateWarningThresholdnumberNoConsumer Duty rejection rate warning threshold
cdRejectionRateAlertThresholdnumberNoConsumer Duty rejection rate alert threshold
cdSlaComplianceWarningThresholdnumberNoConsumer Duty SLA compliance warning threshold
cdSlaComplianceAlertThresholdnumberNoConsumer Duty SLA compliance alert threshold
cdReadCompletionWarningThresholdnumberNoConsumer Duty read-completion warning threshold
enforceImpactAssessmentsbooleanNoWhen true, jobs submitted with aiContext.model are gated on a matching APPROVED impact assessment

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/settings" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/stats

Get current firm statistics

Responses

200Firm statistics401Unauthorized
FieldTypeReqDescription
recordCountintegerNo
certificateCountintegerNo
jobCountintegerNo

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/stats" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/backup-status

Get immutable backup status for the firm

Responses

200Backup status with record counts and spot-check results401Unauthorized
FieldTypeReqDescription
healthybooleanNo
databaseobjectNo
immutableStorageobjectNo
countsMatchbooleanNo
latestRecordobject | nullNo
spotChecksobject[]No
checkedAtstring (date-time)No

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/backup-status" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/api-keys

List API keys for the authenticated firm

Responses

200List of API keys401Unauthorized

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/api-keys" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/api-keys

Generate a new API key

Request body

FieldTypeReqDescription
namestringYesName/label for the API key

Responses

201API key generated (shown only once)401Unauthorized
FieldTypeReqDescription
idstringNo
keystringNoThe full API key — only returned at creation time
namestringNo
createdAtstring (date-time)No

Example request

curl
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/api-keys" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "<name>"
}'
DELETE/v1/firm/me/api-keys/{keyId}

Revoke an API key

Parameters

ParameterInTypeReqDescription
keyIdpathstringYesAPI key ID

Responses

204API key revoked401Unauthorized404API key not found

Example request

curl
curl -X DELETE "https://api.bedrockcompliance.co.uk/v1/firm/me/api-keys/<keyId>" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/webhooks

List webhook endpoints for the authenticated firm

Responses

200List of webhook endpoints401Unauthorized

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/webhooks" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/webhooks

Register a webhook endpoint

Request body

FieldTypeReqDescription
urlstring (uri)Yes
eventsstring[]YesEvent types to subscribe to

Responses

201Webhook registered401Unauthorized
FieldTypeReqDescription
idstringNo
firmIdstringNo
urlstring (uri)No
secretstringNoHMAC secret used to sign deliveries to this endpoint. Returned in full from the create endpoint and on subsequent list calls — store it carefully.
eventsstring[]NoSubscribed webhook event names. Only events on this list are delivered.
isActivebooleanNoSet to false by `DELETE /v1/firm/me/webhooks/{id}`. Inactive endpoints stay on the row but receive no further deliveries.
createdAtstring (date-time)No

Example request

curl
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/webhooks" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://example.com",
  "events": []
}'
DELETE/v1/firm/me/webhooks/{id}

Deactivate a webhook endpoint

Parameters

ParameterInTypeReqDescription
idpathstringYesWebhook ID

Responses

204Webhook deactivated401Unauthorized404Webhook not found

Example request

curl
curl -X DELETE "https://api.bedrockcompliance.co.uk/v1/firm/me/webhooks/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/users

List users for the firm

Responses

200List of users401Unauthorized

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/users" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/users

Invite a user to the firm

Request body

FieldTypeReqDescription
namestringYes
emailstring (email)Yes
fcaRefstringYesFCA individual reference number
qualificationsstring[]No
rolestringNo
FIRM_ADMINREVIEWERLEAD_REVIEWER
specialistVulnerabilitybooleanNoSet to true to mark this user as an FG21/1 specialist who is allowed to handle jobs carrying vulnerability flags. Defaults to false.

Responses

201User invited401Unauthorized
FieldTypeReqDescription
idstringNo
namestringNo
emailstring (email)No
fcaRefstring | nullNo
qualificationsstring[]NoProfessional qualifications used by the routing engine.
rolestringNo
FIRM_ADMINREVIEWERLEAD_REVIEWER
isAvailablebooleanNo
specialistVulnerabilitybooleanNoFCA FG21/1 specialist flag. Reviewers with this flag set (along with LEAD_REVIEWER and FIRM_ADMIN) are eligible to handle jobs carrying any vulnerability flags.
invitedAtstring (date-time)No
activatedAtstring (date-time) | nullNo
deactivatedAtstring (date-time) | nullNo
activeJobIdstring | nullNo

Example request

curl
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/users" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "<name>",
  "email": "<email>",
  "fcaRef": "<fcaRef>",
  "qualifications": [],
  "role": "<role>",
  "specialistVulnerability": true
}'
POST/v1/firm/me/users/{id}

Update a user

Toggle the FG21/1 specialist flag on a user, or change their role. Specialist-flag updates accept either credential; role changes require a JWT-authenticated FIRM_ADMIN (API keys cannot promote users — passing a `role` field with an API-key credential returns 403 FORBIDDEN).

Parameters

ParameterInTypeReqDescription
idpathstringYesUser ID

Request body

FieldTypeReqDescription
specialistVulnerabilitybooleanNoFG21/1 specialist flag. Reviewers with this flag (along with LEAD_REVIEWER and FIRM_ADMIN) are eligible to handle jobs with vulnerability flags.
rolestringNoOnly firm admins authenticated as users (not API keys) can change roles.
FIRM_ADMINREVIEWERLEAD_REVIEWER

Responses

200Updated user401Unauthorized403FORBIDDEN — role changes require a JWT-authenticated firm admin404User not found
FieldTypeReqDescription
idstringNo
namestringNo
emailstring (email)No
fcaRefstring | nullNo
qualificationsstring[]NoProfessional qualifications used by the routing engine.
rolestringNo
FIRM_ADMINREVIEWERLEAD_REVIEWER
isAvailablebooleanNo
specialistVulnerabilitybooleanNoFCA FG21/1 specialist flag. Reviewers with this flag set (along with LEAD_REVIEWER and FIRM_ADMIN) are eligible to handle jobs carrying any vulnerability flags.
invitedAtstring (date-time)No
activatedAtstring (date-time) | nullNo
deactivatedAtstring (date-time) | nullNo
activeJobIdstring | nullNo

Example request

curl
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/users/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "specialistVulnerability": true,
  "role": "<role>"
}'
DELETE/v1/firm/me/users/{id}

Deactivate a user

Parameters

ParameterInTypeReqDescription
idpathstringYesUser ID

Responses

204User deactivated400Cannot deactivate yourself401Unauthorized

Example request

curl
curl -X DELETE "https://api.bedrockcompliance.co.uk/v1/firm/me/users/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/document-types

List all document types for the firm

Returns all document types (platform defaults and custom) with their checklist items. Use the slug when submitting review jobs.

Responses

200List of document types401Unauthorized

Example request

curl
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/document-types" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/document-types

Create a custom document type

Request body

FieldTypeReqDescription
slugstringYesUnique identifier, uppercase with underscores (e.g. PENSION_TRANSFER)
namestringYesDisplay name
checklistItemsstring[]YesReview checklist items (at least one required)

Responses

201Document type created400Invalid input (empty slug, name, or checklist)401Unauthorized409Slug already exists for this firm
FieldTypeReqDescription
idstringNo
firmIdstringNo
slugstringNoUnique identifier used in API payloads (e.g. SUITABILITY_REPORT)
namestringNoDisplay name (e.g. Suitability Report)
checklistItemsstring[]NoReview checklist items for this document type
createdAtstring (date-time)No
updatedAtstring (date-time)No

Example request

curl
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/document-types" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "slug": "<slug>",
  "name": "<name>",
  "checklistItems": []
}'
PATCH/v1/firm/me/document-types/{slug}

Update a document type

Update the name and/or checklist items for a document type.

Parameters

ParameterInTypeReqDescription
slugpathstringYesDocument type slug

Request body

FieldTypeReqDescription
namestringNoUpdated display name
checklistItemsstring[]NoUpdated checklist items

Responses

200Document type updated400Empty body, empty name, or empty checklist401Unauthorized404Document type not found
FieldTypeReqDescription
idstringNo
firmIdstringNo
slugstringNoUnique identifier used in API payloads (e.g. SUITABILITY_REPORT)
namestringNoDisplay name (e.g. Suitability Report)
checklistItemsstring[]NoReview checklist items for this document type
createdAtstring (date-time)No
updatedAtstring (date-time)No

Example request

curl
curl -X PATCH "https://api.bedrockcompliance.co.uk/v1/firm/me/document-types/<slug>" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "<name>",
  "checklistItems": []
}'
Bedrock AIAsk me anything about Bedrock

Hi! I'm Bedrock's AI assistant. I can answer questions about the product, pricing, compliance coverage, and integrations. What would you like to know?