curl --request GET \
--url https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "cck_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"status": "queued",
"regulationType": "value",
"documentCategory": "value",
"overallStatus": "value",
"complianceScore": 1,
"summary": "Twelve substantive changes, seven of them in the liability and indemnity sections.",
"requirements": [
{
"requirementId": "REQ-006",
"requirementName": "Business Associate Agreement (BAA)",
"regulationReference": "45 CFR 164.504(e)",
"status": "compliant",
"findings": "The agreement names Acme Corporation as a business associate and requires appropriate safeguards, but it is silent on subcontractor flow-down and on return or destruction of protected health information at termination.",
"gapDescription": "value",
"recommendation": "value",
"priority": "high"
}
],
"compliantCount": 0,
"partiallyCompliantCount": 0,
"nonCompliantCount": 0,
"notApplicableCount": 0,
"gaps": [
{
"gapName": "No subcontractor flow-down",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"regulationReference": "45 CFR 164.504(e)(2)(ii)(D)",
"riskLevel": "value",
"remediation": "Add a clause requiring Acme Corporation to bind every subcontractor that receives protected health information to the same restrictions and conditions."
}
],
"remediationActions": [
{
"action": "Add a subcontractor flow-down clause binding every subcontractor to the same restrictions.",
"priority": "high",
"effort": "value",
"deadlineGuidance": "value"
}
],
"responseTimeline": "value",
"deterministicCoverage": 1,
"preCheckFlags": [
"value"
],
"parseWarning": "Two clauses could not be parsed and are omitted from the findings.",
"createdAt": "2026-08-19T14:32:10Z",
"completedAt": "2026-08-19T14:32:10Z"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"errors": [
{
"location": "<string>",
"message": "<string>",
"type": "<string>"
}
],
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}Get a compliance check
One compliance check: its findings, or its progress toward them.
404 covers every reason it is not readable, including a job of a different kind that happens to share the table.
curl --request GET \
--url https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/workspace/v1/matters/{matterId}/compliance-checks/{complianceCheckId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "cck_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"status": "queued",
"regulationType": "value",
"documentCategory": "value",
"overallStatus": "value",
"complianceScore": 1,
"summary": "Twelve substantive changes, seven of them in the liability and indemnity sections.",
"requirements": [
{
"requirementId": "REQ-006",
"requirementName": "Business Associate Agreement (BAA)",
"regulationReference": "45 CFR 164.504(e)",
"status": "compliant",
"findings": "The agreement names Acme Corporation as a business associate and requires appropriate safeguards, but it is silent on subcontractor flow-down and on return or destruction of protected health information at termination.",
"gapDescription": "value",
"recommendation": "value",
"priority": "high"
}
],
"compliantCount": 0,
"partiallyCompliantCount": 0,
"nonCompliantCount": 0,
"notApplicableCount": 0,
"gaps": [
{
"gapName": "No subcontractor flow-down",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"regulationReference": "45 CFR 164.504(e)(2)(ii)(D)",
"riskLevel": "value",
"remediation": "Add a clause requiring Acme Corporation to bind every subcontractor that receives protected health information to the same restrictions and conditions."
}
],
"remediationActions": [
{
"action": "Add a subcontractor flow-down clause binding every subcontractor to the same restrictions.",
"priority": "high",
"effort": "value",
"deadlineGuidance": "value"
}
],
"responseTimeline": "value",
"deterministicCoverage": 1,
"preCheckFlags": [
"value"
],
"parseWarning": "Two clauses could not be parsed and are omitted from the findings.",
"createdAt": "2026-08-19T14:32:10Z",
"completedAt": "2026-08-19T14:32:10Z"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"errors": [
{
"location": "<string>",
"message": "<string>",
"type": "<string>"
}
],
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}{
"type": "https://vaquill.ai/docs/workspace-api/errors/insufficient-scope",
"title": "Insufficient scope",
"status": 403,
"detail": "This credential carries matters:read. This operation needs matters:write.",
"instance": "/workspace/v1/matters/mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"requestId": "req_5f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
}Authorizations
Workspace credential issued from the automation console at /automation. Send it as Authorization: Bearer vq_ws_.... This is NOT a Data API key: a vq_key_ credential is refused here and names the other product in the error.
Path Parameters
mat_ identifier of the matter to work inside. Everything in this API hangs off a matter, and the matter in the path is what the authorization boundary is checked against. Take it from GET /v1/matters.
cck_ identifier of the compliance check. Returned on the operation that launched it.
Response
Successful Response
One compliance check: its findings, or its progress toward them.
Public identifier, cck_ followed by 32 hex characters.
"cck_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
mat_ identifier of the matter this check belongs to.
"mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
Check status, using the same five public values as an operation. While queued or running, requirements is empty and the scalar fields are absent. That is the truthful shape of a check that has not happened yet, not an error.
queued, running, succeeded, failed, cancelled "queued"
When the check was created (RFC 3339).
"2026-08-19T14:32:10Z"
Regulation checked against, echoed from the request.
"hipaa"
Document category, echoed from the request.
"vendor_agreement"
Overall verdict: compliant, partially_compliant, non_compliant, or not_applicable.
"partially_compliant"
Compliance as a percentage, 0 to 100.
1
Overall assessment, in prose.
"Twelve substantive changes, seven of them in the liability and indemnity sections."
Every requirement checked, and the verdict on each.
Show child attributes
Show child attributes
Requirements fully met.
0
Requirements partly met.
0
Requirements not met.
0
Requirements that do not apply to this document.
0
The gaps found.
Show child attributes
Show child attributes
What to do about them, in priority order.
Show child attributes
Show child attributes
A regulatory deadline that applies, where one does.
"60 calendar days for access requests, with one 30-day extension."
Fraction of requirements with keyword evidence in the document, 0 to 1. Low coverage means more of the verdict rests on the model than on the text.
1
Where the model and a deterministic keyword scan disagreed. Each one is worth a human glance.
["value"]
Set when the model's output only partly parsed, which means the findings may be incomplete.
"Two clauses could not be parsed and are omitted from the findings."
When the check reached a terminal status (RFC 3339).
"2026-08-19T14:32:10Z"
Was this page helpful?

