API Key
You must first create an API Key in Assembly. It is located under “Manage Integrations”, then scroll to the bottom and click “Manage API Keys”. Here, you can see your existing keys, their names and expiration. You can delete existing ones. When creating a new API key, the name must be unique in your organization. Once the key has been created, you will be shown a one-time dialog box with your new API key. You should copy this down somewhere safe — we will not show this again. If you lose your API key, you will need to make a new one. For these endpoints, set theAuthorization header to your API key value directly (for example Authorization: <API_KEY>). Do not add a Bearer prefix; the full header value is validated as the key.
Sending Events
Here is the API endpoint for sending events to Assembly. The only required field is query:email, source_specific_id, or id (the Assembly ID). We will match the user to an existing Assembly customer/contact based on these fields. If no matching Assembly user exists, the user will be created. Other optional fields include name, username, image_url.
If you want to match the interaction to a specific company account, please include the company_source_specific_id or the company_id (the company’s Assembly ID).
You can also pass in other optional fields like the title, original timestamp, and additional attributes.
Source Specific ID
You can include asource_specific_id to give the ticket a unique identifier. This is useful for:
- Deduplication: Prevent duplicate tickets from being created
- Replying: Use this ID later to add replies to the ticket via the
/interactions/replyendpoint
source_specific_id:
Full Example with All Fields
- 400: Invalid request - missing title, file too large, couldn’t be opened, etc.
- 401: Invalid API Key or expired API Key
- 503: Assembly server error has been logged and our team has been notified
Rate Limiting
There is a rate limit of 30 events per second. If you exceed this, you will receive a 429 response code. If you need a higher rate, please let us know.Create Interaction Reply
POST /interactions/reply
Creates a new reply/message for an existing ticket. Supports multiple ticket identification methods and file attachments.Query Parameters
Exactly one of the following is required:| Parameter | Type | Description |
|---|---|---|
id | string | Assembly ULID of the ticket to reply to |
source_specific_id | string | Source-specific ID of the ticket to reply to |
Headers
Content-Type: multipart/form-data(required for file uploads)Authorization: <API_KEY>(required; raw key, noBearerprefix)
Request Body (multipart/form-data)
| Field | Type | Required | Description |
|---|---|---|---|
content | string | Yes | The reply message content |
source_specific_id | string | No | Unique identifier for this reply (for deduplication) |
original_timestamp | string | No | Original timestamp in RFC3339 format |
user | object | Yes | User information object |
files | file[] | No | File attachments (multipart) |
files_image_url | string | No | Comma-separated URLs of images to attach |
User Object
| Field | Type | Required | Description |
|---|---|---|---|
id | string | No* | User ID |
name | string | No | User name |
email | string | No* | User email |
source_specific_id | string | No | User’s source-specific ID |
id or email is required. If only email is provided, it will be used as the user identifier.
Ticket Identification
The endpoint requires exactly one query parameter for ticket identification:id- Assembly ULID of the ticketsource_specific_id- Source-specific ID of the ticket
Example Request (with Assembly ULID)
Example Request (with source_specific_id)
Example Request (with file uploads)
Response
| Field | Type | Description |
|---|---|---|
created_history_id | string | ULID of the created history record |
Error Responses
400 Bad Request
404 Not Found
409 Conflict (Duplicate)
413 Payload Too Large
Important Notes
- File Size Limit: 32MB per file
- Supported File Types: Any file type can be uploaded
- Deduplication: Duplicate
source_specific_idvalues are rejected for Slack/Community Slack sources - User Requirement: User object with
user.idis now mandatory (no anonymous users) - Query Parameter Exclusivity: Exactly one of
idorsource_specific_idmust be provided, not both - Rate Limiting: Subject to rate limiting (60 requests per minute per API key/IP)