REST API
Replies
Read classified inbox replies across all connected mailboxes, and correct a classification from the outside the same way the inbox menu does.
Updated 4 September 2026
The inbox in Seegnals gathers replies from every connected mailbox and classifies them. This endpoint gives you the same list, without the message bodies.
GET /api/v1/replies
Query: classification (interested, neutral, not_interested, unclassified, autoresponder), since (ISO 8601, on received_at), campaign_id, prospect_id, limit, cursor.
Without classification, autoresponders are left out, exactly like the All replies folder in the app. classification=autoresponder returns only those. unclassified returns replies the classifier has not processed yet.
curl "https://app.seegnals.com/api/v1/replies?classification=interested&since=2026-09-01" \
-H "Authorization: Bearer $SEEGNALS_TOKEN"
const res = await fetch("https://app.seegnals.com/api/v1/replies?classification=interested&since=2026-09-01", {
method: "GET",
headers: {
"Authorization": `Bearer ${process.env.SEEGNALS_TOKEN}`
}
});
const json = await res.json().catch(() => null);
console.log(res.status, json);
import os, requests
res = requests.get(
"https://app.seegnals.com/api/v1/replies?classification=interested&since=2026-09-01",
headers={"Authorization": f"Bearer {os.environ['SEEGNALS_TOKEN']}"},
timeout=20,
)
print(res.status_code, res.json() if res.content else None)
{
"data": [
{
"id": "20000000-0000-0000-0000-000000000001",
"prospect": { "id": "7c9e…", "email": "ada@example.com", "first_name": "Ada", "last_name": null },
"company": { "id": "1b4e…", "name": "Example Ltd", "domain": "example.com" },
"campaign": { "id": "3f2b…", "name": "Q3 outbound" },
"mailbox_id": "…",
"from_email": "ada@example.com",
"subject": "Re: Quick question",
"classification": "interested",
"classification_overridden": false,
"is_autoresponder": false,
"is_read": false,
"received_at": "2026-09-03T10:00:00.000+00:00",
"snippet": "Sounds good, let's talk next week. Does Tuesday 10:00 work?"
}
],
"next_cursor": null
}
snippetis the first 160 characters of the body on one line, the same shortening the inbox column uses. The full text is not available through the API.classification_overriddenistruewhen a person corrected the classifier in the app.prospect.emailcan benullwhen the prospect was deleted;companyisnullfor an address without a company.
If you want to be told about replies instead of polling, use the replied webhook or a new_reply / positive_reply subscription.
Errors: 400 for a bad classification, since, uuid, limit or cursor; 401; 429.
PATCH /api/v1/replies/{id}
A human correction of the classification, the same write as the menu in the inbox: classification is set, classification_overridden becomes true (the classifier will not touch this reply again, even if it is mid-flight), and the reply is marked as classified by a person. It works on a reply that has not been classified yet.
Body (max 4 KiB):
{ "classification": "interested" }
classification is one of interested, neutral, not_interested.
Response 200: the reply in the list shape, with "classification_overridden": true.
Errors: 400 `classification` must be one of: interested, neutral, not_interested.; 404 { "error": "Reply not found." } for an unknown id, another workspace’s id or a non-UUID; 401; 429.