Contacts
Read and write contacts, custom fields, and GDPR erasure
Erasure is irreversible and needs its own scope. See Contacts.
contactApi
ScopeCONTACTS_READ
One contact by id (API key: contacts:read). Null if absent.
Arguments
idID!RequiredReturns
idID!displayNameStringavatarUrlStringphoneStringemailStringchannels[String!]!erasedBoolean!externalIdStringquery {
contactApi(id: "…") { id displayName avatarUrl phone email }
}contactApiByExternalId
ScopeCONTACTS_READ
One contact by your own externalId (API key: contacts:read). Null if absent.
Arguments
externalIdString!RequiredReturns
idID!displayNameStringavatarUrlStringphoneStringemailStringchannels[String!]!erasedBoolean!externalIdStringquery {
contactApiByExternalId(externalId: "…") { id displayName avatarUrl phone email }
}contactsApi
ScopeCONTACTS_READ
List/search contacts (API key: contacts:read).
Arguments
filterContactApiFilterInput\{\}.paginationContactApiPaginationInput\{\}.sortDirSortDirectionContactApiFilterInput
searchStringexternalIdStringphoneStringchannelContactChannelcreatedAfterDateTimecreatedBeforeDateTimeContactApiPaginationInput
firstIntafterIDReturns
query {
contactsApi(filter: { … }, pagination: { … }, sortDir: ASC) { items nextCursor totalCount }
}createContactApi
ScopeCONTACTS_MANAGE
Create a contact (API key: contacts:manage).
Arguments
ContactApiWriteInput
externalIdStringdisplayNameStringfirstNameStringlastNameStringphoneStringlanguageStringfields[ContactApiFieldInput!]channelContactApiChannelInputReturns
idID!displayNameStringavatarUrlStringphoneStringemailStringchannels[String!]!erasedBoolean!externalIdStringmutation {
createContactApi(input: { … }) { id displayName avatarUrl phone email }
}createPeopleFieldDefinition
ScopeCONTACTS_MANAGE
Arguments
CreateFieldDefinitionDto
keyString!RequirednameString!RequiredtypeString!RequiredvisibilityStringgroupFieldGroupisRequiredBooleandisplayOrderFloatpinnedToChatViewBooleandescriptionStringoptions[String!]defaultValueJSONisSystemFieldBooleanisReadOnlyBooleanReturns
_idString!organisationIdString!keyString!nameString!typeFieldType!descriptionStringvisibilityFieldVisibility!groupFieldGroupisRequiredBoolean!isSystemFieldBoolean!isReadOnlyBoolean!options[String!]defaultValueJSONdisplayOrderFloat!pinnedToChatViewBooleancreatedAtDateTime!updatedAtDateTime!mutation {
createPeopleFieldDefinition(input: { … }) { _id organisationId key name type }
}deletePeopleFieldDefinition
ScopeCONTACTS_MANAGE
Arguments
idString!RequiredReturns
Boolean!mutation {
deletePeopleFieldDefinition(id: "…")
}deletePeopleFieldValue
ScopeCONTACTS_MANAGE
Arguments
peopleIdString!RequiredfieldIdString!RequiredReturns
Boolean!mutation {
deletePeopleFieldValue(peopleId: "…", fieldId: "…")
}eraseContact
ScopeCONTACTS_ERASE
Irreversibly erase a Contact's PII (GDPR right to erasure). Org-scoped. Member (role) OR an API key with the CONTACTS_ERASE scope.
Arguments
EraseInput
contactIdID!RequiredorganisationIdID!RequiredreasonStringReturns
contactIdID!erasedAtDateTime!affectedCounts[EraseCount!]!erasureLogIdID!ErasureLog._id this erasure was recorded under.mutation {
eraseContact(input: { … }) { contactId erasedAt affectedCounts erasureLogId }
}getPeopleFieldDefinitions
ScopeCONTACTS_READ
Arguments
filterPeopleFieldsFilterDtoPeopleFieldsFilterDto
peopleIdStringkeys[String!]typeStringvisibilityStringgroups[FieldGroup!]onlyPinnedBooleanincludeSystemFieldsBooleanincludeCustomFieldsBooleanapplyPrivacyMaskingBooleanReturns
_idString!organisationIdString!keyString!nameString!typeFieldType!descriptionStringvisibilityFieldVisibility!groupFieldGroupisRequiredBoolean!isSystemFieldBoolean!isReadOnlyBoolean!options[String!]defaultValueJSONdisplayOrderFloat!pinnedToChatViewBooleancreatedAtDateTime!updatedAtDateTime!query {
getPeopleFieldDefinitions(filter: { … }) { _id organisationId key name type }
}getPeopleFieldValue
ScopeCONTACTS_READ
Arguments
idString!RequiredReturns
_idString!peopleIdString!organisationIdString!valueJSONcreatedAtDateTime!updatedAtDateTime!fieldKeyStringquery {
getPeopleFieldValue(id: "…") { _id peopleId organisationId field value }
}getPeopleFieldValues
ScopeCONTACTS_READ
Arguments
peopleIdString!RequiredfilterPeopleFieldsFilterDtoPeopleFieldsFilterDto
peopleIdStringkeys[String!]typeStringvisibilityStringgroups[FieldGroup!]onlyPinnedBooleanincludeSystemFieldsBooleanincludeCustomFieldsBooleanapplyPrivacyMaskingBooleanReturns
_idString!peopleIdString!organisationIdString!valueJSONcreatedAtDateTime!updatedAtDateTime!fieldKeyStringquery {
getPeopleFieldValues(peopleId: "…", filter: { … }) { _id peopleId organisationId field value }
}isWhatsAppIdEditable
ScopeCONTACTS_READ
Check if WhatsApp ID field is editable for a contact
Arguments
peopleIdString!RequiredReturns
Boolean!query {
isWhatsAppIdEditable(peopleId: "…")
}previewErase
ScopeCONTACTS_ERASE
Read-only preview of what an eraseContact call would affect for a Contact, without mutating anything. Org-scoped. Member (role) OR an API key with the CONTACTS_ERASE scope.
Arguments
EraseInput
contactIdID!RequiredorganisationIdID!RequiredreasonStringReturns
contactIdID!willErase[EraseCount!]!warnings[String!]!query {
previewErase(input: { … }) { contactId willErase warnings }
}setPeopleFieldValue
ScopeCONTACTS_MANAGE
Arguments
SetFieldValueDto
peopleIdString!RequiredfieldIdString!RequiredvalueJSONReturns
_idString!peopleIdString!organisationIdString!valueJSONcreatedAtDateTime!updatedAtDateTime!fieldKeyStringmutation {
setPeopleFieldValue(input: { … }) { _id peopleId organisationId field value }
}updateContactApi
ScopeCONTACTS_MANAGE
Update a contact's fields (API key: contacts:manage). NotFound if absent or in another org.
Arguments
idID!RequiredContactApiWriteInput
externalIdStringdisplayNameStringfirstNameStringlastNameStringphoneStringlanguageStringfields[ContactApiFieldInput!]channelContactApiChannelInputReturns
idID!displayNameStringavatarUrlStringphoneStringemailStringchannels[String!]!erasedBoolean!externalIdStringmutation {
updateContactApi(id: "…", input: { … }) { id displayName avatarUrl phone email }
}updatePeopleFieldDefinition
ScopeCONTACTS_MANAGE
Arguments
idString!RequiredUpdateFieldDefinitionDto
keyStringnameStringtypeStringvisibilityStringisRequiredBooleandisplayOrderFloatgroupFieldGrouppinnedToChatViewBooleandescriptionStringoptions[String!]defaultValueJSONReturns
_idString!organisationIdString!keyString!nameString!typeFieldType!descriptionStringvisibilityFieldVisibility!groupFieldGroupisRequiredBoolean!isSystemFieldBoolean!isReadOnlyBoolean!options[String!]defaultValueJSONdisplayOrderFloat!pinnedToChatViewBooleancreatedAtDateTime!updatedAtDateTime!mutation {
updatePeopleFieldDefinition(id: "…", input: { … }) { _id organisationId key name type }
}upsertContactApi
ScopeCONTACTS_MANAGE
Create or update a contact idempotently by your own externalId (API key: contacts:manage).
Arguments
ContactApiWriteInput
externalIdStringdisplayNameStringfirstNameStringlastNameStringphoneStringlanguageStringfields[ContactApiFieldInput!]channelContactApiChannelInputReturns
idID!displayNameStringavatarUrlStringphoneStringemailStringchannels[String!]!erasedBoolean!externalIdStringmutation {
upsertContactApi(input: { … }) { id displayName avatarUrl phone email }
}