Attach a durable key
Scope-validated (person-scope types only), normalized (lowercased email / canonical LinkedIn), and first-writer-wins: a value owned by another human is 409 — the response names the owning person AND the merge_candidates row it just recorded, and nothing is written. Adding a SECOND linkedin_url to one person is also 409 + candidate (a slug change and two different humans look identical from here — a person decides). Re-adding a key the person already holds is an idempotent 200.
Email is a fallback anchor (#575). An email_address is added only when the person has NO linkedin_url anchor. A clean email on a linkedin-anchored person is DECLINED with 200 { data: null, suppressed: true, stored: false, reason } — this door has no contact edge, so the value is not stored anywhere (set it on a contact to keep it as contacts.email context). A conflict still wins first: an email owned by another human is 409 + candidate even on a linkedin-anchored person.
Request
- Base URLhttp://localhost:3009
- AuthHTTP bearer
Path parameters
Person id (ULID = persons.person_id). A merged (tombstoned) id resolves to its survivor.
Request body
Example request
{
"externalIdType": "linkedin_url",
"externalIdValue": "https://www.linkedin.com/in/ellychen/"
}Response
The person already held this key — nothing changed.
Changes
No recorded changes to this operation across all 1 revision of this API.