Enrich company mapping

Resolve a company and start asynchronous Account Mapping enrichment.

Resolves a company by domain, LinkedIn URL, LinkedIn handle, or company ID, then starts asynchronous enrichment for the company mapping.

The endpoint returns 202 Accepted immediately. Enrichment continues in the background.

If a recent enrichment already exists for the same company and workspace, the response reflects the existing request instead of creating a duplicate.

Route

POST/api/v2/enrich-company-mapping

Personas

Your workspace can define several personas (ideal customer profile targeting criteria), each with its own locations and job titles. By default this call enriches the personas linked to the lists this company belongs to — every active persona when none of those lists names one, or when the company is on no list. Pass persona_ids to enrich specific personas instead; they run even if the company is not on their lists. Either way, the response launches array reports one entry per persona considered: launched (a new request was created and charged), already_requested (already enriched today for this company, at no extra cost), or skipped because the persona is missing a location or job titles (skipped_no_location, skipped_no_job_titles).

Credit usage

Charges one credit for each persona actually launched. A persona already requested today for this company costs nothing. If your balance cannot cover every persona this call would launch, the whole call is refused and nothing is created or charged — a partial launch never happens. Additional credits are charged for each employee profile whose content is analyzed as enrichment continues.

Returns 402 if your balance is insufficient (see Errors), 422 if none of your personas can be mapped, or 422 if persona_ids names an id that isn't one of your active personas. If a persona's own mapping later fails, its credit is refunded automatically.

Access modes

Use a workspace API key. The workspace is inferred from the key.

Authorization: Bearer sk_live_...

Request body

Send exactly one company identifier: domain, linkedin_url, linkedin_handle, or company_id. Unknown extra fields in the body are ignored.

FieldTypeRequiredDescription
domainstringConditionalCompany domain, for example acme.com.
linkedin_urlstringConditionalLinkedIn company URL.
linkedin_handlestringConditionalLinkedIn company slug after /company/, for example acme.
company_idintegerConditionalThe company's ID in Sillage, if you already have it (e.g. from the company list or another v2 endpoint). This ID is specific to your environment. Cannot be combined with any other identifier.
persona_idsinteger[]OptionalSpecific personas to enrich, at least one id. Omit to enrich the personas linked to the lists this company belongs to (every active persona when none of those lists names one, or when the company is on no list). An id that isn't one of your active personas returns 422 and nothing is launched.

Valid body examples:

{
  "domain": "acme.com"
}

When you identify the company with company_id, the lookup is unambiguous — the 409 conflict response described below cannot happen for this field. It only applies when resolving by domain or LinkedIn. A company_id that does not exist, or belongs to a different workspace, returns a 404.

Example request

curl "https://api.getsillage.com/api/v2/enrich-company-mapping" \
  -X POST \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"domain":"acme.com"}'

Success response

Status: 202 Accepted

Two personas, both newly launched:

{
  "status": "accepted",
  "request_id": 12345,
  "stage": "account_mapping_in_progress",
  "launches": [
    { "persona_id": 501, "request_id": 12345, "status": "launched", "credits": 1 },
    { "persona_id": 502, "request_id": 12346, "status": "launched", "credits": 1 }
  ]
}

Same-day relaunch — both personas were already requested today for this company, so nothing is charged:

{
  "status": "accepted",
  "request_id": 12345,
  "stage": "account_mapping_in_progress",
  "launches": [
    {
      "persona_id": 501,
      "request_id": 12345,
      "status": "already_requested",
      "credits": 0
    },
    {
      "persona_id": 502,
      "request_id": 12346,
      "status": "already_requested",
      "credits": 0
    }
  ]
}

Polling enrichment stage

Each entry in launches is the content-request ID for that persona; poll GET /api/v2/account-mapping/{request_id}/stage for any of them until its stage field reaches a terminal value.

Terminal stages: completed (success) and account_mapping_failed (failure). See Account Mapping — Polling enrichment stage for the full response shape.

Response headers

HeaderDescription
X-Request-IdRequest UUID for debugging and support.
X-Response-TimeServer response time.

Response fields

FieldTypeDescription
statusstringAcceptance status.
request_idintegerDeprecated. Id of the first launched (or, if none launched, first considered) persona's content request. Use launches[].request_id instead, which reports every persona individually. Will be removed in a future major version.
stagestringCurrent enrichment stage.
launchesarrayOne entry per persona this call considered for your workspace.
launches[].persona_idintegerId of the persona.
launches[].request_idinteger or nullId of this persona's own content request. null when the persona was skipped, since no request was created for it.
launches[].statusstringlaunched (a new request was created and charged), already_requested (already enriched today for this company, at no extra cost), skipped_no_location, or skipped_no_job_titles.
launches[].creditsintegerCredits charged for this persona by this call — 1 when launched, 0 otherwise.

Errors

StatusMeaning
400The request input is invalid.
401The API key is missing or invalid.
402Insufficient credits to launch every persona this call would map.
403Account Mapping is not enabled for the workspace.
404No company found for the given identifier, or the given company_id does not belong to your workspace.
409A conflicting enrichment request already exists.
422Either none of your personas can be mapped for this company — every persona is either missing or is missing a location or job titles — or persona_ids names an id that isn't one of your active personas. Nothing is launched either way. See the two examples below.
500An unexpected server error occurred.

A 422 for "no persona can be mapped":

{
  "type": "https://docs.getsillage.com/errors/no-persona-launchable",
  "title": "No persona can be mapped",
  "status": 422,
  "detail": "No persona in this workspace can be mapped — add a persona, or complete an existing persona location and job titles, then try again.",
  "instance": "/api/v2/enrich-company-mapping",
  "launches": [
    {
      "persona_id": 501,
      "request_id": null,
      "status": "skipped_no_location",
      "credits": 0
    }
  ]
}

A 422 for an invalid persona_ids entry:

{
  "type": "https://docs.getsillage.com/errors/unprocessable-entity",
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "persona_ids includes an id that is not one of your workspace's active personas.",
  "instance": "/api/v2/enrich-company-mapping",
  "errors": {
    "persona_ids": ["Unknown persona id: 999"]
  }
}

Error responses use RFC 9457 problem documents with Content-Type: application/problem+json:

{
  "type": "https://docs.getsillage.com/errors/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "Account Mapping is not enabled for this workspace.",
  "instance": "/api/v2/enrich-company-mapping"
}

On this page