curl --request GET \
--url https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index} \
--header 'Authorization: Bearer <token>'import requests
url = "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"index": 123,
"kind": "image",
"filename": "<string>",
"contentType": "image/jpeg",
"sizeBytes": 123,
"width": 123,
"height": 123,
"aspectRatio": 123,
"durationSeconds": 123,
"status": "ready",
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"poster": {
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"width": 123,
"height": 123
}
}{
"index": 123,
"kind": "image",
"filename": "<string>",
"contentType": "image/jpeg",
"sizeBytes": 123,
"width": 123,
"height": 123,
"aspectRatio": 123,
"durationSeconds": 123,
"status": "ready",
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"poster": {
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"width": 123,
"height": 123
}
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "messageNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 123,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Get attachment
200 with a fresh URL once ready, 202 while the media is pending or processing. A card index is invalidRequest.
curl --request GET \
--url https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index} \
--header 'Authorization: Bearer <token>'import requests
url = "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://inboxapp.com/api/v2/messages/{messageId}/attachments/{index}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"index": 123,
"kind": "image",
"filename": "<string>",
"contentType": "image/jpeg",
"sizeBytes": 123,
"width": 123,
"height": 123,
"aspectRatio": 123,
"durationSeconds": 123,
"status": "ready",
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"poster": {
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"width": 123,
"height": 123
}
}{
"index": 123,
"kind": "image",
"filename": "<string>",
"contentType": "image/jpeg",
"sizeBytes": 123,
"width": 123,
"height": 123,
"aspectRatio": 123,
"durationSeconds": 123,
"status": "ready",
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"poster": {
"url": "<string>",
"expiresAt": "2026-09-14T10:32:00.000Z",
"width": 123,
"height": 123
}
}{
"code": "invalidRequest",
"message": "<string>",
"details": {
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
]
},
"requestId": "<string>"
}{
"code": "unauthorized",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "platformNotAvailable",
"message": "<string>",
"details": {
"platform": "twitter"
},
"requestId": "<string>"
}{
"code": "messageNotFound",
"message": "<string>",
"details": null,
"requestId": "<string>"
}{
"code": "rateLimited",
"message": "<string>",
"details": {
"window": "minute",
"limit": 123,
"resetAt": "2026-09-14T10:32:00.000Z"
},
"requestId": "<string>"
}{
"code": "internal",
"message": "<string>",
"details": null,
"requestId": "<string>"
}Path Parameters
^[0-9a-z]+$x >= 0Response
An image, GIF, video, audio clip or file. Its url expires, so fetch it again when needed.
An image, GIF, video, audio clip or file. Its url expires, so fetch it again when needed.
The attachment's stable position in attachments, which GET /messages/{messageId}/attachments/{index} takes.
image, gif, video, audio, file "image/jpeg"
Width divided by height.
Video and audio only.
ready once url is usable. pending and processing while Inboxapp stores a copy: resolve the attachment again later. failed when Inboxapp gave up.
ready, pending, processing, failed Set exactly when status is ready.
When url stops working. Null for URLs that don't expire. Get a fresh URL from GET /messages/{messageId}/attachments/{index}.
"2026-09-14T10:32:00.000Z"
The still frame shown before a video plays. Video only, and only once usable.
Show child attributes
Show child attributes
Was this page helpful?