# Feeding signup & usage data (ingest API)

**Category:** [CRM](https://help.totalctrl.app/hc/totalctrl/totalctrl-help-center/en-US/categories/crm-1)
**Updated:** 2026-08-19

## Keep CRM contacts in sync with your product

Event and segment journeys rely on data your product knows — when someone signed up, when they last logged in, their plan. Your backend keeps CRM contacts current by calling the **contacts ingest API** with an API token:

POST /api/v1/crm/contacts/ingest
Authorization: Bearer <api-token>
{
  "external_uid": "user_123",
  "email": "sam@example.com",
  "first_name": "Sam",
  "plan": "pro",
  "signup_at": "2026-01-15T10:00:00Z",
  "last_seen_at": "2026-06-17T08:30:00Z"
}

The contact is matched by `external_uid` first, then `email`, and created if neither exists. Call it on sign-up (this fires the *contact created* trigger, enrolling welcome journeys) and again on each login to refresh `last_seen_at` (which powers win-back segments). Dates accept ISO-8601 or epoch. For full request/response details and code samples, see [the API integration guide](journeys-api-integration).

---

## Related Articles

- [What are Journeys?](https://help.totalctrl.app/en-US/articles/journeys-overview)
- [CRM Overview](https://help.totalctrl.app/en-US/articles/crm-overview)
- [CRM overview](https://help.totalctrl.app/en-US/articles/crm-overview-1)
- [Work pipelines and deals](https://help.totalctrl.app/en-US/articles/crm-pipelines-and-deals)
- [Running Email Campaigns](https://help.totalctrl.app/en-US/articles/running-email-campaigns)

---
[← Back to TotalCtrl Help Center](https://help.totalctrl.app/en-US/)