CLI
curl --request GET \
--url 'https://api.minimo.it/public/v1/inbox/threads/1234?limit=5' \
--header 'Authorization: Bearer {{BEARER_TOKEN}}'const res = await fetch('https://api.minimo.it/public/v1/inbox/threads/1234?limit=5', {
method: 'GET',
headers: {
'Authorization': 'Bearer {{BEARER_TOKEN}}',
},
});
const { data } = await res.json();
console.log(data);import requests
res = requests.get(
'https://api.minimo.it/public/v1/inbox/threads/1234?limit=5',
headers={'Authorization': 'Bearer {{BEARER_TOKEN}}'},
)
print(res.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.minimo.it/public/v1/inbox/threads/{threadId}",
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://api.minimo.it/public/v1/inbox/threads/{threadId}"
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://api.minimo.it/public/v1/inbox/threads/{threadId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.minimo.it/public/v1/inbox/threads/{threadId}")
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{
"data": {
"thread": {
"threadId": 1234,
"status": "open",
"unreadMessages": 2,
"pinned": false,
"channels": [
"whatsapp"
],
"contact": {
"contactId": 5678,
"name": "Mario Rossi",
"email": null,
"phone": "393331234567"
},
"assignedTo": null,
"needsHuman": false,
"ai": {
"state": "active",
"since": null
},
"snoozedUntil": null,
"updatedAt": "2026-11-13T09:00:00.000Z",
"lastMessage": {
"messageId": 90112,
"direction": "inbound",
"channel": "whatsapp",
"subject": null,
"preview": "Do you ship to Sicily?",
"at": "2026-11-13T09:00:00.000Z"
}
},
"messages": [
{
"messageId": 90110,
"direction": "outbound",
"channel": "whatsapp",
"at": "2026-11-13T08:58:00.000Z",
"subject": null,
"text": "Hi Mario, how can we help?",
"from": {
"name": "Assistant",
"address": null
},
"status": "sent",
"failureReason": null,
"seenAt": "2026-11-13T08:59:00.000Z",
"templateName": null,
"media": null,
"reaction": null
},
{
"messageId": 90112,
"direction": "inbound",
"channel": "whatsapp",
"at": "2026-11-13T09:00:00.000Z",
"subject": null,
"text": "Do you ship to Sicily?",
"from": {
"name": "Mario Rossi",
"address": null
},
"media": null,
"reaction": null
}
],
"olderMessages": true
}
}{
"status": "FAIL",
"message": "WHATSAPP_WINDOW_CLOSED",
"userMessage": "WhatsApp allows free text only within 24 hours of the contact's last WhatsApp message. Send an approved template instead."
}Threads
Get Thread
A thread and its most recent messages, every channel together, oldest to newest
GET
/
public
/
v1
/
inbox
/
threads
/
{threadId}
CLI
curl --request GET \
--url 'https://api.minimo.it/public/v1/inbox/threads/1234?limit=5' \
--header 'Authorization: Bearer {{BEARER_TOKEN}}'const res = await fetch('https://api.minimo.it/public/v1/inbox/threads/1234?limit=5', {
method: 'GET',
headers: {
'Authorization': 'Bearer {{BEARER_TOKEN}}',
},
});
const { data } = await res.json();
console.log(data);import requests
res = requests.get(
'https://api.minimo.it/public/v1/inbox/threads/1234?limit=5',
headers={'Authorization': 'Bearer {{BEARER_TOKEN}}'},
)
print(res.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.minimo.it/public/v1/inbox/threads/{threadId}",
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://api.minimo.it/public/v1/inbox/threads/{threadId}"
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://api.minimo.it/public/v1/inbox/threads/{threadId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.minimo.it/public/v1/inbox/threads/{threadId}")
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{
"data": {
"thread": {
"threadId": 1234,
"status": "open",
"unreadMessages": 2,
"pinned": false,
"channels": [
"whatsapp"
],
"contact": {
"contactId": 5678,
"name": "Mario Rossi",
"email": null,
"phone": "393331234567"
},
"assignedTo": null,
"needsHuman": false,
"ai": {
"state": "active",
"since": null
},
"snoozedUntil": null,
"updatedAt": "2026-11-13T09:00:00.000Z",
"lastMessage": {
"messageId": 90112,
"direction": "inbound",
"channel": "whatsapp",
"subject": null,
"preview": "Do you ship to Sicily?",
"at": "2026-11-13T09:00:00.000Z"
}
},
"messages": [
{
"messageId": 90110,
"direction": "outbound",
"channel": "whatsapp",
"at": "2026-11-13T08:58:00.000Z",
"subject": null,
"text": "Hi Mario, how can we help?",
"from": {
"name": "Assistant",
"address": null
},
"status": "sent",
"failureReason": null,
"seenAt": "2026-11-13T08:59:00.000Z",
"templateName": null,
"media": null,
"reaction": null
},
{
"messageId": 90112,
"direction": "inbound",
"channel": "whatsapp",
"at": "2026-11-13T09:00:00.000Z",
"subject": null,
"text": "Do you ship to Sicily?",
"from": {
"name": "Mario Rossi",
"address": null
},
"media": null,
"reaction": null
}
],
"olderMessages": true
}
}{
"status": "FAIL",
"message": "WHATSAPP_WINDOW_CLOSED",
"userMessage": "WhatsApp allows free text only within 24 hours of the contact's last WhatsApp message. Send an approved template instead."
}Reading does not mark the thread as read: use Update Thread with
markRead: true.
Reading older messages
The response holds the latestlimit messages (30 by default). When olderMessages is true, call again with
beforeMessageId set to the first messageId you received.
Message fields
textis always plain text, also for emails; passincludeHtml=trueto get the email HTML ashtmltoo.status,failureReason,seenAtandtemplateNameare on outbound messages only.mediaholds a WhatsApp image, audio, video or document;attachmentsthe files of an email.
Permissions
The API key needs the Inbox permission. A thread of another workspace answers404, like a missing one.