Getting started

Make a first successful contacts request against the public v2 API

View as Markdown

Base URLs

  • Production: https://app.askelephant.ai/api
  • Staging: https://app-staging.askelephant.ai/api

Authentication header

Use one of these Authorization header styles:

$Authorization: Bearer <access-token>
$Authorization: sk-apik_<id>.<secret>

When using an API key, send the raw sk-apik_... value. Do not prepend Bearer.

First request

$curl --request GET \
> --url 'https://app.askelephant.ai/api/v2/contacts?limit=2&filter[updated_at][gt]=2026-03-01T00:00:00.000Z&order_by=updated_at:desc' \
> --header 'Authorization: sk-apik_<id>.<secret>' \
> --header 'Accept: application/json'

Expected response shape:

1{
2 "object": "list",
3 "data": [
4 {
5 "object": "contact",
6 "id": "cnt_01ABC...",
7 "first_name": "Ada",
8 "last_name": "Lovelace",
9 "description": "Primary customer contact for analytical projects.",
10 "company": {
11 "id": "cmp_01HQXVB4Y9Y0Q6P0QH5GX2CT7T",
12 "object": "company"
13 },
14 "emails": [
15 {
16 "email": "ada@analytical.engine",
17 "is_primary": true
18 }
19 ],
20 "phone_numbers": [
21 {
22 "phone_number": "+1-555-0100",
23 "is_primary": true
24 }
25 ],
26 "time_zone": "America/Los_Angeles",
27 "created_at": "2026-03-01T12:00:00Z",
28 "updated_at": "2026-03-04T18:25:00Z"
29 }
30 ],
31 "has_more": false,
32 "next_cursor": null
33}

What to do next

  1. Save a contact id from the response.
  2. Fetch that contact directly with GET /v2/contacts/{contact_id}.
  3. Explore the same pattern on companies, users, tags, or engagements.
  4. Move to create, update, or delete workflows from the API Reference when your read path is working.
  5. Follow next_cursor when has_more is true and keep your last updated_at checkpoint for the next incremental sync run.

Useful next pages