WhatsAble
API v1Conversations

Read a conversation's timeline

gethttps://api.whatsable.app/v1/conversations/{id}/timeline
Build a request to copy

This page never sends a request. Fill in the fields, then copy the request and run it from your server.

Request
curl -X GET 'https://api.whatsable.app/v1/conversations/string/timeline'

Returns what happened in a conversation, newest first: its messages, notes, AI decisions, AI status and bot changes, and label changes.

AI entries need ai:read, and label entries need contacts:read. Without that scope, a page leaves them out. Naming their types in types without it answers 403 insufficient_scope.

Authorization

bearerAuth
headerAuthorizationBearer <nfy_live_<32 characters>>

An API key from Settings > API keys, sent as Authorization: Bearer <key>.

Path Parameters

id*string

The conversation id.

Length1 <= length <= 64

Query Parameters

limit?integer

How many items to return, 1 to 100.

Range1 <= value <= 100
Default25
cursor?string

The next_cursor of the previous page. An expired or malformed cursor answers 400 invalid_cursor.

Length1 <= length <= 512
types?string

Only these entry types, comma-separated, such as message,ai_decision. An unknown type answers 400 validation_failed. AI types need ai:read, label types contacts:read. Naming one without its scope answers 403 insufficient_scope.

Lengthlength <= 256
created_after?string

Only entries after this instant. For polling.

Formatdate-time

Response Body

A page of timeline entries, newest first.

application/json
  1. response
object*string
data*array<|||||||>
has_more*boolean

True when another page follows this one.

next_cursor*|

Pass as cursor to read the next page. Null on the last page. Valid for 24 hours.

Example Request
curl -X GET 'https://api.whatsable.app/v1/conversations/string/timeline'
Example Response
{  "object": "list",  "data": [    {      "object": "timeline_entry",      "id": "dec_cm2v8d1a00001qz8h6n7o8p9q",      "type": "ai_decision",      "at": "2026-10-28T13:40:12Z",      "actor": {        "type": "ai_bot",        "id": "cm2v8b1a00001qz8h3j4k5l6m",        "name": "Sales"      },      "ai_decision": {        "trigger": "reply",        "outcome": "replied",        "reason_code": null,        "reasoning": "Asked for the Pro price, which is in the knowledge.",        "labels": [          {            "action": "add",            "label_id": "cm2v8l1a00001qz8h2b3c4d5e",            "name": "Lead",            "outcome": "applied"          }        ],        "files": [],        "message_id": "cm2v8m1a00001qz8h0p1q2r3s",        "attempt": null,        "decided_at": "2026-10-28T13:40:05Z"      }    }  ],  "has_more": true,  "next_cursor": "string"}