About
Everything the CRM does with contacts is available programmatically: look up and search contacts, create and update them, add notes and tags, assign teammates, and skip-trace (enrich) them for phone numbers and emails. All operations go through the developer API gateway — one endpoint, called byoperationId. If you haven’t set up a key yet, start with the
Developer API Overview.
Operations
Reading contacts (READ scope)
Writing contacts (WRITE scope)
Who may edit or delete a noteA non-admin key may only edit or delete notes the key owner authored;
anyone else’s are refused. A note whose
author.kind is AI counts as
someone else’s, so a non-admin key is refused on one — check the author before
offering to correct a note. A team-admin key can edit or delete any note.Custom fields (READ + WRITE scopes)
Custom fields are organization-wide definitions. These operations manage the
definitions themselves; you write per-contact values through the
addCustomFieldValues input on createContact and updateCustomFieldValues on
updateContact, using the customFieldId from here.
Enrichment (ADMIN scope)
Organization guardOperations that take a
contactId are org-guarded on it: a contact outside
your organization returns 403 forbidden before the operation runs. Other ids
you pass — a tag or teammate — aren’t pre-checked at the gateway; the operation
validates them as it executes and surfaces its own error (e.g. NOT_FOUND for
an unknown tag). See
Authorization for the model.Example
Find a contact, then add a note to it:Contacts also flow out of Goliath — workflow webhook steps POST a contact
payload to your URLs. See the
Contact Webhook Payload reference.