Guides
The event feed
Every event of the last 30 days, in order — to catch up on webhooks you missed, or instead of receiving them at all.
Every event the platform sends to webhook receivers is also kept for 30 days
in a feed you can read: the same events, with the same ids, whether or not anybody received them.
Use it to catch up after your receiver was down, or read it instead of running a receiver at all.
Reading needs conversations:read.
#!/bin/sh
# Read the event feed. Keep the last page's next_cursor and send it back as cursor= next time.
curl -sS --fail-with-body -X GET "https://api.aigently.ai/v1/events?type=conversation.ended&limit=50" \
-H "Authorization: Bearer $AIGENTLY_API_KEY"
Read it in order
Events come oldest first. Read until has_more is false, keep the last page's
next_cursor, and next time send it back as cursor: you get every event since, once. Events from
the last minute wait for a later page, so one still being written is never skipped.
Each event is what a receiver would have been sent:
{
"object": "event",
"id": "0f9a7c2e-5b1d-4e8a-9c3f-2d6b8e1a4c7f",
"event": "conversation.ended",
"created_at": "2026-10-07T09:14:03.120394+00:00",
"livemode": true,
"revision": 6,
"data": { "object": "conversation", "id": "5f0c9a52-…", "status": "completed", "…": "…" }
}
An event you already received through a webhook has the same id here, so keep the ids you have
handled and skip them. As with webhooks, keep the conversation with the higher revision.
Narrow it
| Parameter | |
|---|---|
type |
One event type, like conversation.ended. Repeat it for several. |
conversation_id |
Only the events about one conversation. |
created_after |
Only events from this time on — where to start the first time. |
What a key sees
The feed follows the same rules as everything else a key reads: its own projects and agents, and its
own side of test mode. conversation.transcript events are listed only for a
key with transcripts:read.