> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seamless.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# My Contact Data API

> Export every contact your organization has researched, for CRM and warehouse sync, and manage their list membership. Free.

> [!NOTE]
>
> **Endpoints** `GET /contacts` · `POST /contacts` (v2) · **Credits** free · **Versions** v1, v2

## Introduction

Every contact your organization researches, through the Seamless app, Chrome extension, API, or MCP, is saved to your org. The My Contact Data API reads those records back with full emails, phones, and job details, without spending credits. Use it to sync Seamless data into your CRM, warehouse, or product, and to manage which lists each contact belongs to.

> [!TIP]
>
> If a research poll returns `duplicate`, the contact is already in your org. Read it here instead of paying to research it again.

## AI agent prompt

```text theme={null}
Read https://docs.seamless.ai/api-catalog/my-contact-data. Using SEAMLESS_API_KEY, write a nightly job that calls
GET https://api.seamless.ai/api/client/v1/contacts with startDate/endDate covering the last 24 hours,
pages through every result, and upserts each record into my database keyed on contactId.
```

## Authentication

Send your API key in the `Token` header, or `Authorization: Bearer <token>` with [OAuth](/authentication/oauth). Create a key under [Settings → Public API](/authentication/api-keys).

## Example

```bash Export (incremental) theme={null}
curl "https://api.seamless.ai/api/client/v1/contacts?startDate=2026-10-19T00:00:00Z&endDate=2026-10-20T00:00:00Z&page=1&limit=100" \
  -H "Token: $SEAMLESS_API_KEY"
```

```python Python theme={null}
import os, requests

H = {"Token": os.environ["SEAMLESS_API_KEY"]}
page = 1
while True:
    rows = requests.get("https://api.seamless.ai/api/client/v1/contacts", headers=H,
                        params={"page": page, "limit": 100,
                                "startDate": "2026-10-19T00:00:00Z",
                                "endDate": "2026-10-20T00:00:00Z"}).json()["data"]
    if not rows:
        break
    for c in rows:
        print(c["contactId"], c.get("email"), c.get("contactPhone1"))
    page += 1
```

```bash Add to a list (v2) theme={null}
curl -X POST https://api.seamless.ai/api/client/v2/contacts \
  -H "Token: $SEAMLESS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": [48213377], "listIds": [123], "listAction": "add" }'
```

## Reference

### `GET /contacts`

| Parameter | Type | Description |
| - | - | - |
| `page` | integer | Page number to retrieve |
| `limit` | integer | Results per page |
| `startDate` | string | ISO 8601 start of the lookback window |
| `endDate` | string | ISO 8601 end of the lookback window |

### `POST /contacts` (v2)

| Parameter | Type | Description |
| - | - | - |
| `contactIds` | integer\[] | Saved contacts to update |
| `listIds` | integer\[] | Lists to apply. They must already belong to you. |
| `listAction` | string | `add` keeps existing lists, `remove` drops only these lists, `replace` sets exactly these lists |

## Response

`data` is an array of full contact records with the same fields as [Contact Research](/api-catalog/contact-enrichment): `contactId`, names, `jobTitle`, emails with validation, phones, location, company firmographics, and job history. See the [Data dictionary](/api-catalog/data-dictionary).

## Errors

| Status | Meaning |
| - | - |
| `401` | Missing or invalid API key |
| `429` | Rate limit reached |

## Related

* [My Company Data](/api-catalog/my-company-data)
* [Use case: Sync researched contacts to CRM](/use-cases/sync-researched-contacts-to-crm)
* [API reference: Get org contacts](/api-reference/v1/org-contacts/get-org-contacts)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.