Documents API
Create, manage, and download documents via the Crove REST API.
Documents API
Create documents from templates, manage their lifecycle, send invitations, and download PDFs.
List documents
Retrieve all documents in your workspace.
GET /api/external/v1/documentsResponse
{
"data": [
{
"id": "doc_abc123",
"name": "Contract - Acme Corp",
"templateId": "tmpl_xyz789",
"completed": false,
"sent": true,
"createdAt": "2026-02-10T09:00:00Z",
"updatedAt": "2026-02-15T14:30:00Z"
}
]
}Example
curl -X GET https://crove.app/api/external/v1/documents \
-H "Authorization: Bearer YOUR_API_KEY"Get document
Retrieve details of a specific document including response data.
GET /api/external/v1/documents/{id}Path parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Document ID |
Response
{
"data": {
"id": "doc_abc123",
"name": "Contract - Acme Corp",
"templateId": "tmpl_xyz789",
"completed": false,
"sent": true,
"responseData": {
"clientName": "Acme Corporation",
"contractAmount": 50000,
"startDate": "2026-03-01"
},
"respondents": [
{
"id": "resp_001",
"email": "john@acme.com",
"role": "Client",
"submitted": true,
"submittedAt": "2026-02-12T10:15:00Z"
}
],
"createdAt": "2026-02-10T09:00:00Z",
"updatedAt": "2026-02-15T14:30:00Z"
}
}Example
curl -X GET https://crove.app/api/external/v1/documents/doc_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Create document
Create a new document from a template. You can optionally pre-fill variable values.
POST /api/external/v1/documentsRequest body
| Field | Type | Required | Description |
|---|---|---|---|
templateId | string | Yes | ID of the template to use |
name | string | No | Document name (auto-generated from template if omitted) |
data | object | No | Pre-fill variable values as key-value pairs |
Request example
{
"templateId": "tmpl_xyz789",
"name": "Contract - Acme Corp - March 2026",
"data": {
"clientName": "Acme Corporation",
"clientEmail": "john@acme.com",
"contractAmount": 50000,
"startDate": "2026-03-01",
"paymentTerms": "Net 30"
}
}Response
{
"data": {
"id": "doc_new456",
"name": "Contract - Acme Corp - March 2026",
"templateId": "tmpl_xyz789",
"completed": false,
"sent": false,
"createdAt": "2026-02-18T10:00:00Z"
}
}Example
curl -X POST https://crove.app/api/external/v1/documents \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "tmpl_xyz789",
"name": "Contract - Acme Corp",
"data": {
"clientName": "Acme Corporation",
"contractAmount": 50000
}
}'Update document
Update a document's properties or response data.
PATCH /api/external/v1/documents/{id}Path parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Document ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | No | New document name |
data | object | No | Update variable values |
Example
curl -X PATCH https://crove.app/api/external/v1/documents/doc_abc123 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Contract - Acme Corp (Revised)"}'Delete document
Permanently delete a document.
DELETE /api/external/v1/documents/{id}Path parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Document ID |
Example
curl -X DELETE https://crove.app/api/external/v1/documents/doc_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Download PDF
Download the completed document as a PDF file.
GET /api/external/v1/documents/{id}/pdfPath parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Document ID |
Response
Returns the PDF file as binary data with Content-Type: application/pdf.
Example
curl -X GET https://crove.app/api/external/v1/documents/doc_abc123/pdf \
-H "Authorization: Bearer YOUR_API_KEY" \
-o document.pdfThe PDF is generated on-demand if it doesn't already exist. For large documents, the first request may take a few seconds.
Send invitations
Send email invitations to recipients for a document.
POST /api/external/v1/documents/{id}/sendPath parameters
| Parameter | Type | Description |
|---|---|---|
id | string | Document ID |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
recipients | array | Yes | List of recipients |
recipients[].email | string | Yes | Recipient email address |
recipients[].role | string | No | Role name from the template |
recipients[].message | string | No | Custom message in the invitation email |
Request example
{
"recipients": [
{
"email": "john@acme.com",
"role": "Client",
"message": "Please review and sign the attached contract."
},
{
"email": "jane@acme.com",
"role": "Witness"
}
]
}Response
{
"data": {
"success": true,
"message": "Invitations sent",
"invitationsSent": 2
}
}Example
curl -X POST https://crove.app/api/external/v1/documents/doc_abc123/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
{
"email": "john@acme.com",
"role": "Client",
"message": "Please review and sign."
}
]
}'Common workflows
Create and send in one flow
# Step 1: Create document with pre-filled data
RESPONSE=$(curl -s -X POST https://crove.app/api/external/v1/documents \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "tmpl_xyz789",
"name": "Contract - New Client",
"data": {"clientName": "New Client Inc."}
}')
# Step 2: Extract document ID
DOC_ID=$(echo $RESPONSE | jq -r '.data.id')
# Step 3: Send for signing
curl -X POST "https://crove.app/api/external/v1/documents/$DOC_ID/send" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [{"email": "client@example.com", "role": "Client"}]
}'