curl --request POST \
--url https://api.vaquill.ai/workspace/v1/matters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme / Series B Financing"
}
'import requests
url = "https://api.vaquill.ai/workspace/v1/matters"
payload = { "name": "Acme / Series B Financing" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Acme / Series B Financing'})
};
fetch('https://api.vaquill.ai/workspace/v1/matters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/workspace/v1/matters"
payload := strings.NewReader("{\n \"name\": \"Acme / Series B Financing\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"name": "Acme / Series B Financing",
"clientId": "cli_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"instructions": "House paper. Cap liability at 12 months of fees; never accept uncapped indemnity.",
"status": "open",
"practiceArea": "commercial",
"matterType": "financing",
"caseNumber": "2026-CV-0117",
"responsibleAttorneyName": "Dana Whitfield",
"openDate": "2026-08-19",
"closeDate": "2026-08-19",
"billingType": "hourly",
"billingRate": "450.00",
"billingCurrency": "USD",
"country": "US",
"metadata": {
"externalId": "CRM-4471"
},
"isDefault": false,
"createdAt": "2026-08-19T14:32:10Z",
"updatedAt": "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",
"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"
}Create a matter
Create a matter.
The organization comes from the credential, so there is no field for it.
Only name is required. A clientId, if given, is verified to belong to
your organization before the matter is written.
curl --request POST \
--url https://api.vaquill.ai/workspace/v1/matters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Acme / Series B Financing"
}
'import requests
url = "https://api.vaquill.ai/workspace/v1/matters"
payload = { "name": "Acme / Series B Financing" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Acme / Series B Financing'})
};
fetch('https://api.vaquill.ai/workspace/v1/matters', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vaquill.ai/workspace/v1/matters"
payload := strings.NewReader("{\n \"name\": \"Acme / Series B Financing\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"name": "Acme / Series B Financing",
"clientId": "cli_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"instructions": "House paper. Cap liability at 12 months of fees; never accept uncapped indemnity.",
"status": "open",
"practiceArea": "commercial",
"matterType": "financing",
"caseNumber": "2026-CV-0117",
"responsibleAttorneyName": "Dana Whitfield",
"openDate": "2026-08-19",
"closeDate": "2026-08-19",
"billingType": "hourly",
"billingRate": "450.00",
"billingCurrency": "USD",
"country": "US",
"metadata": {
"externalId": "CRM-4471"
},
"isDefault": false,
"createdAt": "2026-08-19T14:32:10Z",
"updatedAt": "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",
"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.
Body
Everything a caller may set when creating a matter.
Display name for the matter. Trimmed; whitespace alone is refused.
1 - 100"Acme / Series B Financing"
cli_ identifier of the client to file this matter under. Must belong to your organization.
"cli_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
Free-text description of the matter.
5000"Master services agreement with Acme for the 2026 platform rollout."
Standing instructions to apply to AI work on this matter. Carried into drafting and review prompts, so this is where house style and known counterparties belong.
10000"House paper. Cap liability at 12 months of fees; never accept uncapped indemnity."
Lifecycle status. Defaults to open.
open, pending, closed "open"
Practice area, for example employment. Free text.
100"commercial"
Your own sub-classification of the matter. Free text.
50"financing"
Docket or internal case reference.
100"2026-CV-0117"
Name of the responsible attorney. A name, not an identifier: this API does not resolve users.
255"Dana Whitfield"
Date the matter opened (YYYY-MM-DD).
"2026-08-19"
Date the matter closed (YYYY-MM-DD).
"2026-08-19"
Billing arrangement for the matter.
hourly, flat_fee, contingency, pro_bono "hourly"
Billing rate in billingCurrency. Send it as a JSON string to keep the value exact.
x >= 0"450.00"
ISO 4217 currency code for billingRate, three uppercase letters, for example USD.
^[A-Z]{3}$"USD"
ISO 3166-1 alpha-2 country code, two uppercase letters, for example US.
^[A-Z]{2}$"US"
Arbitrary JSON to store against the matter. Vaquill never reads it.
Response
Successful Response
A matter as this API publishes it.
Public identifier, mat_ followed by 32 hex characters. This is the value that goes in every matter-nested path.
"mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
The matter's display name.
"Acme / Series B Financing"
cli_ identifier of the client this matter belongs to, if one was set.
"cli_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
Free-text description of the matter.
"Master services agreement with Acme for the 2026 platform rollout."
Standing instructions the customer wants applied to AI work on this matter. Carried into drafting and review prompts.
"House paper. Cap liability at 12 months of fees; never accept uncapped indemnity."
Lifecycle status. Usually open, pending or closed, but published as a plain string because production holds values no UI offers. Do not branch on it without a fallback.
"open"
Practice area, for example employment or real_estate. Free text.
"commercial"
Customer's own sub-classification of the matter. Free text.
"financing"
Docket or internal case reference.
"2026-CV-0117"
Name of the attorney responsible for the matter. The underlying user id is deliberately not published.
"Dana Whitfield"
Date the matter opened (YYYY-MM-DD).
"2026-08-19"
Date the matter closed (YYYY-MM-DD). Absent while it is open.
"2026-08-19"
Billing arrangement, normally one of hourly, flat_fee, contingency or pro_bono. Published as a plain string.
"hourly"
Billing rate in billingCurrency. Rendered as a JSON STRING, not a number, so the value stays exact.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$"450.00"
ISO 4217 currency code for billingRate, for example USD.
"USD"
ISO 3166-1 alpha-2 country code, for example US. Unlike a client's country, this is a validated code.
"US"
Arbitrary JSON the customer stores against the matter. Vaquill never reads it.
True for the one matter minted at signup that unfiled work lands in. Read-only: exactly one exists per organization and this API cannot create or move it.
false
When the matter was created (RFC 3339).
"2026-08-19T14:32:10Z"
When the matter was last modified (RFC 3339).
"2026-08-19T14:32:10Z"
Was this page helpful?

