API Reference
Integrate Kitedoc into your workflow. Upload, share, and track documents programmatically.
https://api.kitedoc.comAuthentication
All API requests require an API key sent via the Authorization header. You can create and manage API keys from your account settings.
curl https://api.kitedoc.com/documents \
-H "Authorization: Bearer sd_live_your_api_key_here"API keys are prefixed with sd_live_ for production keys. Keep your keys secret — do not expose them in client-side code or public repositories.
Rate Limits
API requests are rate-limited per API key to ensure fair usage.
| Window | Limit |
|---|---|
| Per minute | 60 requests |
| Per hour | 1,000 requests |
Rate limit status is included in every response via headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1700000000When the limit is exceeded, you'll receive a 429 Too Many Requests response. Wait until the X-RateLimit-Reset timestamp (Unix epoch seconds) before retrying.
Errors
All errors follow a consistent shape with an error object containing message, code, and status_code.
{
"error": {
"message": "Document not found",
"code": "not_found",
"status_code": 404
}
}| Status | Code | Description |
|---|---|---|
| 400 | bad_request | Invalid request parameters |
| 401 | unauthorized | Missing or invalid API key |
| 403 | permission_denied | Insufficient permissions or scope |
| 404 | not_found | Resource does not exist |
| 422 | validation_error | Request body failed validation |
| 429 | rate_limit_exceeded | Too many requests |
Scopes
API keys are scoped to limit access. Assign only the scopes your integration needs.
| Scope | Description |
|---|---|
documents:read | List and retrieve documents |
documents:write | Upload, update, and delete documents |
sharing:read | View sharing settings |
sharing:write | Update sharing settings (visibility, password, permissions) |
analytics:read | View document analytics and events |
signatures:read | View signature requests and status |
signatures:write | Create, send, and manage signature requests |
contacts:read | List and search contacts |
contacts:write | Create, update, and delete contacts |
Documents
Upload, list, update, and delete documents.
/documents/uploadUpload a new document. Accepts PDF, DOCX, PPTX, and XLSX files (max 50 MB). The file is processed asynchronously — poll the document status until it becomes 'ready'.
/documentsList your documents. Supports pagination with offset/limit and text search.
/documents/{slug}Get a single document by its slug.
/documents/{slug}Update a document's title or description.
/documents/{slug}Soft-delete a document. Returns 204 on success.
/documents/{slug}/upload-versionUpload a new version of a document. Requires a paid plan with versioning.
/documents/{slug}/versionsList all versions of a document.
/documents/{slug}/versions/{version_id}/preview-urlGet a presigned URL to preview a specific version's PDF.
/documents/{slug}/versions/{version_id}/restoreRestore a document to a previous version.
/documents/foldersCreate a new folder.
/documents/folders/{slug}Rename a folder.
/documents/folders/{slug}Delete a folder. Documents inside are moved to the parent folder.
/documents/moveMove documents and folders to a target folder (or root).
Upload a document
curl -X POST https://api.kitedoc.com/documents/upload \
-H "Authorization: Bearer sd_live_your_api_key_here" \
-F "[email protected]" \
-F "title=Q4 Proposal"Response:
{
"id": "01912345-6789-7abc-def0-123456789abc",
"slug": "xK9mP2qL",
"title": "Q4 Proposal",
"original_filename": "proposal.pdf",
"file_type": "pdf",
"file_size_bytes": 2048576,
"page_count": 0,
"status": "pending",
"version": 1,
"created_at": "2026-02-14T10:00:00Z",
"updated_at": "2026-02-14T10:00:00Z",
"thumbnail_url": null
}List documents
curl "https://api.kitedoc.com/documents?offset=0&limit=20&search=proposal" \
-H "Authorization: Bearer sd_live_your_api_key_here"Response:
{
"items": [ ... ],
"total": 42,
"offset": 0,
"limit": 20
}Sharing
Control document visibility, password protection, and viewer permissions.
/sharing/{slug}Get sharing settings for a document.
/sharing/{slug}Update sharing settings — visibility, password, download/copy/embed permissions.
/sharing/{slug}/sharesShare a document with recipients via email. Creates share links and sends notification emails.
/sharing/{slug}/sharesList active shares for a document.
/sharing/{slug}/shares/{share_id}Revoke a share. Returns 204 on success.
/sharing/{slug}/shares/{share_id}/resendResend the share notification email to the recipient.
/sharing/{slug}/shares/{share_id}/linkGet the shareable URL for a specific share.
Update sharing settings
curl -X PATCH https://api.kitedoc.com/sharing/xK9mP2qL \
-H "Authorization: Bearer sd_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"visibility": "public",
"allow_download": false,
"password": "secret123"
}'Response:
{
"visibility": "public",
"has_password": true,
"allow_download": false,
"allow_indexing": true,
"allow_text_copy": true,
"allow_embedding": true,
"embed_domain_whitelist": []
}Analytics
Retrieve view and download analytics for your documents. Requires a paid subscription.
/analytics/overviewGet an aggregate analytics summary across all your documents. Supports days, start_date, and end_date query parameters.
/analytics/summary/{slug}Get analytics summary for a specific document with views, downloads, top countries, and referrers.
/analytics/events/{slug}List individual view and download events with pagination.
Get analytics summary
curl https://api.kitedoc.com/analytics/summary/xK9mP2qL \
-H "Authorization: Bearer sd_live_your_api_key_here"Response:
{
"total_views": 1250,
"unique_views": 834,
"total_downloads": 56,
"avg_duration": 127,
"views_by_day": [
{ "date": "2026-02-14", "views": 42, "unique_views": 31 }
],
"top_countries": { "US": 420, "GB": 185, "DE": 93 },
"top_referrers": { "https://example.com": 150 },
"prev_total_views": 980,
"prev_unique_views": 650,
"prev_total_downloads": 41
}Signatures
Send documents for e-signature, track signing progress, and download signed PDFs. Requires a paid subscription.
/signatures/create-and-sendCreate a signature request with recipients and fields, then send it immediately. This is the recommended flow for API integrations.
/signaturesList your signature requests. Supports pagination with offset/limit and status filtering.
/signatures/{slug}Get a single signature request by its slug, including recipient statuses.
/signatures/{slug}/voidVoid a pending signature request. Requires a reason.
/signatures/{slug}/remindSend reminder emails to recipients who haven't signed yet.
/signatures/{slug}/downloadGet presigned URLs for the signed PDF and audit trail PDF.
/signatures/{slug}/audit-trailGet the full audit trail for a signature request.
/signatures/{slug}/fieldsSet or replace all signature fields for a draft request.
Create and send a signature request
All position and size values (x_position, y_position, width, height) are percentages (0–100) relative to the page dimensions. Origin is top-left.
curl -X POST https://api.kitedoc.com/signatures/create-and-send \
-H "Authorization: Bearer sd_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"document_slug": "xK9mP2qL",
"title": "NDA — Acme Corp",
"message": "Please sign this NDA at your earliest convenience.",
"recipients": [
{ "email": "[email protected]", "name": "Alice Smith", "role": "signer" },
{ "email": "[email protected]", "name": "Bob Jones", "role": "signer" }
],
"fields": [
{
"recipient_email": "[email protected]",
"field_type": "signature",
"page_number": 1,
"x_position": 10,
"y_position": 80,
"width": 30,
"height": 6
},
{
"recipient_email": "[email protected]",
"field_type": "signature",
"page_number": 1,
"x_position": 10,
"y_position": 88,
"width": 30,
"height": 6
}
]
}'Response:
{
"id": "01912345-6789-7abc-def0-123456789abc",
"slug": "rT4kW8nQ",
"title": "NDA — Acme Corp",
"message": "Please sign this NDA at your earliest convenience.",
"status": "pending",
"document": {
"slug": "xK9mP2qL",
"title": "NDA Template",
"page_count": 3
},
"recipients": [
{
"id": "...",
"email": "[email protected]",
"name": "Alice Smith",
"role": "signer",
"status": "sent",
"signed_at": null
},
{
"id": "...",
"email": "[email protected]",
"name": "Bob Jones",
"role": "signer",
"status": "sent",
"signed_at": null
}
],
"deadline": null,
"completed_at": null,
"created_at": "2026-02-15T10:00:00Z",
"updated_at": "2026-02-15T10:00:00Z"
}Contacts
Manage your contact list. Contacts are auto-created when you share documents, but you can also manage them directly.
/contactsList your contacts. Supports pagination with offset/limit.
/contacts/suggestSearch contacts by name or email. Returns up to 10 matches. Use the q query parameter.
/contactsCreate a new contact with email, name, company, and notes.
/contacts/{contact_id}Update a contact's name, company, or notes.
/contacts/{contact_id}Delete a contact. Returns 204 on success.
Create a contact
curl -X POST https://api.kitedoc.com/contacts \
-H "Authorization: Bearer sd_live_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"name": "Alice Smith",
"company": "Acme Corp"
}'Response:
{
"id": "01912345-6789-7abc-def0-123456789abc",
"email": "[email protected]",
"name": "Alice Smith",
"company": "Acme Corp",
"notes": "",
"last_contacted_at": null,
"created_at": "2026-02-15T10:00:00Z"
}