Skip to main content

Contact Endpoints

The public API covers the contact flows most integrations need before a sequence starts.

Try It: List Contacts

Query contacts with filters such as email, firstName, lastName, phone, socialUrl, campaignId, tagIds, and roleTitle.

Try It: List Contact Tags

Download workgroup tags and use their tagId values when filtering contacts.

Try It: Get Contact

Retrieve one contact by contactId, including sequence and profile fields used by automations.

Try It: Import Contact

Import one contact with notes, tags, duplicate overwrite mode, and optional automatic update behavior.

Try It: Update Contact

Patch an existing record while keeping the same persistence behavior used by the main app.

Try It: Create Contact Note

Add one recruiter note to a contact without reimporting the whole record.

Try It: Update Contact Note

Upsert one existing note by note id when your integration owns the note lifecycle.

Try It: List Contact Documents

Download the contact CV plus all uploaded attachments in one response.

Try It: Upload Contact Document

Upload a CV or attachment through the same document storage path used by the legacy API.

Try It: Download Contact Events

Download the contact timeline across email, SMS, social interactions, sequence activity, and system events.

Try It: Trigger Enrichment

Request email, phone, social, or career enrichment when required fields are missing.

Coverage Notes

  • Use GET /contacts to search or page through records.
  • Use firstName and lastName for structured name lookup; values must be at least 2 characters and the current API intentionally does not expose free-form full-name search because structured fields keep large workgroup searches more selective.
  • Use phone when your integration only knows a candidate phone identity hint from a legacy workflow; this filter uses the indexed contact search path and requires at least 6 digits.
  • Use GET /contacts/tags to download tag ids before filtering contacts by tagIds; tag discovery is capped by the limit query parameter.
  • Add includeTotal=true only when your integration actually uses the count; those requests are slower and limited to 60 requests/minute.
  • Use GET /contacts/{contactId} when your system already stores the contact identifier.
  • Use POST /contacts/import to create or upsert one contact through the same normalization path used by Jobin imports.
  • Use POST /contacts/{contactId}/note and POST /contacts/{contactId}/note/{noteId} when your integration needs to add or maintain recruiter-facing notes separately from core contact fields.
  • Use GET /contacts/{contactId}/documents and POST /contacts/{contactId}/documents to manage CVs and supporting attachments without falling back to the legacy /v1/contacts surface.
  • Use GET /contacts/{contactId}/events to download the contact timeline in small batches.
  • Use PATCH /contacts/{contactId} for thin updates that should follow the same normalization path as the app.
  • Use enrichment only when downstream sequence steps require data that is still missing.