ackDB

Merge two persons

Fuses two humans. The path person wins by default; winnerOverride (which must be one of the two ids) flips that. One transaction: keys move (exact dups dropped), the loser's edges re-point to the winner — a (person, company) collision folds the two edges via the contact-merge sub-cascade (events re-pointed, links/traits/ownership merged) — entity_events.person_id is restamped, the loser is tombstoned (merged_into), open candidates between the pair are closed, and person.identity.merged lands on the winner's person timeline with no company/contact, including when the winner has no affiliations. Historical company-associated person.merged rows remain readable.

Both ids are resolved through merge chains first, so a duplicate or concurrent merge is a no-op (merged: false), never an error. This endpoint and the batch one are the ONLY ways persons merge in ackDB — ingest never does.

post/api/v1/ackdb/persons/{personId}/merge

Request

  • Base URL
    http://localhost:3009
  • Auth
    HTTP bearer

Path parameters

personIdstring required

Person id (ULID = persons.person_id). A merged (tombstoned) id resolves to its survivor.

Request body

loserIdstring required
winnerOverridestring nullable

Example request

{
  "loserId": "01HABCD123456789EFGHIJK"
}

Response

{ data: PersonMergeResult }.

dataunknown required

Changes

No recorded changes to this operation across all 1 revision of this API.