create_case
Every field the create_case tool accepts, and what it returns — the same payload as POST /v3/api/cases.
The general-purpose tool for creating cases. It accepts the same payload as POST /v3/api/cases and runs through the same handler — an MCP call and a REST call with the same body behave identically. This page lists the fields so the MCP section stands alone; the REST page carries the deeper narrative and response examples.
The schema is strict: unknown fields are rejected, not ignored, and every problem in a payload comes back at once, each with a field path.
The company is fixed by the connection (the OAuth grant or the API key) — it can never be chosen in the payload. When neither senderId nor senderEmail is given, the case is attributed to the connected user, and the result says so with a sender-defaulted-to-key-creator notice. The REST endpoint's publicUrls query flag is not available over MCP.
Top-level fields
| Field | Type | Notes |
|---|---|---|
title | string, 1–300 | Required |
referenceId | string ≤ 200 | Your own external reference |
state | open | draft | Default open. open requires recipients and documents and sends the case; draft creates an incomplete case for later |
folder | string ≤ 200 | Folder name in the dashboard |
senderId | ObjectId | Attribute the case to this company member (wins over senderEmail) |
senderEmail | Attribute by address instead | |
messageTemplateId | ObjectId | Message template for the invitation |
presetId | ObjectId | Preset that fills unset settings (and overrides locked fields) |
tags | array ≤ 500 | Template-tag values for the documents |
settings | object | See Settings — defaults apply even when omitted |
recipients | array ≤ 100 | Required non-empty when state is open |
documents | array ≤ 20 | Required non-empty when state is open |
Recipient
| Field | Type | Notes |
|---|---|---|
name | string, 1–200 | Required |
email | Required unless type is sms | |
phone | string ≤ 40 | Required when type is sms |
signing | boolean | Default true; false makes the recipient a viewer |
group | int 0–100 | Signing order — group 0 signs first, group 1 is asked when group 0 is done. Default 0 |
type | email | sms | eboks | How the signing link is delivered. Default email |
position | string ≤ 200 | Shown under the signature |
needsCpr | boolean | Require CPR validation. Default false |
cpr | string ≤ 20 | Pre-filled CPR for validation |
signingSchema | string | A specific eID (acr value) this recipient must use |
redirectUrl | https URL | Where the signer lands after signing |
eboks | object | e-Boks delivery details (see e-Boks object) |
message | string ≤ 2000 | Personal message to this recipient |
messageTemplateId | ObjectId | Per-recipient message template |
Document
| Field | Type | Notes |
|---|---|---|
name | string, 1–300 | Required |
url | http(s) URL | Fetch the file from here |
content | base64 string | The file itself, ≤ 20 MB decoded (data-URL prefixes are stripped) |
documentId | ObjectId | A document from your NextSign library — see list_documents |
versionId | ObjectId | A specific library version — requires documentId |
tags | object | Values for a library .docx's fields, keyed by path. Checked against the document exactly as in create_case_from_document |
signObligated | boolean | Must be signed. Default true |
documentMustBeRead | boolean | Must be opened before signing. Default false |
signatories | int array | Indexes into recipients — which of them sign this document. Default: all signers |
Exactly one of url, content, or documentId must be set per document. For a case built around a single library template, create_case_from_document is the simpler call.
Settings
| Field | Type | Notes |
|---|---|---|
autoSend | boolean | Send to recipients on creation. Default true |
language | string | Case language (da, en, …) |
template | int 1–99 | Email template number |
expiresInDays | int 1–3650 | Signing deadline |
message | string ≤ 5000 | Message shown to all recipients |
attachSignedFiles | boolean | Attach signed PDFs to the completion mail |
signingSchemas | string array ≤ 50 | Allowed eIDs for the whole case (see Signing Schemas) |
logo | string ≤ 8 MB | Base64 image or URL for the case logo |
reminders | object | { send, amount 1–20, daysBetween 1–365, autoSend } |
integrations.microsoft.returnPath | string | Site-relative SharePoint path for signed files, e.g. /sites/MySite/Shared Documents |
Example call
{
"title": "Consulting agreement — Q3",
"recipients": [
{ "name": "Jane Jensen", "email": "jane@example.com" }
],
"documents": [
{ "name": "Agreement.pdf", "url": "https://example.com/agreement.pdf" }
],
"settings": { "expiresInDays": 14 }
}Result
The tool returns JSON. On success, the same case object as the REST endpoint — id, state, recipients with delivery status, documents, and any notices:
{
"case": {
"id": "665f1c2ab4d746b7bb394001",
"title": "Consulting agreement — Q3",
"state": "open",
"recipients": [ { "name": "Jane Jensen", "delivery": { "email": "sent" } } ]
}
}On failure the result is marked as an error and explains itself:
{
"error": "validation-failed",
"details": [
{ "field": "recipients.0.email", "message": "recipient email is required" }
]
}A malformed payload that doesn't match the schema at all is rejected by the protocol layer as an invalid params error before the tool runs — same information, different envelope.