Keepable
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.