POST
/api/public/v1/vault-documentsCreate a Vault document or folder
Creates a folder, a rich-text document, or a spreadsheet. Uploading a **file** is not this endpoint. Files go through a two-step signed upload in the console, because a request body large enough for one does not survive the platform’s limit. Everything else about a file — renaming, moving, tagging, archiving — works through this API.
Required scope
The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Settings → Company → API, and to a teammate under Employee → Permissions.
vault:admin
Request Body
| Property | Type | Description |
|---|---|---|
name | string | |
type | string | FILE is not creatable here — see above. |
parentId | string | Which folder it goes in. Omit for the Vault root. |
content | string | The body, for a DOCUMENT or SPREADSHEET. |
description | string | |
tags | array | Up to 20 strings. |
POSTExample request
curl
curl -X POST "https://www.pxb.app/api/public/v1/vault-documents" \
-H "Authorization: Bearer your_access_token" \
-H "Content-Type: application/json" \
-d '{
"name": "Board minutes",
"type": "DOCUMENT",
"parentId": "vdoc_0001"
}'200Example response
json
{
"message": "Vault document created successfully!",
"content": {
"document": {
"id": "vdoc_4410",
"referenceId": 318,
"name": "Board minutes",
"type": "DOCUMENT",
"parentId": "vdoc_0001",
"description": null,
"fileSize": 2418123,
"mimeType": "application/pdf",
"tags": [
"board"
],
"isSystem": false,
"systemType": null,
"createdById": "emp_12ab",
"updatedById": null,
"createdAt": "2026-08-12T11:00:00.000Z",
"updatedAt": "2026-08-12T11:00:00.000Z",
"archivedAt": null
}
}
}In the console
The same thing done by hand, for anyone comparing the API against the screen they already use.