Enrich company mapping
Resolve a company and start asynchronous Account Mapping enrichment for a partner workspace.
Resolves a company by domain, LinkedIn URL, or LinkedIn handle, then starts asynchronous enrichment for the target partner workspace's 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
Personas
The target 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 unless it is a relaunch), 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).
Relaunch
Pass relaunch: true to run the mapping again for an account that is already monitored, at no credit cost. A relaunch covers one persona: pass a single id in persona_ids (several ids returns 400), or omit it when the workspace has only one persona. The account must be monitored for that persona, otherwise the call returns 409.
Sillage picks the method and reports it in launches[].relaunch_method: quick_search looks the account's people up directly, and full_mapping runs a complete new mapping once that search has already been run for this persona. A full_mapping relaunch can run once every 24 hours for the same account and persona, otherwise the call returns 429.
Credit usage
This request is metered under the account_mapping_launch product — one credit per persona actually launched, refused as a whole if the balance cannot cover every persona this call would launch — plus one content_profile unit for each employee profile whose content is analyzed as enrichment continues. Track consumption with GET /v2/partner/usage.
Returns 422 if none of the workspace's personas can be mapped, or if persona_ids names an id that isn't one of the workspace's active personas. If a persona's own mapping later fails, its credit is refunded automatically.
Authentication
Use a partner master key. The target workspace is scoped by the URL path.
Authorization: Bearer $SILLAGE_API_KEYPath parameters
| Parameter | Type | Description |
|---|---|---|
| partner_workspace_id | string | Opaque workspace identifier from the partner system. |
Request body
Send one primary company identifier. You can send domain and linkedin_url together only when the LinkedIn URL disambiguates the domain. Do not send linkedin_handle with another identifier. Unknown extra fields in the body are ignored.
| Field | Type | Required | Description |
|---|---|---|---|
| domain | string | Conditional | Company domain, for example acme.com. Can be combined with linkedin_url to disambiguate. |
| linkedin_url | string | Conditional | LinkedIn company URL. Can be combined with domain to disambiguate. |
| linkedin_handle | string | Conditional | LinkedIn company slug after /company/, for example acme. |
| persona_ids | integer[] | Optional | Specific 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 the workspace's active personas returns 422 and nothing is launched. |
| relaunch | boolean | Optional | Set to true to run the mapping again for an account you already monitor, at no credit cost. Requires a single persona (see Relaunch). Returns 409 if the account is not monitored for that persona. |
Valid body examples:
{
"domain": "acme.com"
}Example request
curl "https://api.getsillage.com/api/v2/partner/workspaces/ws_123/enrich-company-mapping" \
-X POST \
-H "Authorization: Bearer $SILLAGE_API_KEY" \
-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 id to use when polling for completion. Poll Get a content request (GET .../content-requests/{request_id}) for any of them until the 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
| Header | Description |
|---|---|
| X-Request-Id | Request UUID for debugging and support. |
| X-Response-Time | Server response time. |
Response fields
| Field | Type | Description |
|---|---|---|
| status | string | Acceptance status. |
| request_id | integer | Deprecated. Id of the first launched (or, if none launched, first considered) persona's enrichment request. Use launches[].request_id instead, which reports every persona individually. Will be removed in a future major version. |
| stage | string | Current enrichment stage. |
| launches | array | One entry per persona this call considered for the workspace. |
| launches[].persona_id | integer | Id of the persona. |
| launches[].request_id | integer or null | Id of this persona's own enrichment request. null when the persona was skipped. |
| launches[].status | string | launched (a new request was created, and charged unless it is a relaunch), already_requested (already enriched today for this company, at no extra cost), skipped_no_location, or skipped_no_job_titles. |
| launches[].credits | integer | Credits charged for this persona by this call — 1 when launched by a regular enrichment, 0 otherwise, including every relaunch. |
| launches[].relaunch_method | string | Only present on a relaunch. quick_search: the account's people were looked up directly. full_mapping: a complete new mapping was started. |
Errors
| Status | Meaning |
|---|---|
| 400 | The request input is invalid. |
| 401 | The API key is missing or invalid. |
| 402 | Insufficient credits to launch every persona this call would map. |
| 403 | Account Mapping is not enabled for the workspace. |
| 409 | A conflicting enrichment request already exists, or a relaunch was requested for an account that is not monitored for that persona. |
| 422 | Either none of the workspace's personas can be mapped for this company, persona_ids names an id that isn't one of the workspace's active personas, or a relaunch was requested without persona_ids while the workspace has several personas. Nothing is launched in any case. See the two examples below. |
| 429 | Too many requests, or a full_mapping relaunch was already run for this account and persona in the last 24 hours. |
| 500 | An 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/partner/workspaces/ws_123/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 the workspace's active personas.",
"instance": "/api/v2/partner/workspaces/ws_123/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/partner/workspaces/ws_123/enrich-company-mapping"
}