Sender API
Documents
Upload an input once, then pass its document_id when you run a published plan.
Use POST /documents when a plan run needs a file. The upload is multipart,
not base64 JSON.
POST https://api.keepable.co/sender/v2/documents
Authorization: Bearer {{KEEPABLE_TOKEN}}
Idempotency-Key: 3204bd75-fbb5-4e20-8190-53a7f22083dc
Content-Type: multipart/form-data; boundary=----keepable
------keepable
Content-Disposition: form-data; name="file"; filename="payslip-march.pdf"
Content-Type: application/pdf
%PDF-1.4…
------keepable
Content-Disposition: form-data; name="name"
March payslip
------keepable--The required part is file. name is an optional display name of at most 120
characters and defaults to the filename.
{
"document_id": "doc_01J8ZQ4T",
"name": "March payslip",
"media_type": "application/pdf",
"size_bytes": 184320,
"sha256": "9f2a1c…",
"created_at": "2026-07-14T09:12:00Z"
}Pass the resulting id in document_ids when you run the plan:
{
"document_ids": ["doc_01J8ZQ4T"]
}The public API does not browse connected storage, download arbitrary sender documents, or delete uploads. Those are Workspace operations. Upload only the inputs the published plan expects; unattached uploads are swept automatically.
Files submitted by a recipient are retrieved through the response-specific endpoint, not through a generic document URL. See Collecting responses.