# Contacts API



<EndpointIndex
  names={[
  	'addContact',
  	'getContact',
  	'lookupContact',
  	'listContacts',
  	'updateContact',
  	'validateContact',
  	'mergeContacts',
  ]}
  titles={{
  	addContact: 'Create contact',
  	getContact: 'Fetch contact',
  	lookupContact: 'Lookup contact',
  	listContacts: 'List contacts',
  	updateContact: 'Update contact',
  	validateContact: 'Validate contact',
  	mergeContacts: 'Merge contacts',
  }}
/>

Create contact [#create-contact]

<ApiEndpoint name="addContact" title="Create contact" />

<ApiSchema name="ContactCreateRequest" />

<ApiSchema name="Contact" />

Fetch contact [#fetch-contact]

<ApiEndpoint name="getContact" title="Fetch contact" />

Lookup contact [#lookup-contact]

<ApiEndpoint name="lookupContact" title="Lookup contact" />

List contacts [#list-contacts]

<ApiEndpoint name="listContacts" title="List contacts" />

<ApiSchema name="ListPageResponseContact" />

Update contact [#update-contact]

<ApiEndpoint name="updateContact" title="Update contact" />

<ApiSchema name="ContactUpdateRequest" />

Validate contact [#validate-contact]

<ApiEndpoint name="validateContact" title="Validate contact" />

Merge contacts [#merge-contacts]

<ApiEndpoint name="mergeContacts" title="Merge contacts" />

<ApiSchema name="ContactsMergeRequest" />


## API Reference

POST /contact/{tenantLocator}/contacts — addContact
Tags: contacts-controller
Permissions: write
Parameters:
  tenantLocator (uuid, path, required)
Request body (ContactCreateRequest):
Responses:
  200 — OK

GET /contact/{tenantLocator}/contacts/{locator} — getContact
Tags: contacts-controller
Permissions: read
Parameters:
  tenantLocator (uuid, path, required)
  locator (ulid, path, required)
Responses:
  200 — OK

GET /contact/{tenantLocator}/contacts/lookup/{locator} — lookupContact
Tags: contacts-controller
Permissions: read
Parameters:
  tenantLocator (uuid, path, required)
  locator (ulid, path, required)
Responses:
  200 — OK

GET /contact/{tenantLocator}/contacts/{staticLocator}/list — listContacts
Tags: contacts-controller
Permissions: read
Parameters:
  tenantLocator (uuid, path, required)
  staticLocator (ulid, path, required)
  offset (integer, query)
  count (integer, query)
Responses:
  200 — OK

PATCH /contact/{tenantLocator}/contacts/{locator} — updateContact
Tags: contacts-controller
Permissions: write
Parameters:
  tenantLocator (uuid, path, required)
  locator (ulid, path, required)
Request body (ContactUpdateRequest):
Responses:
  200 — OK

PATCH /contact/{tenantLocator}/contacts/{locator}/validate — validateContact
Tags: contacts-controller
Permissions: write
Parameters:
  tenantLocator (uuid, path, required)
  locator (ulid, path, required)
Responses:
  200 — OK

PATCH /contact/{tenantLocator}/contacts/merge — mergeContacts
Tags: contacts-controller
Permissions: write
Parameters:
  tenantLocator (uuid, path, required)
Request body (ContactsMergeRequest):
Responses:
  200 — OK

ContactCreateRequest
Properties:
  type (string, required)
  region (string)
  data (map<string, object>, required)
  autoValidate (boolean, required)

Contact
Properties:
  locator (ulid, required)
  staticLocator (ulid, required)
  contactState (Enum draft | validated | discarded, required)
  type (string, required)
  data (map<string, object>, required)
  region (string)
  createdAt (datetime, required)
  createdBy (uuid, required)
  updatedAt (datetime)
  updatedBy (uuid)
  validationResult (ValidationResult)
  anonymizedAt (datetime)

ListPageResponseContact
Properties:
  listCompleted (boolean, required)
  items (Contact[], required)

ContactUpdateRequest
Properties:
  type (string)
  region (string)
  setData (map<string, object>, required)
  removeData (map<string, object>, required)

ContactsMergeRequest
Properties:
  contactLocators (ulid[], required)
  mergeToContact (ulid, required)