Events (GET /events)
Every event we sent, or would have sent, for the last 30 days.
Every example sends your key ID and secret as CALLVIEW_KEY_ID and CALLVIEW_SECRET (see Keys and authentication). The base address is https://v2-api.callview.ai/api/v1/external.
List events
Section titled “List events”GET /events
Every event we sent or would have sent, newest first, kept 30 days. Keyset-paged: pass the last event’s id as starting_after for the next page. A test key sees only test events (livemode: false), a live key only live ones. Needs the events:read permission; a key limited to some campaigns sees only their events.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
limit |
query | integer | Default 50. 1 to 100. |
|
starting_after |
query | string | The id of the last event on the previous page. | |
type |
query | string | One event type, a comma-separated list, or the parameter repeated. | |
created[gte] |
query | string | Created at or after (ISO 8601 or unix seconds). | |
created[lte] |
query | string | Created at or before (ISO 8601 or unix seconds). | |
campaign_id |
query | string (uuid) | ||
object_id |
query | string | Only events about this call or lead. |
curl -X GET 'https://v2-api.callview.ai/api/v1/external/events' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET"const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/events', { method: 'GET', headers: { Authorization: `Basic ${auth}` },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os
import requests
res = requests.request( "GET", "https://v2-api.callview.ai/api/v1/external/events", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/events');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 A page of events, newest first
{ "data": [ { "id": "string", "type": "lead.created", "created": "2026-10-06T17:05:20Z", "livemode": true, "api_version": "2026-10-01", "data": { "object": {} }, "sample": true } ], "meta": { "next_cursor": null, "has_more": false }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 404 | not_found |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |
Get one event
Section titled “Get one event”GET /events/{id}
The same envelope a webhook carries. Needs events:read. Another organization’s event, or one of the other mode (test/live), is 404.
Parameters
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
id |
path | string | yes |
curl -X GET 'https://v2-api.callview.ai/api/v1/external/events/evt_callcompletedxxxxxxxxxxx' \ -u "$CALLVIEW_KEY_ID:$CALLVIEW_SECRET"const auth = Buffer.from(`${process.env.CALLVIEW_KEY_ID}:${process.env.CALLVIEW_SECRET}`).toString('base64');
const res = await fetch('https://v2-api.callview.ai/api/v1/external/events/evt_callcompletedxxxxxxxxxxx', { method: 'GET', headers: { Authorization: `Basic ${auth}` },});console.log(res.status, res.headers.get('request-id'));console.log(await res.text());import os
import requests
res = requests.request( "GET", "https://v2-api.callview.ai/api/v1/external/events/evt_callcompletedxxxxxxxxxxx", auth=(os.environ["CALLVIEW_KEY_ID"], os.environ["CALLVIEW_SECRET"]), timeout=30,)print(res.status_code, res.headers.get("Request-Id"))print(res.text)<?php$ch = curl_init('https://v2-api.callview.ai/api/v1/external/events/evt_callcompletedxxxxxxxxxxx');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_USERPWD => getenv('CALLVIEW_KEY_ID') . ':' . getenv('CALLVIEW_SECRET'), CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false,]);$body = curl_exec($ch);echo curl_getinfo($ch, CURLINFO_HTTP_CODE), "\n", $body, "\n";200 The event, in the same envelope a webhook carries
{ "data": { "id": "string", "type": "lead.created", "created": "2026-10-06T17:05:20Z", "livemode": true, "api_version": "2026-10-01", "data": { "object": {} }, "sample": true }}Errors
| Status | Codes |
|---|---|
| 400 | invalid_request |
| 401 | authentication_failed |
| 403 | permission_denied |
| 404 | not_found |
| 429 | rate_limited, too_many_concurrent_requests |
| 500 | internal_error |