A valid request URL is required to generate request examples{
"success": true,
"data": {
"id": "9f8e7d6c-5b4a-4392-8170-6f5e4d3c2b1a",
"contentType": "image/jpeg",
"bytes": 286512,
"filename": "",
"direction": "in",
"conversationId": "conv_9d2f01",
"url": "https://media.example-storage.net/org_2a1b9c/9f8e7d6c.jpg?X-Expires=300&X-Signature=…",
"urlExpiresAt": "2026-09-24T16:46:08.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Get a download link for a text attachment
Get a short-lived download link for one picture, video or file sent or received by text in this workspace — one a customer sent you, one you sent, or an upload not yet sent. url is a plain HTTPS GET that needs no credentials, and it expires at urlExpiresAt, about 5 minutes after this call. Links are short-lived on purpose: anyone holding one can read the file until it expires. Do not store url — store the attachment id and call this again whenever you need a fresh link. Download the file promptly if you need to keep a copy of it. direction is in for a file a customer sent you and out for one you or your team sent (or uploaded). conversationId names the conversation the file belongs to; it is absent for an upload that no message has carried yet. Only text-message attachments are served here: a file a visitor uploaded in a web chat is 404 not_found, like an id that is unknown, belongs to another workspace, or was an upload left unsent for 24 hours.
A valid request URL is required to generate request examples{
"success": true,
"data": {
"id": "9f8e7d6c-5b4a-4392-8170-6f5e4d3c2b1a",
"contentType": "image/jpeg",
"bytes": 286512,
"filename": "",
"direction": "in",
"conversationId": "conv_9d2f01",
"url": "https://media.example-storage.net/org_2a1b9c/9f8e7d6c.jpg?X-Expires=300&X-Signature=…",
"urlExpiresAt": "2026-09-24T16:46:08.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Flowyte secret API key (Authorization: Bearer flowyte_sk_live_…). Scope-gated; is scoped to your organization — a key can never reach another tenant. The listed scopes in each operation's apiKey requirement are the scopes that key must hold. The tokenUrl is nominal: keys are minted in the dashboard.
- Token URL
- /api/v1/api-keys
Path Parameters
The attachment id — from uploadSMSMedia, a send receipt's media, an sms.message.received event's media, or a transcript turn's attachments.