Core API — Documents Module#
Praemunio API • Version 1 • Developer DocumentationThe Documents module provides complete management for file assets: multipart upload, status state transitions, secure payload streaming, pre-signed download URLs, metadata updates, archiving/restoration, moving/renaming, and public sharing links.| Key | Value |
|---|
| Base URL | https://api.praemunio.org/api/v1 |
| Format | JSON / Multipart Form-Data |
| Authentication | Bearer Token (Authorization: Bearer <access_token>) |
| Required Scopes | documents:read, documents:write, documents:delete, documents:share |
Table of contents#
1. Overview & Document Lifecycle#
A Document transitions through distinct statuses during its lifecycle:| Status | Description |
|---|
draft | File payload registered, waiting for complete transmission |
pending | Uploaded, queued for virus scanning and cryptographic anchoring |
processing | In-flight calculation of cryptographic hashes |
completed | Successfully stored and anchored |
failed | Processing failed due to validation or storage error |
archived | Moved to cold archive storage |
deleted | Marked for deletion |
2. Ingestion & Retrieval Endpoints#
POST /documents/upload#
Uploads one or more binary files to a workspace and optional folder using multipart/form-data.Scope Required: documents:write
Query Parameters: workspace_id (required UUID), folder_id (optional UUID)
cURL Example#
Response (200 OK)#
{
"success": true,
"message": "Document uploaded successfully",
"result": {
"id": "d4e5f6a7-b8c9-0123-def0-456789012345",
"name": "contract.pdf",
"sizeBytes": 1048576,
"status": "pending",
"workspaceId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
"folderId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"createdAt": "2026-09-30T11:30:00.000Z"
},
"errors": null,
"except": null
}
GET /documents/details#
Fetches metadata for a document by ID.Scope Required: documents:read
Query Parameter: document_id (required UUID)
GET /documents#
Lists all documents in a workspace.Scope Required: documents:read
Query Parameter: workspace_id (required UUID)
GET /documents/stream#
Streams the document binary file directly over HTTP.Scope Required: documents:read
Query Parameter: document_id (required UUID)
GET /documents/download#
Generates a secure, pre-signed download URL with a configurable Time-To-Live (TTL).Scope Required: documents:read
Query Parameters: document_id (required UUID), ttl (seconds, default 3600)
Response (200 OK)#
{
"success": true,
"message": "Signed URL generated successfully",
"result": {
"downloadUrl": "https://storage.praemunio.io/vault/d4e5f6a7-b8c9?token=exp_1700000",
"expiresAt": "2026-09-30T12:30:00.000Z",
"ttlSeconds": 3600
},
"errors": null,
"except": null
}
POST /documents/public-link#
Generates a public sharing URL for third-party access without requiring API key authorization.Scope Required: documents:share
Query Parameter: document_id (required UUID)
Request Body#
Response (200 OK)#
{
"success": true,
"message": "Public link generated successfully",
"result": {
"shareUrl": "https://share.praemunio.io/d/pub_8f9a0b1c2d3e",
"expiresAt": "2026-10-07T11:30:00.000Z"
},
"errors": null,
"except": null
}
3. Lifecycle & Modification Endpoints#
PUT /documents/update#
Updates document title, description, or folder.Scope Required: documents:write
POST /documents/rename#
Scope Required: documents:write
Request Body#
{
"documentId": "d4e5f6a7-b8c9-0123-def0-456789012345",
"newName": "Final_Executed_Contract_2026.pdf"
}
POST /documents/move#
Moves a document to a different folder or workspace.Scope Required: documents:write
Request Body#
{
"documentId": "d4e5f6a7-b8c9-0123-def0-456789012345",
"folderId": "e5f6a7b8-c9d0-1234-ef01-567890123456"
}
POST /documents/status#
Updates a document's status.Scope Required: documents:write
Request Body#
{
"documentId": "d4e5f6a7-b8c9-0123-def0-456789012345",
"status": "completed"
}
POST /documents/status/batch#
Updates statuses for multiple documents in a single request.Scope Required: documents:write
Request Body#
{
"documentIds": [
"d4e5f6a7-b8c9-0123-def0-456789012345",
"f6a7b8c9-d0e1-2345-f012-678901234567"
],
"status": "archived"
}
POST /documents/archive#
Scope Required: documents:write
Request Body#
{
"documentId": "d4e5f6a7-b8c9-0123-def0-456789012345",
"reason": "Retention policy limit reached"
}
POST /documents/restore#
Restores an archived document.Scope Required: documents:write
Request Body#
{
"documentId": "d4e5f6a7-b8c9-0123-def0-456789012345"
}
DELETE /documents/delete#
Scope Required: documents:delete
HTTP Code: 204 No Content
Request Body#
{
"document_id": "d4e5f6a7-b8c9-0123-def0-456789012345"
}
4. Client Integration Example#
5. Error Handling Reference#
| HTTP Status | Code | Cause | Action |
|---|
400 Bad Request | invalid_request | Invalid status transition or missing UUID | Check status lifecycle rules |
403 Forbidden | insufficient_scopes | Scope missing for operation | Check documents:read/write/share |
404 Not Found | document_not_found | Document ID not found | Verify document ID |
Support#
Modified at 2026-09-30 10:46:40