Attachments
Upload a file to attach to an outgoing message, download attachments and delete unsent ones.
Upload a pending attachment for an email message
POST
/v1/attachmentsattachments.createMultipart field file and form field messageId (msg_, email only). Caps stay at 5 files, 8 MiB each, and 10 MiB pending. Requires InboxReplyAccess.
Parameters
Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise
400 workspace_required).Request body
multipart/form-data, optional.
Field
Type
Required
Description
file
string (binary)
optional
messageId
string
optional
Response 201
data is a AttachmentModel.
Field
Type
Description
id
string
messageId
string
fileName
string
contentType
string
sizeBytes
integer (int64)
Request
curl -X POST "https://api.ken.so/v1/attachments" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \ -F "file=@./file" \ -F 'messageId=msg_ZW1haWw6NDAyMjg0LjJAZXhhbXBsZS5jb20'
Response 201
{
"success": true,
"data": {
"id": "string",
"messageId": "msg_ZW1haWw6NDAyMjg0LjJAZXhhbXBsZS5jb20",
"fileName": "string",
"contentType": "string",
"sizeBytes": 1
}
}Download attachment bytes
GET
/v1/attachments/{attachmentId}/contentattachments.get-contentA malformed id is not_found. inline=true is only honored for an inline image. Requires ReadAccess.
Parameters
Name
In
Type
Required
Description
attachmentId
In: path
string
required
inline
In: query
boolean
optional
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise
400 workspace_required).Response 200
The body is a string (binary).
Request
curl -X GET "https://api.ken.so/v1/attachments/att_ZW1haWw6NDAyMjg0LjJAZXhhbXBsZS5jb206MQ/content" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 200
"<binary>"
Delete a pending attachment that has not been sent
DELETE
/v1/attachments/{attachmentId}attachments.deleteReturns 204. A malformed id is not_found. Requires InboxReplyAccess.
Parameters
Name
In
Type
Required
Description
attachmentId
In: path
string
required
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise
400 workspace_required).Response 204
Request
curl -X DELETE "https://api.ken.so/v1/attachments/att_ZW1haWw6NDAyMjg0LjJAZXhhbXBsZS5jb206MQ" \ -H "Authorization: Bearer $KEN_API_KEY" \ -H "Ken-Version: 2026-11-02" \ -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID"
Response 204
HTTP/1.1 204 No Content