agentlyleads docs
Contacts API

The Contact object

The following fields are accepted on write via POST /api/v1/contacts.

FieldTypeNotes
idstringCUID, assigned on create (read-only)
namestring (required)Max 200 characters
titlestring | nullJob title (max 200 chars)
companystring | nullFree-text company name; auto-links to a defined Company when the name matches one (max 200 chars)
companyIdstring | nullLink directly to an existing company by ID
companyExternalIdstring | nullResolve the linked company by its externalId instead of companyId (max 200 chars) — the row fails if no match is found
emailstring | nullMax 320 characters
phonestring | nullMax 64 characters
statusstringOne of NEW, ACTIVE, CUSTOMER, DORMANT (default NEW)
lifecycleStagestring | nullOne of SUBSCRIBER, LEAD, MARKETING_QUALIFIED_LEAD, SALES_QUALIFIED_LEAD, OPPORTUNITY, CUSTOMER, EVANGELIST, OTHER
sourcestring | nullLead source, e.g. "Referral" or "Webinar" (max 200 chars)
categorystring | nullMax 200 characters
buyerTypestring | nullMax 200 characters
websitestring | nullMax 500 characters
citystring | nullMax 200 characters
statestring | nullMax 200 characters
countrystring | nullMax 200 characters
externalIdstring | nullYour system's ID — upsert key and dedupe handle (max 200 chars)
customFieldsobject | nullWorkspace-defined custom field values
createdAtstring (ISO 8601)Assigned on create (read-only)
updatedAtstring (ISO 8601)Updated on every write (read-only)

Example object

{
  "id": "cmq2abc2def3ghi4jkl5",
  "name": "Jane Buyer",
  "title": "Head of Procurement",
  "company": "Acme Corp",
  "companyId": "cmq1abc2def3ghi4jkl5",
  "email": "jane@acme.com",
  "phone": null,
  "status": "NEW",
  "lifecycleStage": "LEAD",
  "source": null,
  "category": null,
  "buyerType": null,
  "website": null,
  "city": null,
  "state": null,
  "country": null,
  "externalId": "SHOP-C-1",
  "customFields": null,
  "createdAt": "2025-06-01T12:00:00.000Z",
  "updatedAt": "2025-06-01T12:00:00.000Z"
}

Notes on specific fields

name is the only required field. All other fields are optional on write.

Company linking — three ways to associate a contact with a company, in priority order:

  1. companyId — a direct id; wins if present and valid in the workspace.
  2. companyExternalId — resolved against a company's externalId; the row fails (no contact created) if no match is found in the workspace.
  3. company — a free-text name; auto-linked when it matches an existing company's name, otherwise stored as plain text with no link.

externalId is the upsert key. A row with an externalId that matches an existing contact in the workspace updates that contact instead of creating a duplicate.

customFields are validated against the workspace's custom field definitions for the Contact entity; unknown keys are dropped.

On this page