AttachmentsClient
Client for uploading file attachments to Twist.
Attachments are uploaded independently, then referenced by passing the returned
Attachment into the attachments array of comments.createComment,
conversationMessages.createMessage, and similar calls.
Extends
BaseClient
Constructors
Constructor
new AttachmentsClient(config: ClientConfig): AttachmentsClient;
Parameters
| Parameter | Type |
|---|---|
config | ClientConfig |
Returns
AttachmentsClient
Inherited from
BaseClient.constructor
Properties
| Property | Modifier | Type |
|---|---|---|
apiToken | readonly | string |
baseUrl? | readonly | string |
customFetch? | readonly | CustomFetch |
defaultVersion | readonly | "v3" | "v4" |
Methods
getBaseUri()
protected getBaseUri(version?: "v3" | "v4"): string;
Gets the base URI for API requests with proper trailing slash handling. This method fixes the trailing slash bug that occurred when using custom baseUrl.
Parameters
| Parameter | Type | Description |
|---|---|---|
version? | "v3" | "v4" | Optional API version override. Defaults to the configured version or 'v3' |
Returns
string
Base URI with guaranteed trailing slash for proper URL resolution
Inherited from
BaseClient.getBaseUri
getLinkBaseUrl()
protected getLinkBaseUrl(): string | undefined;
Base URL for entity web links, or undefined to use getFullTwistURL's default web app.
Returns
string | undefined
Inherited from
BaseClient.getLinkBaseUrl
upload()
upload(args: UploadAttachmentArgs): Promise<{
[key: string]: unknown;
attachmentId: string;
description?: string | null;
duration?: string | null;
fileName?: string | null;
fileSize?: number | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
title?: string | null;
underlyingType?: string | null;
uploadState?: string | null;
url?: string | null;
urlType: string;
video?: string | null;
videoAutoPlay?: boolean | null;
videoType?: string | null;
}>;
Uploads a file and returns the created Attachment.
Mirrors the canonical multipart upload used by twist-web: POST /attachments/upload
with the file binary plus file_name, file_size, attachment_id, and
underlying_type form fields.
Parameters
| Parameter | Type | Description |
|---|---|---|
args | UploadAttachmentArgs | The file to upload and optional metadata. |
Returns
Promise<{
[key: string]: unknown;
attachmentId: string;
description?: string | null;
duration?: string | null;
fileName?: string | null;
fileSize?: number | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
title?: string | null;
underlyingType?: string | null;
uploadState?: string | null;
url?: string | null;
urlType: string;
video?: string | null;
videoAutoPlay?: boolean | null;
videoType?: string | null;
}>
The created attachment, ready to attach to a comment or message.
Example
import { readFile } from 'node:fs/promises'
const attachment = await api.attachments.upload({
file: await readFile('./diagram.png'),
fileName: 'diagram.png',
})
await api.comments.createComment({
threadId: 789,
content: 'See attached',
attachments: [attachment],
})