---
title: "One-call prospect intake: save a LinkedIn profile (e.g. 'john-doe'), resolve/create the contact, apply tags, a note, cus"
method: POST
path: "/api/v1/contacts/intake"
tags: ["contacts"]
---

# One-call prospect intake: save a LinkedIn profile (e.g. 'john-doe'), resolve/create the contact, apply tags, a note, cus

`POST /api/v1/contacts/intake`

## Request

- Base URL: `https://crispy.sh`
- URL: `https://crispy.sh/api/v1/contacts/intake`
- Auth: HTTP bearer

## Request body

- object
  - `identifier` string, required: Who to intake: LinkedIn provider_id ('ACoAA...'), slug ('john-doe'), or full URL. Saved + resolved into the CRM.
  - `lookup` object: Structured contact identifier. Resolver picks the highest-priority field per RESOLVER-09 (crispy_id > linkedin_provider_id > external_id > linkedin_url > email).
    - `crispy_id` string: Crispy contact UUID (cnt_ prefixed or raw UUID)
    - `linkedin_provider_id` string: LinkedIn provider ID (ACoAA... or ACwA... variant)
    - `linkedin_url` string: LinkedIn URL or slug (e.g. 'john-doe' or full https URL)
    - `email` string: Email address (lowercased before resolution)
    - `external_id` string: Namespaced external ID (e.g. HubSpot contact ID). Requires external_id_namespace.
    - `external_id_namespace` string: Namespace for external_id (e.g. 'hubspot', 'salesforce', 'clay')
  - `first_name` string: Contact first-name hint (written on create).
  - `last_name` string: Contact last-name hint (written on create).
  - `email` string: Email hint; also usable as a resolver identifier.
  - `company` string: Company hint (written on create).
  - `title` string: Title hint (written on create).
  - `tags` string[]: Tag names to apply; created if missing (idempotent).
  - `note` string: Note body to attach to the contact.
  - `custom_fields` object[]: Typed custom fields to set. Each item identifies the definition by name OR id, plus a value (validated by kind).
    - `name` string: Custom field definition name (resolved to id). Provide name or id.
    - `id` string: Custom field definition id. Takes precedence over name.
    - `value` string, required: Value to store; validated against the field kind.
  - `enroll_in` object: Optionally enroll the captured contact. Provide campaign (slug) and/or list (slug). Enrollment is policy-checked + idempotent.
    - `campaign` string: Campaign slug to enroll the new contact into (policy-gated).
    - `list` string: List slug to add the new contact to.

## Response `200`

Success

## Other responses

- `401`: Missing or expired API key
- `403`: Insufficient key scope or permission denied
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/crispy/apis/crispy-rest-api.md) · [All operations](https://skmtc.dev/crispy/apis/crispy-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crispy/apis/crispy-rest-api/revisions/6bed0974d9ce?raw)
