Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has coderelated_record_not_found.
An Enrik API key, sent as Authorization: Bearer <key>. A key reaches public operations only, and only those whose scopes it holds. A few parameters need a scope beyond their operation’s, which the parameter names. The scopes:
setup:read: Read the workspace setup and its company profile.
setup:run: Change the setup: confirm the company profile, authorize sponsored drafting and background company research, choose what to set up and complete setup.
workspace:read: Read the workspace’s own profile: its health summary and setup state.
crm:read: Read companies with their signals, contacts and the saved views over them.
crm:write: Create, update and restore companies and contacts, and create, update and delete saved views.
crm:delete: Delete companies and contacts.
twin:read: Read the Company Twin: structured company knowledge and its signals.
discovery:read: Read ICP profiles, ICP assessments, discovery briefs, discovery jobs, candidates and the signal library.
discovery:write: Create and change ICP profiles, discovery briefs and signal-definition drafts, and review discovery candidates.
discovery:run: Create, start and cancel discovery jobs, and edit a draft one. Uses provider budget.
enrichment:read: Read the enrichment configuration and its results, including a record’s enrichment, formula and custom-API cells.
enrichment:run: Launch and cancel enrichment. Spends enrichment credits.
automation:read: Read workflows and agents with their run history, including a record’s agent cells.
automation:run: Run existing workflows and agents.
exports:read: Read export jobs and the fields an export can carry.
exports:run: Create, preview, start, cancel and archive CSV exports of companies, contacts and candidates, and download the file. Also needs crm:read. Delivering an export to a webhook destination stays in the app.
integrations:read: Read connections, field mappings, CRM sync jobs and webhook destinations.
webhooks:read: Read webhook subscriptions, the event types they can name and their delivery log.
webhooks:write: Subscribe a receiver URL to webhook events; edit, test, pause, resume and archive a subscription and rotate its signing secret; redeliver an event. Only workspace owners and admins can grant it.
reporting:read: Read analytics and dashboards.
assistant:read: Read the Assistant: its threads, messages and pending approvals.
assistant:run: Converse with the Assistant. Uses the workspace’s AI quota.
assistant:write: Approve or reject the changes the Assistant proposes.
Body
application/json
A contact to create or update, found by its email. A field left out keeps its value.
The key: the e-mail address, stored lower-cased and compared ignoring case. The live contact with this address is updated, or a contact is created when there is none.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Enrik","colors":{"primary":"#4f46e5","light":"#818cf8","dark":"#4338ca"},"favicon":"https://mintlify.s3.us-west-1.amazonaws.com/enrik/favicon.svg","navbar":{"links":[{"href":"mailto:support@enrik.ai","label":"Contact support"}]},"footer":{"socials":{"website":"https://enrik.ai"}},"contextual":{"options":["copy"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"enrik","hasAudioNarration":false,"actualSubdomain":"enrik","customDomains":["docs.enrik.ai"],"gitSource":{"type":"github","owner":"simonrueba","repo":"enrik-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"a74d4468-3307-40c8-ac78-13cf5a523c78","liveDeploymentHistoryId":"6ac90f75d01a2240ccc78b3d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ac90f75d01a2240ccc78b3d"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ac90f75d01a2240ccc78b3d","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API reference","count":135},{"language":"default","tag":"Endpoints","count":130},{"language":"default","tag":"companies","count":20},{"language":"default","tag":"contacts","count":16},{"language":"default","tag":"companyCandidates","count":10},{"language":"default","tag":"companyDiscoveryJobs","count":10},{"language":"default","tag":"webhookSubscriptions","count":10},{"language":"default","tag":"icpProfiles","count":9},{"language":"default","tag":"signalDefinitions","count":9},{"language":"default","tag":"websiteOnboarding","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/contacts/create-or-update-a-contact-by-e-mail","slug":"/api-reference/contacts/create-or-update-a-contact-by-e-mail","pageMetadata":{"title":"Create or update a contact by e-mail","description":"Creates the contact with this `email`, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as `contacts.update` does. The answer says which it was, as `outcome`. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no `Idempotency-Key` is taken. A `companyId` that is not a live company of the workspace, or an `ownerUserId` that is not an active member, is refused with 422 `validation_error`; its details entry names the field and has `code` `related_record_not_found`.","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/upsert","href":"/api-reference/contacts/create-or-update-a-contact-by-e-mail","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Creates the contact with this \", _jsx(_components.code, {\n children: \"email\"\n }), \", or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as \", _jsx(_components.code, {\n children: \"contacts.update\"\n }), \" does. The answer says which it was, as \", _jsx(_components.code, {\n children: \"outcome\"\n }), \". A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" is taken. A \", _jsx(_components.code, {\n children: \"companyId\"\n }), \" that is not a live company of the workspace, or an \", _jsx(_components.code, {\n children: \"ownerUserId\"\n }), \" that is not an active member, is refused with 422 \", _jsx(_components.code, {\n children: \"validation_error\"\n }), \"; its details entry names the field and has \", _jsx(_components.code, {\n children: \"code\"\n }), \" \", _jsx(_components.code, {\n children: \"related_record_not_found\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create or update a contact by e-mail","description":"Creates the contact with this `email`, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as `contacts.update` does. The answer says which it was, as `outcome`. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no `Idempotency-Key` is taken. A `companyId` that is not a live company of the workspace, or an `ownerUserId` that is not an active member, is refused with 422 `validation_error`; its details entry names the field and has `code` `related_record_not_found`.","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/upsert","href":"/api-reference/contacts/create-or-update-a-contact-by-e-mail","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"contacts.upsert","summary":"Create or update a contact by e-mail","description":"Creates the contact with this `email`, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as `contacts.update` does. The answer says which it was, as `outcome`. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no `Idempotency-Key` is taken. A `companyId` that is not a live company of the workspace, or an `ownerUserId` that is not an active member, is refused with 422 `validation_error`; its details entry names the field and has `code` `related_record_not_found`.","tags":["contacts"],"security":["5b342859-afa2-4d8b-824d-b18fe32b1b0a"],"requestBody":"152915db-38bb-43ff-aa2e-743041cbe287","responses":{"200":"723b8548-5833-4e01-8556-f40e8ecc72e5","400":"d10a7890-c881-4002-bb95-5d74a9897aab","401":"e52c760d-6a17-46bc-b29b-3085739ccf5d","403":"cf419f29-12d0-41a0-9533-02f78518e68c","409":"e5c15964-d208-4bea-afee-f81b150486e2","413":"fa525074-63a1-4da5-a34d-fbf583cfe23f","415":"3b30a16e-befa-40e5-a50f-1dd721e44be9","422":"c7dda409-fba5-4f37-b1a3-95eab8d0a0b7","429":"b6fd89d7-84db-4a7e-999d-4aa678028ffc","500":"ac137d91-1f4a-4a7b-a605-30f357778146","503":"ae464c1d-3ce2-4652-8f00-80bc2d15f95b","default":"1d295a94-ca66-4856-a26a-987f69c45298"},"x-mutation-class":"idempotent-by-nature","x-stability-level":"beta","method":"post","type":"path","servers":["d4b75ac2-20fc-4060-84ae-9370689f03ae"],"path":"/v1/contacts/upsert","baseUrlOptions":["https://api.enrik.ai"],"title":"Create or update a contact by e-mail","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"The key: the e-mail address, stored lower-cased and compared ignoring case. The live contact with this address is updated, or a contact is created when there is none.","isRequired":true,"uniqueKey":"email","typeLabel":"string\u003cemail>"},"firstName":{"description":"The first name, at most 255 characters.","type":"string","maxLength":255,"uniqueKey":"firstName","typeLabel":"string"},"lastName":{"description":"The last name, at most 255 characters.","type":"string","maxLength":255,"uniqueKey":"lastName","typeLabel":"string"},"phone":{"description":"The phone number, at most 50 characters.","type":"string","maxLength":50,"uniqueKey":"phone","typeLabel":"string"},"jobTitle":{"description":"The job title, at most 255 characters.","type":"string","maxLength":255,"uniqueKey":"jobTitle","typeLabel":"string"},"ownerUserId":{"description":"The member who owns the contact, by user id. List the members, and their ids, with `GET /v1/workspace-members` (needs `crm:write`).","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","uniqueKey":"ownerUserId","typeLabel":"string\u003cuuid>"},"companyId":{"oneOf":[{"type":"string","description":"The company the contact works for, in this workspace; `null` or absent for none.","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","uniqueKey":"companyId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","description":"The company the contact works for, in this workspace; `null` or absent for none.","uniqueKey":"companyId.oneOf.1","typeLabel":"null"}],"uniqueKey":"companyId","typeLabel":"string\u003cuuid> | null"},"customFields":{"description":"Custom field values by key, checked against the workspace’s contact custom fields; the keys left out keep their values.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"customFields.additionalProperties","typeLabel":"any"},"uniqueKey":"customFields","typeLabel":"object"}},"required":["email"],"additionalProperties":false,"description":"A contact to create or update, found by its `email`. A field left out keeps its value.","uniqueKey":"","typeLabel":"object"},"example":{"email":"ada@example.com","firstName":"Ada","lastName":"Lovelace","jobTitle":"Head of Engineering"},"examples":{"Example":{"title":"Example","value":{"email":"ada@example.com","firstName":"Ada","lastName":"Lovelace","jobTitle":"Head of Engineering"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"723b8548-5833-4e01-8556-f40e8ecc72e5":{"description":"What an upsert did, and the contact.","headers":{"RateLimit":{"description":"What the API key has left under each rate-limit policy that counted this request: a Structured Field list with one `\"\u003cpolicy>\";r=\u003cremaining>;t=\u003cseconds>` item per policy. Read it as a list and honour every item, not only the smallest: continued traffic must satisfy each policy. `t` is the effective window in seconds (IETF RateLimit header fields, draft 11): quota is not guaranteed to be fully restored when it ends. When the answer also carries `Retry-After`, that takes priority. One policy counts this operation: `api-key`, every request the key makes.","schema":{"type":"string"},"example":"\"api-key\";r=599;t=60"},"RateLimit-Policy":{"description":"The rate-limit policies that counted this request: a Structured Field list with one `\"\u003cpolicy>\";q=\u003crequests>;w=\u003cwindow in seconds>` item per policy. The limits belong to the key, not to the address it calls from. One policy counts this operation: `api-key`, every request the key makes.","schema":{"type":"string"},"example":"\"api-key\";q=600;w=60"}},"content":{"application/json":{"schema":{"type":"object","properties":{"outcome":{"type":"string","enum":["created","updated"],"description":"`created` when no live contact had the e-mail address; `updated` when one did and the fields you sent were written to it.","isRequired":true,"uniqueKey":"outcome","typeLabel":"enum\u003cstring>"},"contact":{"type":"object","properties":{"id":{"type":"string","description":"The contact’s id.","isRequired":true,"uniqueKey":"contact.id","typeLabel":"string"},"workspaceId":{"type":"string","description":"The workspace the contact belongs to.","isRequired":true,"uniqueKey":"contact.workspaceId","typeLabel":"string"},"firstName":{"oneOf":[{"description":"The first name.","type":"string","isRequired":true,"uniqueKey":"contact.firstName.oneOf.0","typeLabel":"string"},{"description":"The first name.","type":"null","isRequired":true,"uniqueKey":"contact.firstName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.firstName","typeLabel":"string | null"},"lastName":{"oneOf":[{"description":"The last name.","type":"string","isRequired":true,"uniqueKey":"contact.lastName.oneOf.0","typeLabel":"string"},{"description":"The last name.","type":"null","isRequired":true,"uniqueKey":"contact.lastName.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.lastName","typeLabel":"string | null"},"email":{"oneOf":[{"description":"The e-mail address, lower-cased.","type":"string","isRequired":true,"uniqueKey":"contact.email.oneOf.0","typeLabel":"string"},{"description":"The e-mail address, lower-cased.","type":"null","isRequired":true,"uniqueKey":"contact.email.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.email","typeLabel":"string | null"},"phone":{"oneOf":[{"description":"The phone number.","type":"string","isRequired":true,"uniqueKey":"contact.phone.oneOf.0","typeLabel":"string"},{"description":"The phone number.","type":"null","isRequired":true,"uniqueKey":"contact.phone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.phone","typeLabel":"string | null"},"jobTitle":{"oneOf":[{"description":"The job title.","type":"string","isRequired":true,"uniqueKey":"contact.jobTitle.oneOf.0","typeLabel":"string"},{"description":"The job title.","type":"null","isRequired":true,"uniqueKey":"contact.jobTitle.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.jobTitle","typeLabel":"string | null"},"ownerUserId":{"oneOf":[{"description":"The member who owns the contact, by user id. List the members, and their ids, with `GET /v1/workspace-members` (needs `crm:write`).","type":"string","isRequired":true,"uniqueKey":"contact.ownerUserId.oneOf.0","typeLabel":"string"},{"description":"The member who owns the contact, by user id. List the members, and their ids, with `GET /v1/workspace-members` (needs `crm:write`).","type":"null","isRequired":true,"uniqueKey":"contact.ownerUserId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.ownerUserId","typeLabel":"string | null"},"companyId":{"oneOf":[{"description":"The company the contact works for.","type":"string","isRequired":true,"uniqueKey":"contact.companyId.oneOf.0","typeLabel":"string"},{"description":"The company the contact works for.","type":"null","isRequired":true,"uniqueKey":"contact.companyId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.companyId","typeLabel":"string | null"},"customFields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"oneOf":[{}],"uniqueKey":"contact.customFields.additionalProperties","typeLabel":"any"},"description":"Custom field values, by the custom field’s key.","isRequired":true,"uniqueKey":"contact.customFields","typeLabel":"object"},"createdBy":{"oneOf":[{"description":"The user who created the contact; `null` when an API key did.","type":"string","isRequired":true,"uniqueKey":"contact.createdBy.oneOf.0","typeLabel":"string"},{"description":"The user who created the contact; `null` when an API key did.","type":"null","isRequired":true,"uniqueKey":"contact.createdBy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.createdBy","typeLabel":"string | null"},"updatedBy":{"oneOf":[{"description":"The user who changed the contact last.","type":"string","isRequired":true,"uniqueKey":"contact.updatedBy.oneOf.0","typeLabel":"string"},{"description":"The user who changed the contact last.","type":"null","isRequired":true,"uniqueKey":"contact.updatedBy.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.updatedBy","typeLabel":"string | null"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the contact was created.","isRequired":true,"uniqueKey":"contact.createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the contact last changed. Send it back as `expectedUpdatedAt` to update safely.","isRequired":true,"uniqueKey":"contact.updatedAt","typeLabel":"string\u003cdate-time>"},"deletedAt":{"oneOf":[{"type":"string","description":"When the contact was deleted; `null` while it is live.","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","isRequired":true,"uniqueKey":"contact.deletedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When the contact was deleted; `null` while it is live.","isRequired":true,"uniqueKey":"contact.deletedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.deletedAt","typeLabel":"string\u003cdate-time> | null"},"company":{"oneOf":[{"type":"object","description":"With `include=company`: the linked company, or `null` when there is none or it is deleted.","required":["id","name","domain"],"properties":{"id":{"type":"string","description":"The company’s id.","isRequired":true,"uniqueKey":"contact.company.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","description":"The company’s name.","isRequired":true,"uniqueKey":"contact.company.oneOf.0.name","typeLabel":"string"},"domain":{"oneOf":[{"description":"The company’s domain, such as `example.com`.","type":"string","isRequired":true,"uniqueKey":"contact.company.oneOf.0.domain.oneOf.0","typeLabel":"string"},{"description":"The company’s domain, such as `example.com`.","type":"null","isRequired":true,"uniqueKey":"contact.company.oneOf.0.domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.company.oneOf.0.domain","typeLabel":"string | null"}},"additionalProperties":true,"uniqueKey":"contact.company.oneOf.0","typeLabel":"object"},{"type":"null","description":"With `include=company`: the linked company, or `null` when there is none or it is deleted.","uniqueKey":"contact.company.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact.company","typeLabel":"object | null"},"enrichmentCells":{"description":"With `include=enrichmentCells`: each enrichment column’s state for this record, by column id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"definitionId":{"type":"string","description":"The column’s id.","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.definitionId","typeLabel":"string"},"fieldId":{"type":"string","description":"The custom field the column writes its value into.","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.fieldId","typeLabel":"string"},"status":{"type":"string","enum":["empty","queued","running","succeeded","failed","skipped","stale"],"description":"Where the cell stands: `empty`, `queued`, `running`, `succeeded`, `failed`, `skipped` or `stale`.","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.status","typeLabel":"enum\u003cstring>"},"lastErrorCode":{"oneOf":[{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"string","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastErrorCode.oneOf.0","typeLabel":"string"},{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"null","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastErrorCode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastErrorCode","typeLabel":"string | null"},"lastAppliedAt":{"oneOf":[{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"string","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastAppliedAt.oneOf.0","typeLabel":"string"},{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"null","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastAppliedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.lastAppliedAt","typeLabel":"string | null"},"latestRunId":{"oneOf":[{"description":"The run that last worked on this cell; `null` when none has.","type":"string","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.latestRunId.oneOf.0","typeLabel":"string"},{"description":"The run that last worked on this cell; `null` when none has.","type":"null","isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.latestRunId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.enrichmentCells.additionalProperties.latestRunId","typeLabel":"string | null"}},"required":["definitionId","fieldId","status","lastErrorCode","lastAppliedAt","latestRunId"],"additionalProperties":true,"description":"The state of one enrichment column for one record. The value is in its field.","uniqueKey":"contact.enrichmentCells.additionalProperties","typeLabel":"object"},"uniqueKey":"contact.enrichmentCells","typeLabel":"object"},"formulaCells":{"description":"With `include=formulaCells`: each formula column’s state, by column id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"definitionId":{"type":"string","description":"The column’s id.","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.definitionId","typeLabel":"string"},"fieldId":{"type":"string","description":"The custom field the column writes its value into.","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.fieldId","typeLabel":"string"},"status":{"type":"string","enum":["empty","queued","running","succeeded","failed","skipped","stale"],"description":"Where the cell stands: `empty`, `queued`, `running`, `succeeded`, `failed`, `skipped` or `stale`.","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.status","typeLabel":"enum\u003cstring>"},"lastErrorCode":{"oneOf":[{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"string","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastErrorCode.oneOf.0","typeLabel":"string"},{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"null","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastErrorCode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastErrorCode","typeLabel":"string | null"},"lastAppliedAt":{"oneOf":[{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"string","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastAppliedAt.oneOf.0","typeLabel":"string"},{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"null","isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastAppliedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.formulaCells.additionalProperties.lastAppliedAt","typeLabel":"string | null"}},"required":["definitionId","fieldId","status","lastErrorCode","lastAppliedAt"],"additionalProperties":true,"description":"The state of one formula column for one record. The value is in its field.","uniqueKey":"contact.formulaCells.additionalProperties","typeLabel":"object"},"uniqueKey":"contact.formulaCells","typeLabel":"object"},"customApiCells":{"description":"With `include=customApiCells`: each custom-API column’s state, by column id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"definitionId":{"type":"string","description":"The column’s id.","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.definitionId","typeLabel":"string"},"fieldId":{"type":"string","description":"The custom field the column writes its value into.","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.fieldId","typeLabel":"string"},"status":{"type":"string","enum":["empty","queued","running","succeeded","failed","skipped","stale"],"description":"Where the cell stands: `empty`, `queued`, `running`, `succeeded`, `failed`, `skipped` or `stale`.","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.status","typeLabel":"enum\u003cstring>"},"lastErrorCode":{"oneOf":[{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"string","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastErrorCode.oneOf.0","typeLabel":"string"},{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"null","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastErrorCode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastErrorCode","typeLabel":"string | null"},"lastAppliedAt":{"oneOf":[{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"string","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastAppliedAt.oneOf.0","typeLabel":"string"},{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"null","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastAppliedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.lastAppliedAt","typeLabel":"string | null"},"latestRunId":{"oneOf":[{"description":"The run that last worked on this cell; `null` when none has.","type":"string","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.latestRunId.oneOf.0","typeLabel":"string"},{"description":"The run that last worked on this cell; `null` when none has.","type":"null","isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.latestRunId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.customApiCells.additionalProperties.latestRunId","typeLabel":"string | null"}},"required":["definitionId","fieldId","status","lastErrorCode","lastAppliedAt","latestRunId"],"additionalProperties":true,"description":"The state of one custom-API column for one record. The value is in its field.","uniqueKey":"contact.customApiCells.additionalProperties","typeLabel":"object"},"uniqueKey":"contact.customApiCells","typeLabel":"object"},"agentCells":{"description":"With `include=agentCells`: each agent column’s state, by column id.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"definitionId":{"type":"string","description":"The column’s id.","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.definitionId","typeLabel":"string"},"fieldId":{"type":"string","description":"The custom field the column writes its value into.","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.fieldId","typeLabel":"string"},"status":{"type":"string","enum":["empty","queued","running","succeeded","failed","skipped","stale"],"description":"Where the cell stands: `empty`, `queued`, `running`, `succeeded`, `failed`, `skipped` or `stale`.","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.status","typeLabel":"enum\u003cstring>"},"lastErrorCode":{"oneOf":[{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"string","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastErrorCode.oneOf.0","typeLabel":"string"},{"description":"Why the last attempt failed, as a stable code; `null` when it did not.","type":"null","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastErrorCode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastErrorCode","typeLabel":"string | null"},"lastAppliedAt":{"oneOf":[{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"string","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastAppliedAt.oneOf.0","typeLabel":"string"},{"description":"When a value was last written into the field, as an ISO 8601 instant.","type":"null","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastAppliedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.lastAppliedAt","typeLabel":"string | null"},"latestRunId":{"oneOf":[{"description":"The run that last worked on this cell; `null` when none has.","type":"string","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.latestRunId.oneOf.0","typeLabel":"string"},{"description":"The run that last worked on this cell; `null` when none has.","type":"null","isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.latestRunId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"contact.agentCells.additionalProperties.latestRunId","typeLabel":"string | null"}},"required":["definitionId","fieldId","status","lastErrorCode","lastAppliedAt","latestRunId"],"additionalProperties":true,"description":"The state of one agent column for one record. The value is in its field.","uniqueKey":"contact.agentCells.additionalProperties","typeLabel":"object"},"uniqueKey":"contact.agentCells","typeLabel":"object"}},"required":["id","workspaceId","firstName","lastName","email","phone","jobTitle","ownerUserId","companyId","customFields","createdBy","updatedBy","createdAt","updatedAt","deletedAt"],"additionalProperties":true,"description":"The contact as it is now.","isRequired":true,"uniqueKey":"contact","typeLabel":"object"}},"required":["outcome","contact"],"additionalProperties":true,"description":"What an upsert did, and the contact.","uniqueKey":"","typeLabel":"object"},"example":{"outcome":"updated","contact":{"id":"0199a1b2-0000-7000-8000-00000000c101","workspaceId":"0199a1b2-0000-7000-8000-00000000b001","firstName":"Ada","lastName":"Lovelace","email":"ada@example.com","phone":"+43 1 234 5678","jobTitle":"Head of Engineering","ownerUserId":"0199a1b2-0000-7000-8000-00000000c001","companyId":"0199a1b2-0000-7000-8000-00000000d101","customFields":{"tier":"gold"},"createdBy":"0199a1b2-0000-7000-8000-00000000c001","updatedBy":"0199a1b2-0000-7000-8000-00000000c001","createdAt":"2026-09-29T08:00:00.000Z","updatedAt":"2026-09-29T08:00:00.000Z","deletedAt":null}},"examples":{"Example":{"title":"Example","value":{"outcome":"updated","contact":{"id":"0199a1b2-0000-7000-8000-00000000c101","workspaceId":"0199a1b2-0000-7000-8000-00000000b001","firstName":"Ada","lastName":"Lovelace","email":"ada@example.com","phone":"+43 1 234 5678","jobTitle":"Head of Engineering","ownerUserId":"0199a1b2-0000-7000-8000-00000000c001","companyId":"0199a1b2-0000-7000-8000-00000000d101","customFields":{"tier":"gold"},"createdBy":"0199a1b2-0000-7000-8000-00000000c001","updatedBy":"0199a1b2-0000-7000-8000-00000000c001","createdAt":"2026-09-29T08:00:00.000Z","updatedAt":"2026-09-29T08:00:00.000Z","deletedAt":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"d10a7890-c881-4002-bb95-5d74a9897aab":{"description":"The request could not be read. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `malformed_json`: The body is not valid JSON, or is empty while `Content-Type` is `application/json`. Send valid JSON; omit `Content-Type` when there is no body.\n- `invalid_sort`: A sort names a field or direction the list does not support. Sort only by the fields the operation lists.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"malformed_json","message":"Bad Request","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"malformed_json","message":"Bad Request","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e52c760d-6a17-46bc-b29b-3085739ccf5d":{"description":"The request is not authenticated. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `unauthenticated`: The key is missing, invalid, expired or revoked. Send a valid, unexpired key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthenticated","message":"Unauthorized","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"Unauthorized","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"cf419f29-12d0-41a0-9533-02f78518e68c":{"description":"The caller may not do this. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `insufficient_scope`: The key lacks a scope the operation, or a parameter such as `include` or `rankingMode`, needs. `details.missingScopes` names it; `WWW-Authenticate` lists every scope the request needs. Create a key with the missing scope.\n- `permission_denied`: The key’s scopes admit the operation, but its permissions do not cover this request: replaying a create needs `crm:read`, and a key keeps the permissions its scopes had when it was created. The message names the scope. Create a new key with the scope the message names.\n- `beta_access_required`: The workspace is not admitted to the beta, which every write except `feedback.submit` needs. Contact support.\n- `not_a_member`: `websiteOnboarding.getAccess`: the key’s workspace has been deleted. Use a key of a live workspace.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"insufficient_scope","message":"Forbidden","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"insufficient_scope","message":"Forbidden","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e5c15964-d208-4bea-afee-f81b150486e2":{"description":"The request conflicts with the current state. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `conflict`: The request clashes with the current state, such as a duplicate domain or e-mail, a changed setup or a ranked list that changed. `details.code` names the case where there is one. Read fresh state, then decide.\n- `stale_version`: The record changed since the `expectedUpdatedAt` you sent. `details.currentUpdatedAt` is its current version. Read the record again and reapply your change.\n- `idempotency_key_reused`: The `Idempotency-Key` was used for a different command or body. Use a new key for a new command.\n- `request_in_flight`: The first request with this `Idempotency-Key` is still running. Retry shortly with the same key.\n- `company_twin_research_already_running`: `websiteOnboarding.confirmProfile`: research for this setup or website is already running. Read fresh setup state.\n- `company_twin_own_domain_conflict`: `websiteOnboarding.confirmProfile`: the website does not match the workspace’s company profile. Read fresh setup state, then confirm the profile with its own website.\n- `concurrent_run_limit`: `companyDiscoveryJobs.start` by an API key: the workspace already has as many discovery jobs queued or running as a key may start beside. `details.code` names the cap. Wait for a job to finish, or cancel one, then start again.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"conflict","message":"Conflict","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"conflict","message":"Conflict","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fa525074-63a1-4da5-a34d-fbf583cfe23f":{"description":"The body is over the size limit. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `payload_too_large`: The body is over the size limit, currently 1 MiB. Send a smaller body.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"payload_too_large","message":"Payload Too Large","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"payload_too_large","message":"Payload Too Large","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"3b30a16e-befa-40e5-a50f-1dd721e44be9":{"description":"The body’s media type cannot be read. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `unsupported_media_type`: The `Content-Type` header is not a media type. Send `Content-Type: application/json`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unsupported_media_type","message":"Unsupported Media Type","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unsupported_media_type","message":"Unsupported Media Type","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"c7dda409-fba5-4f37-b1a3-95eab8d0a0b7":{"description":"The request cannot be used as sent. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `validation_error`: The request does not match the operation’s schema, a field names something that does not exist, or a value cannot be used, such as an id that is not a UUID, a date outside the years 0001–9999 in a filter, or an edited cursor. See `details`. Fix the request.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"validation_error","message":"Unprocessable Entity","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_error","message":"Unprocessable Entity","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"b6fd89d7-84db-4a7e-999d-4aa678028ffc":{"description":"Too many requests (`error.code` is `rate_limited`): the API key spent a rate-limit policy, or the network it calls from presented too many invalid keys. Wait `Retry-After` seconds before retrying; it takes priority over `RateLimit`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying. It takes priority over the `t` of every `RateLimit` item.","schema":{"type":"integer","minimum":1},"example":60},"RateLimit":{"description":"What the API key has left under each rate-limit policy that counted this request: a Structured Field list with one `\"\u003cpolicy>\";r=\u003cremaining>;t=\u003cseconds>` item per policy. Read it as a list and honour every item, not only the smallest: continued traffic must satisfy each policy. `t` is the effective window in seconds (IETF RateLimit header fields, draft 11): quota is not guaranteed to be fully restored when it ends. When the answer also carries `Retry-After`, that takes priority. One policy counts this operation: `api-key`, every request the key makes.","schema":{"type":"string"},"example":"\"api-key\";r=599;t=60"},"RateLimit-Policy":{"description":"The rate-limit policies that counted this request: a Structured Field list with one `\"\u003cpolicy>\";q=\u003crequests>;w=\u003cwindow in seconds>` item per policy. The limits belong to the key, not to the address it calls from. One policy counts this operation: `api-key`, every request the key makes.","schema":{"type":"string"},"example":"\"api-key\";q=600;w=60"}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Too many requests","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Too many requests","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"ac137d91-1f4a-4a7b-a605-30f357778146":{"description":"The request failed on the server. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `internal_error`: Something failed on our side. Retry later; reuse a command’s idempotency key.\n- `response_contract_violation`: Our answer broke its own schema, so it was withheld. `details.committed` says whether a change was saved. If `committed` is true, read the state instead of resending. Quote the request id.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"internal_error","message":"Internal Server Error","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"internal_error","message":"Internal Server Error","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"ae464c1d-3ce2-4652-8f00-80bc2d15f95b":{"description":"The service is briefly unavailable. Branch on `error.code`; quote `error.requestId` to support.\n\nThe codes a public operation answers with it:\n\n- `service_unavailable`: A create ran out of time, or the service is briefly unavailable. Retry later with the same idempotency key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"service_unavailable","message":"Service Unavailable","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"service_unavailable","message":"Service Unavailable","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1d295a94-ca66-4856-a26a-987f69c45298":{"description":"The request failed. Branch on `error.code`; quote `error.requestId` to support.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","x-extensible-enum":["malformed_json","invalid_sort","unauthenticated","insufficient_scope","permission_denied","beta_access_required","not_a_member","not_found","method_not_allowed","conflict","stale_version","idempotency_key_reused","request_in_flight","company_twin_research_already_running","company_twin_own_domain_conflict","concurrent_run_limit","gone","payload_too_large","unsupported_media_type","validation_error","rate_limited","internal_error","response_contract_violation","service_unavailable"],"description":"A stable, machine-readable code such as `not_found`. Branch on this, not on `message`. The known values are every code a public operation answers; more may be added, so handle an unknown one by its HTTP status.","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"A human-readable explanation. It may change; do not parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","description":"The id of the request that failed. Quote it when you contact support.","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"details":{"description":"Structured detail for some codes. For `validation_error` it is usually an array with one entry per problem: `path` (the field, dotted), `message` and, where the case has a name, `code` (such as `related_record_not_found`). Other codes that cover several cases carry an object whose `code` names the case (such as `invalid_cursor`).","uniqueKey":"error.details","typeLabel":"any"}},"required":["code","message","requestId"],"additionalProperties":true,"description":"What went wrong: the code to branch on, a message and the request id.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"additionalProperties":true,"description":"The body of every error response.","uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"not_found","message":"Not found","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"not_found","message":"Not found","requestId":"5b1d3c1e-8d6f-4f2a-9a57-3a9b1f2c7d10"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"5b342859-afa2-4d8b-824d-b18fe32b1b0a":{"apiKey":{"type":"http","scheme":"bearer","description":"An Enrik API key, sent as `Authorization: Bearer \u003ckey>`. A key reaches public operations only, and only those whose scopes it holds. A few parameters need a scope beyond their operation’s, which the parameter names. The scopes:\n\n- `setup:read`: Read the workspace setup and its company profile.\n- `setup:run`: Change the setup: confirm the company profile, authorize sponsored drafting and background company research, choose what to set up and complete setup.\n- `workspace:read`: Read the workspace’s own profile: its health summary and setup state.\n- `crm:read`: Read companies with their signals, contacts and the saved views over them.\n- `crm:write`: Create, update and restore companies and contacts, and create, update and delete saved views.\n- `crm:delete`: Delete companies and contacts.\n- `twin:read`: Read the Company Twin: structured company knowledge and its signals.\n- `discovery:read`: Read ICP profiles, ICP assessments, discovery briefs, discovery jobs, candidates and the signal library.\n- `discovery:write`: Create and change ICP profiles, discovery briefs and signal-definition drafts, and review discovery candidates.\n- `discovery:run`: Create, start and cancel discovery jobs, and edit a draft one. Uses provider budget.\n- `enrichment:read`: Read the enrichment configuration and its results, including a record’s enrichment, formula and custom-API cells.\n- `enrichment:run`: Launch and cancel enrichment. Spends enrichment credits.\n- `automation:read`: Read workflows and agents with their run history, including a record’s agent cells.\n- `automation:run`: Run existing workflows and agents.\n- `exports:read`: Read export jobs and the fields an export can carry.\n- `exports:run`: Create, preview, start, cancel and archive CSV exports of companies, contacts and candidates, and download the file. Also needs `crm:read`. Delivering an export to a webhook destination stays in the app.\n- `integrations:read`: Read connections, field mappings, CRM sync jobs and webhook destinations.\n- `webhooks:read`: Read webhook subscriptions, the event types they can name and their delivery log.\n- `webhooks:write`: Subscribe a receiver URL to webhook events; edit, test, pause, resume and archive a subscription and rotate its signing secret; redeliver an event. Only workspace owners and admins can grant it.\n- `reporting:read`: Read analytics and dashboards.\n- `assistant:read`: Read the Assistant: its threads, messages and pending approvals.\n- `assistant:run`: Converse with the Assistant. Uses the workspace’s AI quota.\n- `assistant:write`: Approve or reject the changes the Assistant proposes.","scopes":["crm:write"],"schemeName":"apiKey"}}},"servers":{"d4b75ac2-20fc-4060-84ae-9370689f03ae":{"url":"https://api.enrik.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An Enrik API key, sent as `Authorization: Bearer \u003ckey>`. A key reaches public operations only, and only those whose scopes it holds. A few parameters need a scope beyond their operation’s, which the parameter names. The scopes:\n\n- `setup:read`: Read the workspace setup and its company profile.\n- `setup:run`: Change the setup: confirm the company profile, authorize sponsored drafting and background company research, choose what to set up and complete setup.\n- `workspace:read`: Read the workspace’s own profile: its health summary and setup state.\n- `crm:read`: Read companies with their signals, contacts and the saved views over them.\n- `crm:write`: Create, update and restore companies and contacts, and create, update and delete saved views.\n- `crm:delete`: Delete companies and contacts.\n- `twin:read`: Read the Company Twin: structured company knowledge and its signals.\n- `discovery:read`: Read ICP profiles, ICP assessments, discovery briefs, discovery jobs, candidates and the signal library.\n- `discovery:write`: Create and change ICP profiles, discovery briefs and signal-definition drafts, and review discovery candidates.\n- `discovery:run`: Create, start and cancel discovery jobs, and edit a draft one. Uses provider budget.\n- `enrichment:read`: Read the enrichment configuration and its results, including a record’s enrichment, formula and custom-API cells.\n- `enrichment:run`: Launch and cancel enrichment. Spends enrichment credits.\n- `automation:read`: Read workflows and agents with their run history, including a record’s agent cells.\n- `automation:run`: Run existing workflows and agents.\n- `exports:read`: Read export jobs and the fields an export can carry.\n- `exports:run`: Create, preview, start, cancel and archive CSV exports of companies, contacts and candidates, and download the file. Also needs `crm:read`. Delivering an export to a webhook destination stays in the app.\n- `integrations:read`: Read connections, field mappings, CRM sync jobs and webhook destinations.\n- `webhooks:read`: Read webhook subscriptions, the event types they can name and their delivery log.\n- `webhooks:write`: Subscribe a receiver URL to webhook events; edit, test, pause, resume and archive a subscription and rotate its signing secret; redeliver an event. Only workspace owners and admins can grant it.\n- `reporting:read`: Read analytics and dashboards.\n- `assistant:read`: Read the Assistant: its threads, messages and pending approvals.\n- `assistant:run`: Converse with the Assistant. Uses the workspace’s AI quota.\n- `assistant:write`: Approve or reject the changes the Assistant proposes.","scopes":["crm:write"],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An Enrik API key, sent as `Authorization: Bearer \u003ckey>`. A key reaches public operations only, and only those whose scopes it holds. A few parameters need a scope beyond their operation’s, which the parameter names. The scopes:\n\n- `setup:read`: Read the workspace setup and its company profile.\n- `setup:run`: Change the setup: confirm the company profile, authorize sponsored drafting and background company research, choose what to set up and complete setup.\n- `workspace:read`: Read the workspace’s own profile: its health summary and setup state.\n- `crm:read`: Read companies with their signals, contacts and the saved views over them.\n- `crm:write`: Create, update and restore companies and contacts, and create, update and delete saved views.\n- `crm:delete`: Delete companies and contacts.\n- `twin:read`: Read the Company Twin: structured company knowledge and its signals.\n- `discovery:read`: Read ICP profiles, ICP assessments, discovery briefs, discovery jobs, candidates and the signal library.\n- `discovery:write`: Create and change ICP profiles, discovery briefs and signal-definition drafts, and review discovery candidates.\n- `discovery:run`: Create, start and cancel discovery jobs, and edit a draft one. Uses provider budget.\n- `enrichment:read`: Read the enrichment configuration and its results, including a record’s enrichment, formula and custom-API cells.\n- `enrichment:run`: Launch and cancel enrichment. Spends enrichment credits.\n- `automation:read`: Read workflows and agents with their run history, including a record’s agent cells.\n- `automation:run`: Run existing workflows and agents.\n- `exports:read`: Read export jobs and the fields an export can carry.\n- `exports:run`: Create, preview, start, cancel and archive CSV exports of companies, contacts and candidates, and download the file. Also needs `crm:read`. Delivering an export to a webhook destination stays in the app.\n- `integrations:read`: Read connections, field mappings, CRM sync jobs and webhook destinations.\n- `webhooks:read`: Read webhook subscriptions, the event types they can name and their delivery log.\n- `webhooks:write`: Subscribe a receiver URL to webhook events; edit, test, pause, resume and archive a subscription and rotate its signing secret; redeliver an event. Only workspace owners and admins can grant it.\n- `reporting:read`: Read analytics and dashboards.\n- `assistant:read`: Read the Assistant: its threads, messages and pending approvals.\n- `assistant:run`: Converse with the Assistant. Uses the workspace’s AI quota.\n- `assistant:write`: Approve or reject the changes the Assistant proposes.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"https://api.enrik.ai/v1/openapi.json"},"subdomain":"enrik","siteName":"Enrik","title":"Create or update a contact by e-mail - Enrik","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-09T15:59:56.039Z","originalFileLocation":"api-reference/contacts/create-or-update-a-contact-by-e-mail.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has code related_record_not_found.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Enrik\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/enrik/favicon.svg\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/enrik/favicon.svg\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/enrik/favicon.svg\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/enrik/favicon.svg\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create or update a contact by e-mail - Enrik\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has code related_record_not_found.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Enrik\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://enrik.mintlify.site/_mintlify/api/og/v2?division=contacts\u0026amp;title=Create+or+update+a+contact+by+e-mail\u0026amp;description=Creates+the+contact+with+this+%60email%60%2C+or+updates+the+live+contact+that+has+it%2C+comparing+the+address+ignoring+case.+An+update+writes+only+the+fields+you+send+a\u0026amp;theme=1a1b5b8bdbe71a79282f5f36\u0026amp;signature=acdaa36156485667270584d552b45639e440f7a77e2340c0ccb4105dd3fb1454\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create or update a contact by e-mail - Enrik\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has code related_record_not_found.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://enrik.mintlify.site/_mintlify/api/og/v2?division=contacts\u0026amp;title=Create+or+update+a+contact+by+e-mail\u0026amp;description=Creates+the+contact+with+this+%60email%60%2C+or+updates+the+live+contact+that+has+it%2C+comparing+the+address+ignoring+case.+An+update+writes+only+the+fields+you+send+a\u0026amp;theme=1a1b5b8bdbe71a79282f5f36\u0026amp;signature=acdaa36156485667270584d552b45639e440f7a77e2340c0ccb4105dd3fb1454\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/enrik/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Enrik\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/contacts/create-or-update-a-contact-by-e-mail.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.enrik.ai/#organization\",\"name\":\"Enrik\",\"url\":\"https://docs.enrik.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.enrik.ai#website\",\"name\":\"Enrik\",\"url\":\"https://docs.enrik.ai\",\"publisher\":{\"@id\":\"https://docs.enrik.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail#webpage\",\"url\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail\",\"name\":\"Create or update a contact by e-mail\",\"description\":\"Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has code related_record_not_found.\",\"dateModified\":\"2026-10-09T15:59:56.039Z\",\"isPartOf\":{\"@id\":\"https://docs.enrik.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://docs.enrik.ai/api-reference/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Endpoints\",\"item\":\"https://docs.enrik.ai/api-reference/companies/list-companies\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"contacts\",\"item\":\"https://docs.enrik.ai/api-reference/contacts/list-contacts\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Create or update a contact by e-mail\",\"item\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail#apireference\",\"headline\":\"Create or update a contact by e-mail\",\"name\":\"Create or update a contact by e-mail\",\"description\":\"Creates the contact with this email, or updates the live contact that has it, comparing the address ignoring case. An update writes only the fields you send and keeps the rest, as contacts.update does. The answer says which it was, as outcome. A contact in the trash is not matched: restore it to update it. The e-mail address is the idempotency key, so sending the same body again is harmless and no Idempotency-Key is taken. A companyId that is not a live company of the workspace, or an ownerUserId that is not an active member, is refused with 422 validation_error; its details entry names the field and has code related_record_not_found.\",\"url\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail\",\"mainEntityOfPage\":{\"@id\":\"https://docs.enrik.ai/api-reference/contacts/create-or-update-a-contact-by-e-mail#webpage\"},\"dateModified\":\"2026-10-09T15:59:56.039Z\",\"publisher\":{\"@id\":\"https://docs.enrik.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.enrik.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Enrik\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Enrik","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Getting started","href":"/index"},{"title":"Create your workspace","href":"/create-your-workspace"}]},{"group":"Find and qualify companies","pages":[{"title":"Define your ICP","href":"/define-your-icp"},{"title":"Create a source","href":"/create-a-source"},{"title":"Review candidates","href":"/review-candidates"},{"title":"Promote companies","href":"/promote-companies"}]},{"group":"Enrich and act","pages":[{"title":"Run enrichment","href":"/run-enrichment"},{"title":"Use signals","href":"/use-signals"},{"title":"Create activation assets","href":"/create-activation-assets"},{"title":"Export data","href":"/export-data"},{"title":"Sync to HubSpot","href":"/sync-hubspot"}]},{"group":"Power features","pages":[{"title":"Use the Assistant","href":"/use-copilot"},{"title":"Formula columns","href":"/formula-columns"},{"title":"Custom API columns","href":"/custom-api-columns"},{"title":"Workflows","href":"/workflows"},{"title":"AI agents","href":"/ai-agents"}]},{"group":"Account and trust","pages":[{"title":"Billing \u0026 the free trial","href":"/billing-and-trial"},{"title":"Security \u0026 data handling","href":"/security-and-data-handling"},{"title":"FAQ","href":"/faq"}]},{"group":"API reference","pages":[{"title":"Authentication and quick start","href":"/api-reference/introduction"},{"title":"Set up Enrik with an agent","href":"/api-reference/agent-setup"},{"title":"Send feedback about the API","href":"/api-reference/feedback"},{"title":"Versioning and deprecation","href":"/api-reference/versioning"},{"title":"Changelog","href":"/api-reference/changelog"},{"group":"Endpoints","pages":[{"group":"companies","pages":[{"title":"List companies","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies","href":"/api-reference/companies/list-companies"},{"title":"Create a company","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies","href":"/api-reference/companies/create-a-company"},{"title":"Create up to 100 companies","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies/bulk-create","href":"/api-reference/companies/create-up-to-100-companies"},{"title":"Update up to 100 companies","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies/bulk-update","href":"/api-reference/companies/update-up-to-100-companies"},{"title":"Create or update up to 100 companies by domain","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies/bulk-upsert","href":"/api-reference/companies/create-or-update-up-to-100-companies-by-domain"},{"title":"List deleted companies","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/trash","href":"/api-reference/companies/list-deleted-companies"},{"title":"Create or update a company by domain","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies/upsert","href":"/api-reference/companies/create-or-update-a-company-by-domain"},{"title":"Get a company","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}","href":"/api-reference/companies/get-a-company"},{"title":"Delete a company","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json delete /v1/companies/{companyId}","href":"/api-reference/companies/delete-a-company"},{"title":"Update a company","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/companies/{companyId}","href":"/api-reference/companies/update-a-company"},{"title":"List a company’s contacts","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/contacts","href":"/api-reference/companies/list-a-company’s-contacts"},{"title":"Get where a company’s fields came from","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/provenance","href":"/api-reference/companies/get-where-a-company’s-fields-came-from"},{"title":"Restore a deleted company","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/companies/{companyId}/restore","href":"/api-reference/companies/restore-a-deleted-company"},{"title":"Get a company’s signal summary","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/signal-summary","href":"/api-reference/companies/get-a-company’s-signal-summary"},{"title":"List a company’s signals","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/signals","href":"/api-reference/companies/list-a-company’s-signals"},{"title":"List a company’s timeline","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/timeline","href":"/api-reference/companies/list-a-company’s-timeline"},{"title":"A company was created","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company.created","href":"/api-reference/companies/a-company-was-created"},{"title":"A company was deleted","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company.deleted","href":"/api-reference/companies/a-company-was-deleted"},{"title":"A company was restored","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company.restored","href":"/api-reference/companies/a-company-was-restored"},{"title":"A company changed","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company.updated","href":"/api-reference/companies/a-company-changed"}]},{"group":"icpAssessments","pages":[{"title":"Get a company’s ICP assessment","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/companies/{companyId}/icp-assessment","href":"/api-reference/icpassessments/get-a-company’s-icp-assessment"}]},{"group":"companyCandidates","pages":[{"title":"List candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-candidates","href":"/api-reference/companycandidates/list-candidates"},{"title":"Accept candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/bulk-accept","href":"/api-reference/companycandidates/accept-candidates"},{"title":"Archive candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/bulk-archive","href":"/api-reference/companycandidates/archive-candidates"},{"title":"Promote candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/bulk-promote","href":"/api-reference/companycandidates/promote-candidates"},{"title":"Reject candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/bulk-reject","href":"/api-reference/companycandidates/reject-candidates"},{"title":"Get a candidate","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-candidates/{candidateId}","href":"/api-reference/companycandidates/get-a-candidate"},{"title":"Accept a candidate","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/{candidateId}/accept","href":"/api-reference/companycandidates/accept-a-candidate"},{"title":"Archive a candidate","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/{candidateId}/archive","href":"/api-reference/companycandidates/archive-a-candidate"},{"title":"Promote a candidate","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/{candidateId}/promote","href":"/api-reference/companycandidates/promote-a-candidate"},{"title":"Reject a candidate","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-candidates/{candidateId}/reject","href":"/api-reference/companycandidates/reject-a-candidate"}]},{"group":"companyDiscoveryJobs","pages":[{"title":"List discovery jobs","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-discovery-jobs","href":"/api-reference/companydiscoveryjobs/list-discovery-jobs"},{"title":"Create a discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-discovery-jobs","href":"/api-reference/companydiscoveryjobs/create-a-discovery-job"},{"title":"Get a discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-discovery-jobs/{jobId}","href":"/api-reference/companydiscoveryjobs/get-a-discovery-job"},{"title":"Update a draft discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/company-discovery-jobs/{jobId}","href":"/api-reference/companydiscoveryjobs/update-a-draft-discovery-job"},{"title":"Archive a discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-discovery-jobs/{jobId}/archive","href":"/api-reference/companydiscoveryjobs/archive-a-discovery-job"},{"title":"Cancel a discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-discovery-jobs/{jobId}/cancel","href":"/api-reference/companydiscoveryjobs/cancel-a-discovery-job"},{"title":"List a discovery job’s candidates","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-discovery-jobs/{jobId}/candidates","href":"/api-reference/companydiscoveryjobs/list-a-discovery-job’s-candidates"},{"title":"Get a discovery job’s quality summary","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-discovery-jobs/{jobId}/quality-summary","href":"/api-reference/companydiscoveryjobs/get-a-discovery-job’s-quality-summary"},{"title":"Start a discovery job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/company-discovery-jobs/{jobId}/start","href":"/api-reference/companydiscoveryjobs/start-a-discovery-job"},{"title":"A discovery job reached its outcome","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company-discovery-job.terminal","href":"/api-reference/companydiscoveryjobs/a-discovery-job-reached-its-outcome"}]},{"group":"companySignals","pages":[{"title":"Get a company signal","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/company-signals/{id}","href":"/api-reference/companysignals/get-a-company-signal"},{"title":"A signal was applied to a company","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook company-signal.created","href":"/api-reference/companysignals/a-signal-was-applied-to-a-company"}]},{"group":"contacts","pages":[{"title":"List contacts","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Create a contact","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts","href":"/api-reference/contacts/create-a-contact"},{"title":"Create up to 100 contacts","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/bulk-create","href":"/api-reference/contacts/create-up-to-100-contacts"},{"title":"Update up to 100 contacts","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/bulk-update","href":"/api-reference/contacts/update-up-to-100-contacts"},{"title":"Create or update up to 100 contacts by e-mail","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/bulk-upsert","href":"/api-reference/contacts/create-or-update-up-to-100-contacts-by-e-mail"},{"title":"List deleted contacts","description":"Pages through the workspace’s deleted contacts, most recently deleted first. A deleted contact can be restored.","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/contacts/trash","href":"/api-reference/contacts/list-deleted-contacts"},{"title":"Create or update a contact by e-mail","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/upsert","href":"/api-reference/contacts/create-or-update-a-contact-by-e-mail"},{"title":"Get a contact","description":"One live contact, by id. A deleted contact is not found.","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/contacts/{contactId}","href":"/api-reference/contacts/get-a-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json delete /v1/contacts/{contactId}","href":"/api-reference/contacts/delete-a-contact"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/contacts/{contactId}","href":"/api-reference/contacts/update-a-contact"},{"title":"Restore a deleted contact","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/contacts/{contactId}/restore","href":"/api-reference/contacts/restore-a-deleted-contact"},{"title":"List a contact’s timeline","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/contacts/{contactId}/timeline","href":"/api-reference/contacts/list-a-contact’s-timeline"},{"title":"A contact was created","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook contact.created","href":"/api-reference/contacts/a-contact-was-created"},{"title":"A contact was deleted","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook contact.deleted","href":"/api-reference/contacts/a-contact-was-deleted"},{"title":"A contact was restored","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook contact.restored","href":"/api-reference/contacts/a-contact-was-restored"},{"title":"A contact changed","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook contact.updated","href":"/api-reference/contacts/a-contact-changed"}]},{"group":"customFieldDefinitions","pages":[{"title":"List custom fields","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/custom-field-definitions","href":"/api-reference/customfielddefinitions/list-custom-fields"}]},{"group":"discoveryBriefs","pages":[{"title":"List discovery briefs","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/discovery-briefs","href":"/api-reference/discoverybriefs/list-discovery-briefs"},{"title":"Create a discovery brief","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/discovery-briefs","href":"/api-reference/discoverybriefs/create-a-discovery-brief"},{"title":"Get a discovery brief","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/discovery-briefs/{discoveryBriefId}","href":"/api-reference/discoverybriefs/get-a-discovery-brief"},{"title":"Update a discovery brief","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/discovery-briefs/{discoveryBriefId}","href":"/api-reference/discoverybriefs/update-a-discovery-brief"},{"title":"Archive a discovery brief","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/discovery-briefs/{discoveryBriefId}/archive","href":"/api-reference/discoverybriefs/archive-a-discovery-brief"},{"title":"List a discovery brief’s versions","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/discovery-briefs/{discoveryBriefId}/versions","href":"/api-reference/discoverybriefs/list-a-discovery-brief’s-versions"},{"title":"Add a discovery brief version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/discovery-briefs/{discoveryBriefId}/versions","href":"/api-reference/discoverybriefs/add-a-discovery-brief-version"},{"title":"Get a discovery brief version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/discovery-briefs/{discoveryBriefId}/versions/{versionId}","href":"/api-reference/discoverybriefs/get-a-discovery-brief-version"}]},{"group":"exportFields","pages":[{"title":"Get the export field catalogue","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/export-fields","href":"/api-reference/exportfields/get-the-export-field-catalogue"}]},{"group":"exportJobs","pages":[{"title":"List export jobs","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/export-jobs","href":"/api-reference/exportjobs/list-export-jobs"},{"title":"Create a draft export","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/export-jobs","href":"/api-reference/exportjobs/create-a-draft-export"},{"title":"Preview an export","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/export-jobs/preview","href":"/api-reference/exportjobs/preview-an-export"},{"title":"Get an export job","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/export-jobs/{id}","href":"/api-reference/exportjobs/get-an-export-job"},{"title":"Archive an export","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/export-jobs/{id}/archive","href":"/api-reference/exportjobs/archive-an-export"},{"title":"Cancel an export","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/export-jobs/{id}/cancel","href":"/api-reference/exportjobs/cancel-an-export"},{"title":"Download an export’s CSV file","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/export-jobs/{id}/download","href":"/api-reference/exportjobs/download-an-export’s-csv-file"},{"title":"Start an export","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/export-jobs/{id}/start","href":"/api-reference/exportjobs/start-an-export"}]},{"group":"feedback","pages":[{"title":"Send anonymous feedback","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/feedback","href":"/api-reference/feedback/send-anonymous-feedback"}]},{"group":"health","pages":[{"title":"Check that the API is up","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/health","href":"/api-reference/health/check-that-the-api-is-up"}]},{"group":"icpProfiles","pages":[{"title":"List ICP profiles","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/icp-profiles","href":"/api-reference/icpprofiles/list-icp-profiles"},{"title":"Create an ICP profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/icp-profiles","href":"/api-reference/icpprofiles/create-an-icp-profile"},{"title":"Get an ICP profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/icp-profiles/{icpProfileId}","href":"/api-reference/icpprofiles/get-an-icp-profile"},{"title":"Update an ICP profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/icp-profiles/{icpProfileId}","href":"/api-reference/icpprofiles/update-an-icp-profile"},{"title":"Archive an ICP profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/icp-profiles/{icpProfileId}/archive","href":"/api-reference/icpprofiles/archive-an-icp-profile"},{"title":"Restore an ICP profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/icp-profiles/{icpProfileId}/restore","href":"/api-reference/icpprofiles/restore-an-icp-profile"},{"title":"List an ICP profile’s versions","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/icp-profiles/{icpProfileId}/versions","href":"/api-reference/icpprofiles/list-an-icp-profile’s-versions"},{"title":"Add an ICP profile version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/icp-profiles/{icpProfileId}/versions","href":"/api-reference/icpprofiles/add-an-icp-profile-version"},{"title":"Get an ICP profile version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/icp-profiles/{icpProfileId}/versions/{versionId}","href":"/api-reference/icpprofiles/get-an-icp-profile-version"}]},{"group":"apiKeys","pages":[{"title":"Describe the calling API key","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/me","href":"/api-reference/apikeys/describe-the-calling-api-key"},{"title":"Revoke the calling API key","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/me/revoke","href":"/api-reference/apikeys/revoke-the-calling-api-key"},{"title":"Rotate the calling API key","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/me/rotate","href":"/api-reference/apikeys/rotate-the-calling-api-key"}]},{"group":"websiteOnboarding","pages":[{"title":"Read workspace company setup","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/onboarding/setup","href":"/api-reference/websiteonboarding/read-workspace-company-setup"},{"title":"Read workspace setup access","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/onboarding/setup/access","href":"/api-reference/websiteonboarding/read-workspace-setup-access"},{"title":"Confirm workspace company profile","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/company-profile/confirm","href":"/api-reference/websiteonboarding/confirm-workspace-company-profile"},{"title":"Draft workspace company profile from website or description","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/company-profile/draft","href":"/api-reference/websiteonboarding/draft-workspace-company-profile-from-website-or-description"},{"title":"Complete workspace setup","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/complete","href":"/api-reference/websiteonboarding/complete-workspace-setup"},{"title":"Read workspace setup completion","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/onboarding/setup/completion","href":"/api-reference/websiteonboarding/read-workspace-setup-completion"},{"title":"Reset workspace company setup","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/reset","href":"/api-reference/websiteonboarding/reset-workspace-company-setup"},{"title":"Choose workspace setups","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/setups","href":"/api-reference/websiteonboarding/choose-workspace-setups"},{"title":"Start workspace company setup","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/onboarding/setup/start","href":"/api-reference/websiteonboarding/start-workspace-company-setup"}]},{"group":"savedViews","pages":[{"title":"List saved views","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/saved-views","href":"/api-reference/savedviews/list-saved-views"},{"title":"Create a saved view","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/saved-views","href":"/api-reference/savedviews/create-a-saved-view"},{"title":"Get a saved view","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/saved-views/{savedViewId}","href":"/api-reference/savedviews/get-a-saved-view"},{"title":"Delete a saved view","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json delete /v1/saved-views/{savedViewId}","href":"/api-reference/savedviews/delete-a-saved-view"},{"title":"Update a saved view","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/saved-views/{savedViewId}","href":"/api-reference/savedviews/update-a-saved-view"}]},{"group":"signalDefinitions","pages":[{"title":"List signal definitions","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/signal-definitions","href":"/api-reference/signaldefinitions/list-signal-definitions"},{"title":"Create a signal definition","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/signal-definitions","href":"/api-reference/signaldefinitions/create-a-signal-definition"},{"title":"Get a signal definition","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/signal-definitions/{signalDefinitionId}","href":"/api-reference/signaldefinitions/get-a-signal-definition"},{"title":"Update a signal definition","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/signal-definitions/{signalDefinitionId}","href":"/api-reference/signaldefinitions/update-a-signal-definition"},{"title":"Archive a signal definition","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/signal-definitions/{signalDefinitionId}/archive","href":"/api-reference/signaldefinitions/archive-a-signal-definition"},{"title":"Restore a signal definition","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/signal-definitions/{signalDefinitionId}/restore","href":"/api-reference/signaldefinitions/restore-a-signal-definition"},{"title":"List a signal definition’s versions","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/signal-definitions/{signalDefinitionId}/versions","href":"/api-reference/signaldefinitions/list-a-signal-definition’s-versions"},{"title":"Add a signal definition version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/signal-definitions/{signalDefinitionId}/versions","href":"/api-reference/signaldefinitions/add-a-signal-definition-version"},{"title":"Get a signal definition version","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/signal-definitions/{signalDefinitionId}/versions/{versionId}","href":"/api-reference/signaldefinitions/get-a-signal-definition-version"}]},{"group":"signalDetectors","pages":[{"title":"Get the signal detector catalogue","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/signal-detectors","href":"/api-reference/signaldetectors/get-the-signal-detector-catalogue"}]},{"group":"webhookEventDeliveries","pages":[{"title":"List event deliveries of a subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/webhook-event-deliveries","href":"/api-reference/webhookeventdeliveries/list-event-deliveries-of-a-subscription"},{"title":"Get an event delivery","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/webhook-event-deliveries/{id}","href":"/api-reference/webhookeventdeliveries/get-an-event-delivery"},{"title":"Redeliver an event","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-event-deliveries/{id}/redeliver","href":"/api-reference/webhookeventdeliveries/redeliver-an-event"}]},{"group":"webhookEventTypes","pages":[{"title":"List event types","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/webhook-event-types","href":"/api-reference/webhookeventtypes/list-event-types"}]},{"group":"webhookSubscriptions","pages":[{"title":"List event subscriptions","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/webhook-subscriptions","href":"/api-reference/webhooksubscriptions/list-event-subscriptions"},{"title":"Create an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions","href":"/api-reference/webhooksubscriptions/create-an-event-subscription"},{"title":"Get an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/webhook-subscriptions/{id}","href":"/api-reference/webhooksubscriptions/get-an-event-subscription"},{"title":"Update an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json patch /v1/webhook-subscriptions/{id}","href":"/api-reference/webhooksubscriptions/update-an-event-subscription"},{"title":"Archive an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions/{id}/archive","href":"/api-reference/webhooksubscriptions/archive-an-event-subscription"},{"title":"Disable an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions/{id}/disable","href":"/api-reference/webhooksubscriptions/disable-an-event-subscription"},{"title":"Enable an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions/{id}/enable","href":"/api-reference/webhooksubscriptions/enable-an-event-subscription"},{"title":"Rotate the signing secret","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions/{id}/rotate-secret","href":"/api-reference/webhooksubscriptions/rotate-the-signing-secret"},{"title":"Test an event subscription","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json post /v1/webhook-subscriptions/{id}/test","href":"/api-reference/webhooksubscriptions/test-an-event-subscription"},{"title":"A subscription was tested","version":null,"deprecated":null,"openapi":"https://api.enrik.ai/v1/openapi.json webhook webhook.ping","href":"/api-reference/webhooksubscriptions/a-subscription-was-tested"}]},{"group":"workspaceMembers","pages":[{"title":"List workspace members","deprecated":null,"version":null,"openapi":"https://api.enrik.ai/v1/openapi.json get /v1/workspace-members","href":"/api-reference/workspacemembers/list-workspace-members"}]}]}]}]},"basePath":"","title":"Create or update a contact by e-mail - Enrik","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}