curl --request GET \
--url https://api.vaquill.ai/workspace/v1/matters/{matterId}/nda-triages/{ndaTriageId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/nda-triages/{ndaTriageId}"
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}/nda-triages/{ndaTriageId}', 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}/nda-triages/{ndaTriageId}"
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": "ndt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"status": "queued",
"classification": "value",
"effectiveClassification": "value",
"summary": "Twelve substantive changes, seven of them in the liability and indemnity sections.",
"ndaType": "value",
"counterpartyName": "value",
"playbookId": "value",
"jurisdiction": "US",
"criteria": [
{
"criterionId": 1,
"criterionName": "Term and Duration",
"status": "pass",
"findings": "Confidentiality obligations run for ten years from the effective date, with no separate treatment of trade secrets.",
"issues": [
"value"
],
"recommendation": "value",
"playbookAssessment": {
"verdict": "meets_standard",
"playbookPosition": "Cap liability at fees paid in the preceding twelve months.",
"deviationSummary": "value",
"triggeredEscalations": [
"value"
]
}
}
],
"passCount": 0,
"warnCount": 0,
"failCount": 0,
"keyIssues": [
"value"
],
"routingRecommendation": "value",
"estimatedTimeline": "value",
"missingCarveouts": [
"value"
],
"problematicProvisions": [
"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 an NDA triage
One triage: its screen, or its progress toward one.
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}/nda-triages/{ndaTriageId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/nda-triages/{ndaTriageId}"
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}/nda-triages/{ndaTriageId}', 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}/nda-triages/{ndaTriageId}"
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": "ndt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"status": "queued",
"classification": "value",
"effectiveClassification": "value",
"summary": "Twelve substantive changes, seven of them in the liability and indemnity sections.",
"ndaType": "value",
"counterpartyName": "value",
"playbookId": "value",
"jurisdiction": "US",
"criteria": [
{
"criterionId": 1,
"criterionName": "Term and Duration",
"status": "pass",
"findings": "Confidentiality obligations run for ten years from the effective date, with no separate treatment of trade secrets.",
"issues": [
"value"
],
"recommendation": "value",
"playbookAssessment": {
"verdict": "meets_standard",
"playbookPosition": "Cap liability at fees paid in the preceding twelve months.",
"deviationSummary": "value",
"triggeredEscalations": [
"value"
]
}
}
],
"passCount": 0,
"warnCount": 0,
"failCount": 0,
"keyIssues": [
"value"
],
"routingRecommendation": "value",
"estimatedTimeline": "value",
"missingCarveouts": [
"value"
],
"problematicProvisions": [
"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.
ndt_ identifier of the NDA triage. Returned on the operation that launched it.
Response
Successful Response
One NDA triage: its screen, or its progress toward one.
Public identifier, ndt_ followed by 32 hex characters.
"ndt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
mat_ identifier of the matter this triage belongs to.
"mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
Triage status, using the same five public values as an operation. While queued or running, criteria is empty and the scalar fields are absent. That is the truthful shape of a screen that has not happened yet, not an error.
queued, running, succeeded, failed, cancelled "queued"
When the triage was created (RFC 3339).
"2026-08-19T14:32:10Z"
The screen's own verdict: green (standard approval), yellow (counsel review) or red (significant issues).
"yellow"
The verdict after layering your playbook on top, which is the one to act on. A deal-breaker flips this to red even where the screen said green. Equal to classification when no playbook applied.
"red"
Overall assessment, in prose.
"Twelve substantive changes, seven of them in the liability and indemnity sections."
Structure of the agreement: mutual, unilateral_disclosing, unilateral_receiving, or unknown.
"mutual"
Counterparty, echoed from the request.
"Acme Corporation"
The playbook the triage actually ran against. Absent when it ran against the built-in defaults, so the two cases can be told apart after the fact.
"pbk_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
Jurisdiction the default positions were drawn from.
"US"
The ten screening criteria and their results.
Show child attributes
Show child attributes
How many criteria passed.
0
How many criteria drew a warning.
0
How many criteria failed.
0
The issues that need attention first.
["value"]
What to do next, given the classification.
"Route to counsel for full review before signature; do not sign as received."
How long resolution is expected to take, for example Same day.
"3-5 business days"
Standard carve-outs the NDA does not have. The one finding that cannot be expressed as a criterion result, because there is nothing there to assess.
["value"]
Provisions that do not belong in an NDA at all, for example a non-compete or an assignment of IP.
["value"]
Set when the model's output only partly parsed, which means the screen may be incomplete. Present is the difference between routing on it and asking a human first.
"Two clauses could not be parsed and are omitted from the findings."
When the triage reached a terminal status (RFC 3339).
"2026-08-19T14:32:10Z"
Was this page helpful?

