[{"data":1,"prerenderedAt":54},["ShallowReactive",2],{"docs:rendered-article:\u002Fdocs\u002Fpublic\u002Fguides\u002Fmigrating-resolve-to-enrich":3},{"path":4,"slug":5,"title":8,"description":9,"category":6,"categoryLabel":10,"order":11,"status":12,"family":13,"subfamily":13,"content":14,"html":15,"examplesHtml":16,"excerpt":17,"readTimeMinutes":18,"headings":19,"examplesHeadings":48,"lastUpdated":13,"endpointId":13,"requiredFlag":13,"relatedArticlePaths":49,"badge":13},"\u002Fdocs\u002Fguides\u002Fmigrating-resolve-to-enrich",[6,7],"guides","migrating-resolve-to-enrich","Migrating from Resolve to Enrich","Move identity resolution calls from the asynchronous \u002Fv2\u002Fresolve endpoints to the synchronous \u002Fv2\u002Fenrich endpoints.","Guides",52,"new",null,"\nIdentity resolution has a new home: `POST \u002Fv2\u002Fenrich\u002Fpersons` and `POST \u002Fv2\u002Fenrich\u002Fcompanies`. They take the same inputs as Resolve, cost the same, and answer synchronously: the match comes back in the API response, with no job to track and no callback to receive.\n\nThe previous endpoints, `POST \u002Fv2\u002Fresolve\u002Fpersons\u002Femail`, `POST \u002Fv2\u002Fresolve\u002Fpersons\u002Fname` and `POST \u002Fv2\u002Fresolve\u002Fcompanies\u002Flive`, remain functional until **October 13, 2026**, when they are retired. See the [endpoint transition overview](\u002Fdocs\u002Fguides\u002Fendpoint-transition-october-2026) for the full timeline. This guide covers everything that changes when you move to Enrich.\n\n## What changes\n\n| Area | `\u002Fv2\u002Fresolve\u002F...` | `\u002Fv2\u002Fenrich\u002F...` |\n| ---- | ----------------- | ---------------- |\n| Paths | One path per input type for persons, one for companies | One path for persons, one for companies |\n| Delivery | Asynchronous: a `webhookId`, then polling or a webhook callback | Synchronous: the match is in the response |\n| Person result | A focused subset of the profile | The same fields, plus the full profile of the [Profile](\u002Fdocs\u002Fendpoints\u002Ffetch-profile) endpoint |\n| Other candidates | Not returned | `data.alternativePersons`, each one a full profile |\n| Not found | `data-not-found` error code in the job result | `404` response |\n| Pricing | 2 credits | 2 credits, only when a match is found |\n\n## Paths\n\n| Before | After |\n| ------ | ----- |\n| `POST \u002Fv2\u002Fresolve\u002Fpersons\u002Femail` | `POST \u002Fv2\u002Fenrich\u002Fpersons` |\n| `POST \u002Fv2\u002Fresolve\u002Fpersons\u002Fname` | `POST \u002Fv2\u002Fenrich\u002Fpersons` |\n| `POST \u002Fv2\u002Fresolve\u002Fcompanies\u002Flive` | `POST \u002Fv2\u002Fenrich\u002Fcompanies` |\n\nThe method and the `Authorization: Bearer YOUR_API_KEY` header stay the same.\n\n## Inputs stay the same\n\nSend the fields you already send today. The only field to drop is `webhookUrl`.\n\n| Before | After |\n| ------ | ----- |\n| `\u002Fv2\u002Fresolve\u002Fpersons\u002Femail` with `email` | `\u002Fv2\u002Fenrich\u002Fpersons` with `email` |\n| `\u002Fv2\u002Fresolve\u002Fpersons\u002Fname` with `firstName`, `lastName` and `companyDomain` or `companyName` | `\u002Fv2\u002Fenrich\u002Fpersons` with the same fields |\n| `\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive` with `domain` | `\u002Fv2\u002Fenrich\u002Fcompanies` with `domain` |\n\nOn `\u002Fv2\u002Fenrich\u002Fpersons`, every field is optional and independent: provide at least one of `email`, `firstName`, `lastName`, `companyDomain` or `companyName`. You can also combine an email with a name and a company in a single request. See [Best practices](\u002Fdocs\u002Fendpoints\u002Fenrich-person#best-practices) for the trade-off between match rate and certainty.\n\n## From asynchronous to synchronous\n\nResolve replied with a job acknowledgement and delivered the result later, through polling on `GET \u002Fv2\u002Fwebhooks\u002F:webhookId` or a callback to your `webhookUrl`. Enrich returns the match in the response to your request.\n\nBefore:\n\n```javascript\nconst trigger = await fetch(\"https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fresolve\u002Fpersons\u002Femail\", {\n  method: \"POST\",\n  headers: { \"Authorization\": \"Bearer YOUR_API_KEY\", \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ email: \"jane.doe@acme.com\" })\n});\nconst { data: { webhookId } } = await trigger.json();\n\nwhile (true) {\n  const res = await fetch(`https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fwebhooks\u002F${webhookId}`, {\n    headers: { \"Authorization\": \"Bearer YOUR_API_KEY\" }\n  });\n  const { data } = await res.json();\n  if (data.status === \"succeeded\") { console.log(data.result); break; }\n  if (data.status === \"errored\") throw new Error(data.errorCode ?? \"Job failed\");\n  await new Promise(r => setTimeout(r, 2000));\n}\n```\n\nAfter:\n\n```javascript\nconst response = await fetch(\"https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fenrich\u002Fpersons\", {\n  method: \"POST\",\n  headers: { \"Authorization\": \"Bearer YOUR_API_KEY\", \"Content-Type\": \"application\u002Fjson\" },\n  body: JSON.stringify({ email: \"jane.doe@acme.com\" })\n});\n\nif (response.status === 404) {\n  console.log(\"No match\");\n} else {\n  const { data } = await response.json();\n  console.log(data.person.firstName, data.person.currentCompanyName);\n}\n```\n\nWhat you can remove from your integration:\n\n- The callback endpoint you expose to receive Resolve results, and its `webhookUrl` in your requests.\n- The polling loop on `GET \u002Fv2\u002Fwebhooks\u002F:webhookId`.\n- The storage you use to correlate a `webhookId` with the original request.\n- The handling of the `data-not-found`, `fetch-data-error` and `result-unavailable` job error codes. A not-found is now a `404` response, and other failures come back as standard HTTP errors, see [Errors & retries](\u002Fdocs\u002Fguides\u002Ferrors-retries).\n\n## Person results are full profiles\n\nResolve delivered a focused subset of the profile, and the documented flow was to chain into the [Profile](\u002Fdocs\u002Fendpoints\u002Ffetch-profile) endpoint for the rest. Enrich returns the full profile in `data.person`, with `currentPosition`, `experience`, `education`, `skills` and the other sections documented on the Profile endpoint. If you chained a Profile call after each resolution, drop it.\n\nEvery field of the Resolve result keeps its name and its place: `id`, `publicId`, `linkedinUrl`, `firstName`, `lastName`, `headline`, `currentPositionTitle`, `currentCompanyId`, `currentCompanyName`, `currentCompanyLinkedinId`, `updateDate` and `location`. Your existing parsing keeps working once you read `data.person` instead of the job result, and the Profile sections come on top. The complete field reference is on the [Profile](\u002Fdocs\u002Fendpoints\u002Ffetch-profile) endpoint.\n\nIn rare cases the full profile cannot be retrieved in time. `data.isFullProfile` is then `false` and `data.person` carries only the Resolve fields listed above, which you can complete with the [Profile](\u002Fdocs\u002Fendpoints\u002Ffetch-profile) endpoint. See [Light fallback](\u002Fdocs\u002Fendpoints\u002Fenrich-person#light-fallback).\n\n## Alternative candidates\n\nWhen several people match your input, Enrich returns the best match in `data.person` and the other candidates in `data.alternativePersons`, ordered best first, up to nine. Each alternative is a full profile too, with `currentCompanyId` always `null`. Resolve had no equivalent, so use this array as an ambiguity signal: when it is not empty, route the record to review before writing it. See [Data quality](\u002Fdocs\u002Fguides\u002Fdata-quality#use-alternativepersons-as-an-ambiguity-flag).\n\n## Pricing\n\nEnrich costs **2 credits**, the same price as Resolve, and only when a match is found. A `404` costs 0 credits. The full profile of persons, alternative candidates and companies is included in that price.\n\nThe `fullProfile` request field is deprecated and ignored on both Enrich endpoints: it is still accepted so existing requests keep working, and you can remove it.\n\n## Companies\n\n`POST \u002Fv2\u002Fenrich\u002Fcompanies` takes the same `domain` as `\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive` and returns the company in `data.company` as a full profile: the fields of the Resolve result keep their names, and the [Company Profile](\u002Fdocs\u002Fendpoints\u002Ffetch-company) fields come on top. See [Enrich company](\u002Fdocs\u002Fendpoints\u002Fenrich-company) for the full reference.\n\n## Migration checklist\n\n1. Replace `\u002Fv2\u002Fresolve\u002Fpersons\u002Femail` and `\u002Fv2\u002Fresolve\u002Fpersons\u002Fname` with `POST \u002Fv2\u002Fenrich\u002Fpersons`, and `\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive` with `POST \u002Fv2\u002Fenrich\u002Fcompanies`.\n2. Remove `webhookUrl` from your requests and read the result from the response.\n3. Remove the polling loop, the callback endpoint and the `webhookId` correlation.\n4. Treat `404` as a normal no-match outcome.\n5. Read the person from `data.person`: the Resolve fields keep their names.\n6. Drop the Profile calls you used to chain after a resolution.\n7. Check `data.alternativePersons` before writing a match automatically.\n8. Remove `fullProfile` from your requests.\n","\u003Cp>Identity resolution has a new home: \u003Ccode>POST \u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode> and \u003Ccode>POST \u002Fv2\u002Fenrich\u002Fcompanies\u003C\u002Fcode>. They take the same inputs as Resolve, cost the same, and answer synchronously: the match comes back in the API response, with no job to track and no callback to receive.\u003C\u002Fp>\n\u003Cp>The previous endpoints, \u003Ccode>POST \u002Fv2\u002Fresolve\u002Fpersons\u002Femail\u003C\u002Fcode>, \u003Ccode>POST \u002Fv2\u002Fresolve\u002Fpersons\u002Fname\u003C\u002Fcode> and \u003Ccode>POST \u002Fv2\u002Fresolve\u002Fcompanies\u002Flive\u003C\u002Fcode>, remain functional until \u003Cstrong>October 13, 2026\u003C\u002Fstrong>, when they are retired. See the \u003Ca href=\"\u002Fdocs\u002Fguides\u002Fendpoint-transition-october-2026\">endpoint transition overview\u003C\u002Fa> for the full timeline. This guide covers everything that changes when you move to Enrich.\u003C\u002Fp>\n\u003Ch2 id=\"what-changes\">What changes\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Area\u003C\u002Fth>\n\u003Cth>\u003Ccode>\u002Fv2\u002Fresolve\u002F...\u003C\u002Fcode>\u003C\u002Fth>\n\u003Cth>\u003Ccode>\u002Fv2\u002Fenrich\u002F...\u003C\u002Fcode>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Paths\u003C\u002Ftd>\n\u003Ctd>One path per input type for persons, one for companies\u003C\u002Ftd>\n\u003Ctd>One path for persons, one for companies\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Delivery\u003C\u002Ftd>\n\u003Ctd>Asynchronous: a \u003Ccode>webhookId\u003C\u002Fcode>, then polling or a webhook callback\u003C\u002Ftd>\n\u003Ctd>Synchronous: the match is in the response\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Person result\u003C\u002Ftd>\n\u003Ctd>A focused subset of the profile\u003C\u002Ftd>\n\u003Ctd>The same fields, plus the full profile of the \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Ffetch-profile\">Profile\u003C\u002Fa> endpoint\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Other candidates\u003C\u002Ftd>\n\u003Ctd>Not returned\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>data.alternativePersons\u003C\u002Fcode>, each one a full profile\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Not found\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>data-not-found\u003C\u002Fcode> error code in the job result\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>404\u003C\u002Fcode> response\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Pricing\u003C\u002Ftd>\n\u003Ctd>2 credits\u003C\u002Ftd>\n\u003Ctd>2 credits, only when a match is found\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2 id=\"paths\">Paths\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Before\u003C\u002Fth>\n\u003Cth>After\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fresolve\u002Fpersons\u002Femail\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fresolve\u002Fpersons\u002Fname\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fresolve\u002Fcompanies\u002Flive\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>POST \u002Fv2\u002Fenrich\u002Fcompanies\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The method and the \u003Ccode>Authorization: Bearer YOUR_API_KEY\u003C\u002Fcode> header stay the same.\u003C\u002Fp>\n\u003Ch2 id=\"inputs-stay-the-same\">Inputs stay the same\u003C\u002Fh2>\n\u003Cp>Send the fields you already send today. The only field to drop is \u003Ccode>webhookUrl\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Before\u003C\u002Fth>\n\u003Cth>After\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fresolve\u002Fpersons\u002Femail\u003C\u002Fcode> with \u003Ccode>email\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode> with \u003Ccode>email\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fresolve\u002Fpersons\u002Fname\u003C\u002Fcode> with \u003Ccode>firstName\u003C\u002Fcode>, \u003Ccode>lastName\u003C\u002Fcode> and \u003Ccode>companyDomain\u003C\u002Fcode> or \u003Ccode>companyName\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode> with the same fields\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive\u003C\u002Fcode> with \u003Ccode>domain\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\u002Fv2\u002Fenrich\u002Fcompanies\u003C\u002Fcode> with \u003Ccode>domain\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>On \u003Ccode>\u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode>, every field is optional and independent: provide at least one of \u003Ccode>email\u003C\u002Fcode>, \u003Ccode>firstName\u003C\u002Fcode>, \u003Ccode>lastName\u003C\u002Fcode>, \u003Ccode>companyDomain\u003C\u002Fcode> or \u003Ccode>companyName\u003C\u002Fcode>. You can also combine an email with a name and a company in a single request. See \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Fenrich-person#best-practices\" target=\"_blank\" rel=\"noopener\">Best practices\u003C\u002Fa> for the trade-off between match rate and certainty.\u003C\u002Fp>\n\u003Ch2 id=\"from-asynchronous-to-synchronous\">From asynchronous to synchronous\u003C\u002Fh2>\n\u003Cp>Resolve replied with a job acknowledgement and delivered the result later, through polling on \u003Ccode>GET \u002Fv2\u002Fwebhooks\u002F:webhookId\u003C\u002Fcode> or a callback to your \u003Ccode>webhookUrl\u003C\u002Fcode>. Enrich returns the match in the response to your request.\u003C\u002Fp>\n\u003Cp>Before:\u003C\u002Fp>\n\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\" data-language=\"javascript\">\u003Ccode class=\"language-javascript\">\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> trigger\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> fetch\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fresolve\u002Fpersons\u002Femail\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  method: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"POST\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  headers: { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Bearer YOUR_API_KEY\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Content-Type\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"application\u002Fjson\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  body: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">JSON\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">stringify\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ email: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"jane.doe@acme.com\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">data\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">webhookId\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> } } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> trigger.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">while\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">true\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> res\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> fetch\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">`https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fwebhooks\u002F${\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">webhookId\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">}`\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    headers: { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Bearer YOUR_API_KEY\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">data\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> res.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (data.status \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"succeeded\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) { console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(data.result); \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">break\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">; }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (data.status \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"errored\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">throw\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Error\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(data.errorCode \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">??\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> \"Job failed\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> Promise\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">r\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> setTimeout\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(r, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">2000\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>After:\u003C\u002Fp>\n\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\" data-language=\"javascript\">\u003Ccode class=\"language-javascript\">\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> response\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> fetch\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"https:\u002F\u002Fapi.reversecontact.com\u002Fv2\u002Fenrich\u002Fpersons\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  method: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"POST\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  headers: { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Authorization\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Bearer YOUR_API_KEY\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"Content-Type\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"application\u002Fjson\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  body: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">JSON\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">stringify\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ email: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"jane.doe@acme.com\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> })\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (response.status \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> 404\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"No match\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">} \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">else\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">  const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">data\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> response.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(data.person.firstName, data.person.currentCompanyName);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>What you can remove from your integration:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The callback endpoint you expose to receive Resolve results, and its \u003Ccode>webhookUrl\u003C\u002Fcode> in your requests.\u003C\u002Fli>\n\u003Cli>The polling loop on \u003Ccode>GET \u002Fv2\u002Fwebhooks\u002F:webhookId\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>The storage you use to correlate a \u003Ccode>webhookId\u003C\u002Fcode> with the original request.\u003C\u002Fli>\n\u003Cli>The handling of the \u003Ccode>data-not-found\u003C\u002Fcode>, \u003Ccode>fetch-data-error\u003C\u002Fcode> and \u003Ccode>result-unavailable\u003C\u002Fcode> job error codes. A not-found is now a \u003Ccode>404\u003C\u002Fcode> response, and other failures come back as standard HTTP errors, see \u003Ca href=\"\u002Fdocs\u002Fguides\u002Ferrors-retries\">Errors &amp; retries\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"person-results-are-full-profiles\">Person results are full profiles\u003C\u002Fh2>\n\u003Cp>Resolve delivered a focused subset of the profile, and the documented flow was to chain into the \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Ffetch-profile\">Profile\u003C\u002Fa> endpoint for the rest. Enrich returns the full profile in \u003Ccode>data.person\u003C\u002Fcode>, with \u003Ccode>currentPosition\u003C\u002Fcode>, \u003Ccode>experience\u003C\u002Fcode>, \u003Ccode>education\u003C\u002Fcode>, \u003Ccode>skills\u003C\u002Fcode> and the other sections documented on the Profile endpoint. If you chained a Profile call after each resolution, drop it.\u003C\u002Fp>\n\u003Cp>Every field of the Resolve result keeps its name and its place: \u003Ccode>id\u003C\u002Fcode>, \u003Ccode>publicId\u003C\u002Fcode>, \u003Ccode>linkedinUrl\u003C\u002Fcode>, \u003Ccode>firstName\u003C\u002Fcode>, \u003Ccode>lastName\u003C\u002Fcode>, \u003Ccode>headline\u003C\u002Fcode>, \u003Ccode>currentPositionTitle\u003C\u002Fcode>, \u003Ccode>currentCompanyId\u003C\u002Fcode>, \u003Ccode>currentCompanyName\u003C\u002Fcode>, \u003Ccode>currentCompanyLinkedinId\u003C\u002Fcode>, \u003Ccode>updateDate\u003C\u002Fcode> and \u003Ccode>location\u003C\u002Fcode>. Your existing parsing keeps working once you read \u003Ccode>data.person\u003C\u002Fcode> instead of the job result, and the Profile sections come on top. The complete field reference is on the \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Ffetch-profile\">Profile\u003C\u002Fa> endpoint.\u003C\u002Fp>\n\u003Cp>In rare cases the full profile cannot be retrieved in time. \u003Ccode>data.isFullProfile\u003C\u002Fcode> is then \u003Ccode>false\u003C\u002Fcode> and \u003Ccode>data.person\u003C\u002Fcode> carries only the Resolve fields listed above, which you can complete with the \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Ffetch-profile\">Profile\u003C\u002Fa> endpoint. See \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Fenrich-person#light-fallback\" target=\"_blank\" rel=\"noopener\">Light fallback\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"alternative-candidates\">Alternative candidates\u003C\u002Fh2>\n\u003Cp>When several people match your input, Enrich returns the best match in \u003Ccode>data.person\u003C\u002Fcode> and the other candidates in \u003Ccode>data.alternativePersons\u003C\u002Fcode>, ordered best first, up to nine. Each alternative is a full profile too, with \u003Ccode>currentCompanyId\u003C\u002Fcode> always \u003Ccode>null\u003C\u002Fcode>. Resolve had no equivalent, so use this array as an ambiguity signal: when it is not empty, route the record to review before writing it. See \u003Ca href=\"\u002Fdocs\u002Fguides\u002Fdata-quality#use-alternativepersons-as-an-ambiguity-flag\" target=\"_blank\" rel=\"noopener\">Data quality\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"pricing\">Pricing\u003C\u002Fh2>\n\u003Cp>Enrich costs \u003Cstrong>2 credits\u003C\u002Fstrong>, the same price as Resolve, and only when a match is found. A \u003Ccode>404\u003C\u002Fcode> costs 0 credits. The full profile of persons, alternative candidates and companies is included in that price.\u003C\u002Fp>\n\u003Cp>The \u003Ccode>fullProfile\u003C\u002Fcode> request field is deprecated and ignored on both Enrich endpoints: it is still accepted so existing requests keep working, and you can remove it.\u003C\u002Fp>\n\u003Ch2 id=\"companies\">Companies\u003C\u002Fh2>\n\u003Cp>\u003Ccode>POST \u002Fv2\u002Fenrich\u002Fcompanies\u003C\u002Fcode> takes the same \u003Ccode>domain\u003C\u002Fcode> as \u003Ccode>\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive\u003C\u002Fcode> and returns the company in \u003Ccode>data.company\u003C\u002Fcode> as a full profile: the fields of the Resolve result keep their names, and the \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Ffetch-company\">Company Profile\u003C\u002Fa> fields come on top. See \u003Ca href=\"\u002Fdocs\u002Fendpoints\u002Fenrich-company\">Enrich company\u003C\u002Fa> for the full reference.\u003C\u002Fp>\n\u003Ch2 id=\"migration-checklist\">Migration checklist\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Replace \u003Ccode>\u002Fv2\u002Fresolve\u002Fpersons\u002Femail\u003C\u002Fcode> and \u003Ccode>\u002Fv2\u002Fresolve\u002Fpersons\u002Fname\u003C\u002Fcode> with \u003Ccode>POST \u002Fv2\u002Fenrich\u002Fpersons\u003C\u002Fcode>, and \u003Ccode>\u002Fv2\u002Fresolve\u002Fcompanies\u002Flive\u003C\u002Fcode> with \u003Ccode>POST \u002Fv2\u002Fenrich\u002Fcompanies\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Remove \u003Ccode>webhookUrl\u003C\u002Fcode> from your requests and read the result from the response.\u003C\u002Fli>\n\u003Cli>Remove the polling loop, the callback endpoint and the \u003Ccode>webhookId\u003C\u002Fcode> correlation.\u003C\u002Fli>\n\u003Cli>Treat \u003Ccode>404\u003C\u002Fcode> as a normal no-match outcome.\u003C\u002Fli>\n\u003Cli>Read the person from \u003Ccode>data.person\u003C\u002Fcode>: the Resolve fields keep their names.\u003C\u002Fli>\n\u003Cli>Drop the Profile calls you used to chain after a resolution.\u003C\u002Fli>\n\u003Cli>Check \u003Ccode>data.alternativePersons\u003C\u002Fcode> before writing a match automatically.\u003C\u002Fli>\n\u003Cli>Remove \u003Ccode>fullProfile\u003C\u002Fcode> from your requests.\u003C\u002Fli>\n\u003C\u002Fol>\n","","Identity resolution has a new home: POST \u002Fv2\u002Fenrich\u002Fpersons and POST \u002Fv2\u002Fenrich\u002Fcompanies. They take the same inputs as Resolve, cost the same, and answer synchronously: the mat...",4,[20,24,27,30,33,36,39,42,45],{"id":21,"title":22,"level":23},"what-changes","What changes",2,{"id":25,"title":26,"level":23},"paths","Paths",{"id":28,"title":29,"level":23},"inputs-stay-the-same","Inputs stay the same",{"id":31,"title":32,"level":23},"from-asynchronous-to-synchronous","From asynchronous to synchronous",{"id":34,"title":35,"level":23},"person-results-are-full-profiles","Person results are full profiles",{"id":37,"title":38,"level":23},"alternative-candidates","Alternative candidates",{"id":40,"title":41,"level":23},"pricing","Pricing",{"id":43,"title":44,"level":23},"companies","Companies",{"id":46,"title":47,"level":23},"migration-checklist","Migration checklist",[],[50,51,52,53],"\u002Fdocs\u002Fguides\u002Fendpoint-transition-october-2026","\u002Fdocs\u002Fendpoints\u002Fenrich-person","\u002Fdocs\u002Fendpoints\u002Fenrich-company","\u002Fdocs\u002Fendpoints\u002Ffetch-profile",1790692477304]