Resolve conversation counterpart
Turn what a user pasted (a linkedin.com/in/ link, a Sales Navigator or Recruiter link, a bare slug or a raw URN) into the identity a thread can be born on: the canonical member id plus the other axes the answer carried, and the playtables person it links to. Call it before send_message when you only have a link.
The ladder runs cheapest first and stops at the first rung that answers: the normalizer names the one axis in the target; a URN decodes to the member id with no wire call; a slug is looked up against the team's playtables people, the sender profile's first-degree connections and the data corpus, and only then against a lite profile read, which spends one enrichment slot and can answer 429 with retry_after. result.resolution.source names the rung (free or paid).
People are never created here: a null person_sid is a normal answer, the thread stays unlinked. What a wire rung learned is written onto an existing person fill-if-empty, so the next resolve is free. No LinkedIn URL is returned or stored: the axes travel, a screen rebuilds a link from ln_nickname. 422 when the target is not a profile target, the URN will not decode, the profile stays unresolvable, or the sender profile has no LinkedIn account. A rung nobody could answer is a pause, never a verdict, and no rung behind it runs: 429 gtm_busy, 403 gtm_access_lost or gtm_scope_missing, 503 gtm_unavailable, gtm_bridge_unavailable or playtables_unavailable: try again later.
Contract:
- MCP tool resolve_conversation_counterpart, registry package mcp.unibox/conversations, mount unibox.inbox.
- Operation action, response envelope action.
- Flags: none.
Request
- Base URLhttps://beta.getsales.io/unibox/v1
- AuthHTTP bearer and API key in header Team-SID
Request body
Response
action success envelope.
Changes
No recorded changes to this operation across all 1 revision of this API.