curl --request POST \
--url https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"eventDate": "2026-08-19",
"title": "Master Services Agreement"
}
'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events"
payload = {
"eventDate": "2026-08-19",
"title": "Master Services Agreement"
}
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({eventDate: '2026-08-19', title: 'Master Services Agreement'})
};
fetch('https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events', 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/{matterId}/chronology/events"
payload := strings.NewReader("{\n \"eventDate\": \"2026-08-19\",\n \"title\": \"Master Services Agreement\"\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": "evt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"documentId": "doc_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"documentName": "value",
"eventDate": "2026-08-19",
"eventDateEnd": "2026-08-19",
"eventDateApproximate": false,
"eventType": "signed",
"category": "commercial",
"significance": "high",
"title": "Master Services Agreement",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"parties": [
"value"
],
"tags": [
"saas",
"buyer-side"
],
"sourceText": "value",
"sourcePageNumber": 1,
"isAiExtracted": false,
"confidenceScore": 1,
"isPrimaryInGroup": 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",
"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 chronology event
Add an event by hand. 201 with the stored event.
Created events are recorded as not AI-extracted and carry no confidence, which
is what keeps them distinguishable from the pipeline’s output forever.
documentId is optional; when given it must name a document in THIS matter.
curl --request POST \
--url https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"eventDate": "2026-08-19",
"title": "Master Services Agreement"
}
'import requests
url = "https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events"
payload = {
"eventDate": "2026-08-19",
"title": "Master Services Agreement"
}
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({eventDate: '2026-08-19', title: 'Master Services Agreement'})
};
fetch('https://api.vaquill.ai/workspace/v1/matters/{matterId}/chronology/events', 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/{matterId}/chronology/events"
payload := strings.NewReader("{\n \"eventDate\": \"2026-08-19\",\n \"title\": \"Master Services Agreement\"\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": "evt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"matterId": "mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"documentId": "doc_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6",
"documentName": "value",
"eventDate": "2026-08-19",
"eventDateEnd": "2026-08-19",
"eventDateApproximate": false,
"eventType": "signed",
"category": "commercial",
"significance": "high",
"title": "Master Services Agreement",
"description": "Master services agreement with Acme for the 2026 platform rollout.",
"parties": [
"value"
],
"tags": [
"saas",
"buyer-side"
],
"sourceText": "value",
"sourcePageNumber": 1,
"isAiExtracted": false,
"confidenceScore": 1,
"isPrimaryInGroup": 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",
"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.
Body
A hand-entered event.
Created events are recorded as NOT ai-extracted and carry no confidence, which is what keeps them distinguishable from the pipeline's output forever.
When it happened. Required; there is no undated event.
"2026-08-19"
A one-line description.
1 - 500"Master Services Agreement"
The end of a date range.
"2026-08-19"
True when the date is your best estimate.
false
What happened.
signed, executed, filed, served, effective, expired, terminated, notice_sent, notice_received, payment, hearing, meeting, judgment, order, correspondence, amended, enacted, published, decided, incident, referenced, founded, incorporated, appointed, resigned, acquired, launched, awarded, approved, registered, commenced, completed, transferred, invested, dissolved, announced, renewed, other "signed"
Which swim lane it joins.
contract_event, court_filing, correspondence, payment_financial, deadline_notice, meeting_hearing, legislative, case_law, historical, corporate, regulatory, employment, milestone, other "contract_event"
The longer account, when there is one.
5000"Master services agreement with Acme for the 2026 platform rollout."
Who was involved, by name.
50["value"]
Free-form labels of your own.
30["saas", "buyer-side"]
high, medium or low.
high, medium, low "high"
Link the event to a doc_ document in this matter. The reference is checked against your organization AND this matter before it is written.
"doc_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
The page in that document this event comes from.
x >= 11
Response
Successful Response
One dated event on the matter's timeline.
evt_ identifier.
"evt_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
The mat_ matter this event belongs to.
"mat_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
When it happened.
"2026-08-19"
True when the source dated this loosely ('early 2024').
false
What happened, for example signed, filed or hearing. Read it as an open string: the column carries no constraint, so production can hold a value this API would refuse on a write.
"signed"
The swim lane it groups into. Open, as eventType is.
"commercial"
high, medium or low. Open, as above.
"high"
A one-line description of the event.
"Master Services Agreement"
False for an event created through this API or typed into the product.
false
False when this event duplicates another and was not chosen as the representative. Pass primaryOnly=true to drop the non-primary copies.
false
When the row was written.
"2026-08-19T14:32:10Z"
When it last changed.
"2026-08-19T14:32:10Z"
The doc_ document this event was extracted from, or null for an event somebody entered by hand.
"doc_9f2c8b1e4a7d43c9b6e0f1a2c3d4e5f6"
That document's filename, resolved at read time.
"msa-acme-v3.docx"
The end of the range, for an event that spans days.
"2026-08-19"
The longer account, when there is one.
"Master services agreement with Acme for the 2026 platform rollout."
Who was involved.
["value"]
Free-form labels.
["saas", "buyer-side"]
The passage the event was extracted from. Locate this string in the document's text to find it; there is no offset to trust.
"This Master Services Agreement is entered into as of 19 August 2026 between Acme Corporation, a Delaware corporation, and the Supplier identified on the signature page."
The page the passage was found on, when it could be resolved.
1
0 to 1 for an extracted event, null for a manual one.
1
Was this page helpful?

