Legacy endpoints

  • Overview
  • Getting started
  • Authentication
  • Rate limits & errors
  • Contacts
  • Interaction logs
  • Webhooks
  • API reference & playground
  • Changelog
  • Legacy endpoints

Legacy endpoints

Before the v1 API, integrations used the Zapier integration and the POST /customer/external endpoint. Both still work for back-compat, but are superseded by this API.

What is legacy

  • The old Zapier integration, which wrapped the same legacy endpoint.
  • POST /customer/external, which took a plaintext apiKey in the request body, was scoped per user rather than per project, and had no scopes or rate limits.

These are deprecated. They continue to work with no removal date in v1, but new integrations should use the v1 API. Sending an API key in a request body is discouraged; use the Authorization header instead.

Mapping to v1

Legacy behaviorv1 equivalent
API key in the request body (apiKey field)Authorization: Bearer cfy_live_... header (or X-API-Key).
Upsert on create (create or update in one call)Explicit POST /contacts to create, or PATCH /contacts/{contactId} to update. Check with GET /contacts?email= first.
Per-user keyPer-project (tenant-scoped) key; data access is limited to the key project.
No scopesScoped keys (contacts:read, contacts:write, interactions:write, webhooks:manage).
No rate limits120 requests/minute per key, plus 600/hour on POST /contacts.
Zapier polling for changesOutbound webhooks push events to your endpoint.

Recommendation

Build new integrations on the v1 API. Start with Getting started and Authentication. If you already depend on the legacy endpoint, plan a migration to a project-scoped key and the v1 contact endpoints when convenient.

© 2026 Craftify AI. All rights reserved.