API Reference

Firm API

Firm self-service endpoints for API keys, webhooks, users, and settings

Endpoints in this group

GET/v1/firm/me

Get current firm details

Responses

200Current firm details401Unauthorized
FieldTypeReqDescription
idstringNo
namestringNo
frnNumberstringNo
planstringNo
LEDGERPRINCIPALBOTH
enforceImpactAssessmentsbooleanNoWhether the firm requires an approved impact assessment for any job that declares a modelProvider/modelVersion. Defaults to true; can be toggled via PATCH /v1/firm/me/settings.
createdAtstring (date-time)No

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
enforceImpactAssessmentsbooleanNoWhen true (the default), jobs submitted with a modelProvider/modelVersion are gated on a matching APPROVED impact assessment.

Responses

200Updated firm settings401Unauthorized
FieldTypeReqDescription
idstringNo
namestringNo
frnNumberstringNo
planstringNo
enforceImpactAssessmentsbooleanNo
createdAtstring (date-time)No

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 '{
  "enforceImpactAssessments": true
}'
GET/v1/firm/me/impact-assessments

List Consumer Duty impact assessments

Returns every impact assessment filed by the firm, newest first. Each entry carries the outcome responses, template version, model provider/version (if set), and the users who created and signed off the assessment.

Responses

200List of impact assessments401Unauthorized

Example request

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

File a draft impact assessment

Create a new DRAFT impact assessment for an AI use case. When outcomes are omitted, the draft is seeded with empty responses and a LOW risk rating for each of the four PRIN 2A outcome areas so the reviewer can fill them in progressively.

Request body

FieldTypeReqDescription
useCasestringYes
descriptionstringYes
modelProviderstring | nullNoOptional. Pair with modelVersion to tie this assessment to a specific model and feed the enforcement gate on job submission.
modelVersionstring | nullNo
outcomesImpactAssessmentOutcomesNoOptional. When omitted, the draft is seeded with empty responses and a LOW risk rating per outcome.

Responses

201Draft assessment created400useCase and description required401Unauthorized
FieldTypeReqDescription
idstringYes
firmIdstringYes
useCasestringYesShort title for the AI use case (e.g. 'GPT-4 fact-find summariser').
descriptionstringYesWhat the AI does and where in the workflow it runs.
modelProviderstring | nullNoAI model provider this assessment covers (e.g. 'openai'). When set with modelVersion and the firm has enforceImpactAssessments on, jobs declaring the same provider/version are gated on this assessment reaching APPROVED.
modelVersionstring | nullNoSpecific model version this assessment covers (e.g. 'gpt-4o-2024-08-06').
templateVersionintegerYesTemplate schema version the outcomes conform to. v1 is the only template today.
outcomesImpactAssessmentOutcomesYes
statusImpactAssessmentStatusYes
createdByIdstring | nullNo
signedOffByIdstring | nullNo
signedOffAtstring (date-time) | nullNoServer-controlled. Stamped when the assessment transitions to APPROVED.
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
createdByobject | nullNo
signedOffByobject | nullNo
ledgerRecordIdstring | nullNoLedger record this assessment is anchored to once approved. Null before approval. Use as the key to fetch the certificate PDF via `GET /v1/ledger/records/{id}/certificate`.
certificateIdstring | nullNoCertificate id, populated once cert-gen finishes after approval. Use for verify deep-links.

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/impact-assessments" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "useCase": "<useCase>",
  "description": "<description>",
  "modelProvider": "<modelProvider>",
  "modelVersion": "<modelVersion>",
  "outcomes": {}
}'
GET/v1/firm/me/impact-assessments/{id}

Get an impact assessment

Parameters

ParameterInTypeReqDescription
idpathstringYes

Responses

200Impact assessment401Unauthorized404Assessment not found
FieldTypeReqDescription
idstringYes
firmIdstringYes
useCasestringYesShort title for the AI use case (e.g. 'GPT-4 fact-find summariser').
descriptionstringYesWhat the AI does and where in the workflow it runs.
modelProviderstring | nullNoAI model provider this assessment covers (e.g. 'openai'). When set with modelVersion and the firm has enforceImpactAssessments on, jobs declaring the same provider/version are gated on this assessment reaching APPROVED.
modelVersionstring | nullNoSpecific model version this assessment covers (e.g. 'gpt-4o-2024-08-06').
templateVersionintegerYesTemplate schema version the outcomes conform to. v1 is the only template today.
outcomesImpactAssessmentOutcomesYes
statusImpactAssessmentStatusYes
createdByIdstring | nullNo
signedOffByIdstring | nullNo
signedOffAtstring (date-time) | nullNoServer-controlled. Stamped when the assessment transitions to APPROVED.
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
createdByobject | nullNo
signedOffByobject | nullNo
ledgerRecordIdstring | nullNoLedger record this assessment is anchored to once approved. Null before approval. Use as the key to fetch the certificate PDF via `GET /v1/ledger/records/{id}/certificate`.
certificateIdstring | nullNoCertificate id, populated once cert-gen finishes after approval. Use for verify deep-links.

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/impact-assessments/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/impact-assessments/{id}

Update or transition an impact assessment

Edits the draft content and/or moves the assessment through its status graph: DRAFT → PENDING_SIGNOFF → APPROVED / REJECTED → SUPERSEDED. Approving requires an authenticated LEAD_REVIEWER or FIRM_ADMIN and produces an IMPACT_ASSESSMENT_APPROVED ledger event. APPROVED and SUPERSEDED assessments are immutable — further edits return 409 CONFLICT.

Parameters

ParameterInTypeReqDescription
idpathstringYes

Request body

FieldTypeReqDescription
useCasestringNo
descriptionstringNo
modelProviderstring | nullNo
modelVersionstring | nullNo
outcomesImpactAssessmentOutcomesNo
statusImpactAssessmentStatusNo

Responses

200Updated impact assessment400Invalid status value401Unauthorized403Senior sign-off required (LEAD_REVIEWER or FIRM_ADMIN) — or the caller is an API key (API keys cannot approve assessments)404Assessment not found409Invalid status transition, or an APPROVED / SUPERSEDED assessment was edited
FieldTypeReqDescription
idstringYes
firmIdstringYes
useCasestringYesShort title for the AI use case (e.g. 'GPT-4 fact-find summariser').
descriptionstringYesWhat the AI does and where in the workflow it runs.
modelProviderstring | nullNoAI model provider this assessment covers (e.g. 'openai'). When set with modelVersion and the firm has enforceImpactAssessments on, jobs declaring the same provider/version are gated on this assessment reaching APPROVED.
modelVersionstring | nullNoSpecific model version this assessment covers (e.g. 'gpt-4o-2024-08-06').
templateVersionintegerYesTemplate schema version the outcomes conform to. v1 is the only template today.
outcomesImpactAssessmentOutcomesYes
statusImpactAssessmentStatusYes
createdByIdstring | nullNo
signedOffByIdstring | nullNo
signedOffAtstring (date-time) | nullNoServer-controlled. Stamped when the assessment transitions to APPROVED.
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
createdByobject | nullNo
signedOffByobject | nullNo
ledgerRecordIdstring | nullNoLedger record this assessment is anchored to once approved. Null before approval. Use as the key to fetch the certificate PDF via `GET /v1/ledger/records/{id}/certificate`.
certificateIdstring | nullNoCertificate id, populated once cert-gen finishes after approval. Use for verify deep-links.

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/impact-assessments/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "useCase": "<useCase>",
  "description": "<description>",
  "modelProvider": "<modelProvider>",
  "modelVersion": "<modelVersion>",
  "outcomes": {},
  "status": {}
}'
POST/v1/firm/me/impact-assessments/{id}/supersede

Mark an assessment as superseded

Retires an assessment in favour of a newer one covering the same use case. Superseded assessments are kept for audit trail but no longer count toward the impact-assessment enforcement gate.

Parameters

ParameterInTypeReqDescription
idpathstringYes

Responses

200Assessment marked as superseded401Unauthorized404Assessment not found
FieldTypeReqDescription
idstringYes
firmIdstringYes
useCasestringYesShort title for the AI use case (e.g. 'GPT-4 fact-find summariser').
descriptionstringYesWhat the AI does and where in the workflow it runs.
modelProviderstring | nullNoAI model provider this assessment covers (e.g. 'openai'). When set with modelVersion and the firm has enforceImpactAssessments on, jobs declaring the same provider/version are gated on this assessment reaching APPROVED.
modelVersionstring | nullNoSpecific model version this assessment covers (e.g. 'gpt-4o-2024-08-06').
templateVersionintegerYesTemplate schema version the outcomes conform to. v1 is the only template today.
outcomesImpactAssessmentOutcomesYes
statusImpactAssessmentStatusYes
createdByIdstring | nullNo
signedOffByIdstring | nullNo
signedOffAtstring (date-time) | nullNoServer-controlled. Stamped when the assessment transitions to APPROVED.
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
createdByobject | nullNo
signedOffByobject | nullNo
ledgerRecordIdstring | nullNoLedger record this assessment is anchored to once approved. Null before approval. Use as the key to fetch the certificate PDF via `GET /v1/ledger/records/{id}/certificate`.
certificateIdstring | nullNoCertificate id, populated once cert-gen finishes after approval. Use for verify deep-links.

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/impact-assessments/<id>/supersede" \
  -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
eventsstring[]No
createdAtstring (date-time)No
deactivatedAtstring (date-time) | nullNo

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/models

List AI models tracked for the firm

Returns every distinct (provider, version) pair that has appeared on a review job, with usage counts and outcome rates. The registry is the entry point for AI accountability evidence — every advice record is tagged with the model that produced it.

Responses

200List of model versions with usage stats401Unauthorized

Example request

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

Detect drift across all AI models

Compares the trailing window against the prior baseline window for every (provider, version) the firm uses. Surfaces statistically significant changes in rejection rate, modification rate, and reviewer annotation frequency. Each model needs at least 5 completed jobs in both windows for a signal to fire.

Parameters

ParameterInTypeReqDescription
baselineDaysqueryintegerNoLength of the baseline window in days (defaults to 90).
currentDaysqueryintegerNoLength of the current window in days (defaults to 30).

Responses

200Drift signals across all models400Invalid window parameters401Unauthorized
FieldTypeReqDescription
signalsModelDriftSignal[]NoAll triggered drift signals, sorted by severity (alert > warning > info).
thresholdsobjectNo
baselineWindowDaysintegerNo
currentWindowDaysintegerNo

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/models/drift" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/models/{provider}/{version}/timeline

Weekly quality timeline for a model version

Returns weekly buckets of approval / modification / rejection rates and reviewer annotation counts for a specific model version. Use this to drill into a drift signal and see exactly when the regression started.

Parameters

ParameterInTypeReqDescription
providerpathstringYesModel provider (e.g. "openai")
versionpathstringYesModel version (e.g. "gpt-4o-2024-08-06")
fromquerystringNoStart of the window (defaults to 180 days ago).
toquerystringNoEnd of the window (defaults to now).

Responses

200Weekly timeline points400Invalid date range401Unauthorized

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/models/<provider>/<version>/timeline" \
  -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
fcaRefstringNoFCA individual reference number
qualificationsstring[]No
rolestringNo
FIRM_ADMINREVIEWERLEAD_REVIEWER

Responses

201User invited401Unauthorized
FieldTypeReqDescription
idstringNo
namestringNo
emailstring (email)No
fcaRefstring | nullNo
qualificationsstring[]No
rolestringNo
FIRM_ADMINREVIEWERLEAD_REVIEWER
isAvailablebooleanNo
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>"
}'
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/incidents

List incidents for the firm

Returns the 200 most recent incidents for the authenticated firm, newest first. Each incident includes any remediation actions attached to it and the user who reported it.

Responses

200List of incidents401Unauthorized403Forbidden

Example request

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

Log a new incident

Creates a new incident and enqueues an INCIDENT_LOGGED record to the immutable ledger. The incident snapshot (id, title, severity, category, affected jobs/records, reportedAt) is hashed and anchored to the ledger chain.

Request body

FieldTypeReqDescription
titlestringYes
descriptionstringYes
severityIncidentSeverityYes
categoryIncidentCategoryYes
affectedReviewJobIdsstring[]No
affectedLedgerRecordIdsstring[]No

Responses

201Incident created400Missing title/description or invalid severity/category401Unauthorized403Forbidden404Firm not found
FieldTypeReqDescription
idstringYes
firmIdstringYes
titlestringYes
descriptionstringYes
severityIncidentSeverityYes
categoryIncidentCategoryYes
statusIncidentStatusYes
reportedAtstring (date-time)Yes
reportedByIdstring | nullNo
resolvedAtstring (date-time) | nullNoServer-controlled. Stamped when status transitions to RESOLVED or CLOSED.
rootCausestring | nullNo
affectedReviewJobIdsstring[]YesReview job IDs affected by the incident.
affectedLedgerRecordIdsstring[]YesLedger record IDs affected by the incident.
metadataobjectYes
remediationsIncidentRemediation[]NoRemediation actions, present when the incident is fetched individually.
reportedByobject | nullNo

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "title": "<title>",
  "description": "<description>",
  "severity": {},
  "category": {},
  "affectedReviewJobIds": [],
  "affectedLedgerRecordIds": []
}'
GET/v1/firm/me/incidents/stats

Incident statistics and trends

Aggregate counts (total, open, resolved, critical), a breakdown by category, and a 12-month trend of incident volume. Open counts include OPEN, INVESTIGATING, and REMEDIATING states.

Responses

200Incident statistics401Unauthorized403Forbidden
FieldTypeReqDescription
totalintegerYes
openintegerYesIncidents in OPEN, INVESTIGATING, or REMEDIATING state.
resolvedintegerYesIncidents in RESOLVED or CLOSED state.
criticalintegerYesIncidents with severity CRITICAL (any status).
byCategoryobjectYesCount of incidents per category.
trendobject[]YesTrailing 12 months of incident volume, oldest first.

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents/stats" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/incidents/{id}

Get an incident with remediations

Returns a single incident scoped to the authenticated firm, with all attached remediation actions and the user who reported it.

Parameters

ParameterInTypeReqDescription
idpathstringYesIncident identifier

Responses

200Incident with remediations401Unauthorized403Forbidden404Incident not found
FieldTypeReqDescription
idstringYes
firmIdstringYes
titlestringYes
descriptionstringYes
severityIncidentSeverityYes
categoryIncidentCategoryYes
statusIncidentStatusYes
reportedAtstring (date-time)Yes
reportedByIdstring | nullNo
resolvedAtstring (date-time) | nullNoServer-controlled. Stamped when status transitions to RESOLVED or CLOSED.
rootCausestring | nullNo
affectedReviewJobIdsstring[]YesReview job IDs affected by the incident.
affectedLedgerRecordIdsstring[]YesLedger record IDs affected by the incident.
metadataobjectYes
remediationsIncidentRemediation[]NoRemediation actions, present when the incident is fetched individually.
reportedByobject | nullNo

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
POST/v1/firm/me/incidents/{id}

Update incident status or root cause

Updates an incident's status and/or root cause. Uses POST rather than PATCH for consistency with the rest of this namespace. When the status transitions to RESOLVED or CLOSED the server stamps resolvedAt and enqueues an INCIDENT_RESOLVED record to the immutable ledger.

Parameters

ParameterInTypeReqDescription
idpathstringYesIncident identifier

Request body

FieldTypeReqDescription
statusIncidentStatusNo
rootCausestring | nullNoPass null to clear a previously-set root cause. resolvedAt is server-controlled and cannot be set via this endpoint.

Responses

200Updated incident400Invalid status401Unauthorized403Forbidden404Incident not found
FieldTypeReqDescription
idstringYes
firmIdstringYes
titlestringYes
descriptionstringYes
severityIncidentSeverityYes
categoryIncidentCategoryYes
statusIncidentStatusYes
reportedAtstring (date-time)Yes
reportedByIdstring | nullNo
resolvedAtstring (date-time) | nullNoServer-controlled. Stamped when status transitions to RESOLVED or CLOSED.
rootCausestring | nullNo
affectedReviewJobIdsstring[]YesReview job IDs affected by the incident.
affectedLedgerRecordIdsstring[]YesLedger record IDs affected by the incident.
metadataobjectYes
remediationsIncidentRemediation[]NoRemediation actions, present when the incident is fetched individually.
reportedByobject | nullNo

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents/<id>" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "status": {},
  "rootCause": "<rootCause>"
}'
POST/v1/firm/me/incidents/{id}/remediations

Add a remediation action to an incident

Attach a new remediation action (with optional owner and due date) to an existing incident.

Parameters

ParameterInTypeReqDescription
idpathstringYesIncident identifier

Request body

FieldTypeReqDescription
descriptionstringYes
ownerNamestringNo
dueAtstring (date-time)No

Responses

201Remediation created400Description required401Unauthorized403Forbidden404Incident not found
FieldTypeReqDescription
idstringYes
incidentIdstringYes
descriptionstringYes
statusRemediationStatusYes
ownerNamestring | nullNo
dueAtstring (date-time) | nullNo
completedAtstring (date-time) | nullNoServer-controlled: set when status becomes COMPLETED, cleared otherwise.
createdAtstring (date-time)Yes

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents/<id>/remediations" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "description": "<description>",
  "ownerName": "<ownerName>",
  "dueAt": "<dueAt>"
}'
POST/v1/firm/me/incidents/{id}/remediations/{remediationId}

Update a remediation action

Update the status of an existing remediation. completedAt is server-controlled: it is set when the status becomes COMPLETED and cleared otherwise.

Parameters

ParameterInTypeReqDescription
idpathstringYesIncident identifier
remediationIdpathstringYesRemediation identifier

Request body

FieldTypeReqDescription
statusRemediationStatusNo

Responses

200Updated remediation400Invalid status401Unauthorized403Forbidden404Remediation not found
FieldTypeReqDescription
idstringYes
incidentIdstringYes
descriptionstringYes
statusRemediationStatusYes
ownerNamestring | nullNo
dueAtstring (date-time) | nullNo
completedAtstring (date-time) | nullNoServer-controlled: set when status becomes COMPLETED, cleared otherwise.
createdAtstring (date-time)Yes

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/incidents/<id>/remediations/<remediationId>" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "status": {}
}'
GET/v1/firm/me/vulnerability

Vulnerability handling report (FG21/1)

Aggregated handling of FCA FG21/1 vulnerability drivers (health, life event, capability, financial resilience) across review jobs. Includes per-flag outcome breakdowns, counts of specialist reviewers and reviews awaiting senior sign-off, and a sample of recent flagged jobs.

Responses

200Vulnerability report401Unauthorized403Forbidden
FieldTypeReqDescription
totalFlaggedJobsintegerYes
totalUnflaggedJobsintegerYes
flagBreakdownVulnerabilityFlagBreakdown[]Yes
specialistReviewerCountintegerYesReviewers trained to handle vulnerable clients.
totalReviewerCountintegerYes
awaitingSeniorSignOffintegerYesFlagged jobs still awaiting senior reviewer sign-off.
recentFlaggedJobsobject[]Yes

Example request

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

Bias / fairness report across client segments

Splits completed review outcomes by client segment dimensions (age band, risk profile, product type, etc.) and flags segments whose rejection or modification rates diverge materially from the baseline or exceed an absolute rejection threshold. Flags come in two kinds: 'divergence' (rate differs from the dimension baseline) and 'absolute' (rate exceeds the configured threshold).

Parameters

ParameterInTypeReqDescription
fromquerystringNoStart of reporting period (ISO date or datetime; defaults to 12 months ago). Date-only values are interpreted as the start of that UTC day.
toquerystringNoEnd of reporting period (ISO date treated as end-of-day; defaults to now).
rejectionThresholdquerynumberNoAbsolute rejection-rate threshold for alerts, 0 to 1. Defaults to 0.3.

Responses

200Bias report400Invalid date range or rejectionThreshold401Unauthorized403Forbidden
FieldTypeReqDescription
periodFromstring (date-time)Yes
periodTostring (date-time)YesInclusive end of the reporting period (23:59:59.999 UTC for date-only inputs).
totalRecordsintegerYes
overallRejectionRatenumber (float)YesOverall rejection rate across every completed job in the period, regardless of which segment dimensions each job populates.
dimensionsSegmentDimension[]Yes
flagsBiasFlag[]YesAll flags raised, aggregated across dimensions.
thresholdsobjectYesDivergence thresholds, absolute delta from baseline.
rejectionAlertThresholdnumber (float)YesAbsolute rejection-rate threshold used to raise 'absolute' flags.
trendBiasTrendPoint[]Yes

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/bias" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/reports/consumer-duty

Consumer Duty outcome metrics

Returns Consumer Duty outcome and control-evidence metrics for a reporting period: outcome breakdown, SLA compliance, reviewer workload, document-type breakdown, monthly outcome buckets, and a ledger crypto anchor covering the window. Includes the previous period's outcomes and SLA for comparison.

Parameters

ParameterInTypeReqDescription
fromquerystringNoStart of reporting period. ISO date or datetime. Defaults to the start of the current quarter.
toquerystringNoEnd of reporting period. ISO date treated as end-of-day. Defaults to today.

Responses

200Consumer Duty report400Invalid date range401Unauthorized403Forbidden
FieldTypeReqDescription
periodFromstring (date-time)Yes
periodTostring (date-time)YesInclusive end of the reporting period.
metricsConsumerDutyMetricsYes

Example request

cURL
curl -X GET "https://api.bedrockcompliance.co.uk/v1/firm/me/reports/consumer-duty" \
  -H "X-Bedrock-Key: bk_live_your_api_key"
GET/v1/firm/me/reports

List generated reports

Returns the audit log of previously-generated reports. Optionally filter by report type.

Parameters

ParameterInTypeReqDescription
typequerystringNoFilter by report type.

Responses

200List of report log entries400Invalid report type401Unauthorized403Forbidden

Example request

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

Log a generated report

Record that a report was generated, for audit purposes. The server parses and normalises periodFrom/periodTo before persisting, and tags the entry with the authenticated user as the generator.

Request body

FieldTypeReqDescription
typeReportTypeYes
periodFromstring (date-time)Yes
periodTostring (date-time)Yes
metadataobjectNo

Responses

201Report log entry400Invalid report type or date range401Unauthorized403Forbidden
FieldTypeReqDescription
idstringYes
firmIdstringYes
typeReportTypeYes
periodFromstring (date-time)Yes
periodTostring (date-time)Yes
generatedAtstring (date-time)Yes
generatedByUserIdstring | nullNo
metadataobjectYes
generatedByUserobject | nullNo

Example request

cURL
curl -X POST "https://api.bedrockcompliance.co.uk/v1/firm/me/reports" \
  -H "X-Bedrock-Key: bk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
  "type": {},
  "periodFrom": "<periodFrom>",
  "periodTo": "<periodTo>",
  "metadata": {}
}'