Undo a merge of this person into another, with evidence (session only)
const url = 'https://quikstik-core.fly.dev/persons/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/unmerge';const options = { method: 'POST', headers: { 'x-tenant-id': '2489E9AD-2EE2-8E00-8EC9-32D5F69181C0', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"merge_event_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","evidence":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://quikstik-core.fly.dev/persons/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/unmerge \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'x-tenant-id: 2489E9AD-2EE2-8E00-8EC9-32D5F69181C0' \ --data '{ "merge_event_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "evidence": "example" }'A human decision: session bearer only (an operator key is 401). person_id
is the person that was folded away; merge_event_id is the event_id the merge returned. The
store restores exactly what that merge moved (identities, threads, messages, the person’s
prior status) and records a reversible unmerge event. 404 merge_not_found when the event
is not a merge of person_id (nothing changes); 409 not_unmergeable when it is not a merge
or was already undone. Rooms follow on the next rebuild.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Header Parameters
Section titled “Header Parameters”Tenant identifier (UUID).
Authn/authz semantics are intentionally TBD for this contract slice; this header exists to keep the contract explicitly multi-tenant from day 0.
Request Bodyrequired
Section titled “Request Bodyrequired”object
The event_id the merge returned.
One line — what was wrong with the merge.
Example generated
{ "merge_event_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "evidence": "example"}Responses
Section titled “Responses”Undone.
object
object
Example generated
{ "event_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "from_person_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "to_person_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "moved": { "identities": 1, "threads": 1, "messages": 1 }}Missing or invalid session bearer token
object
Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).
Example
{ "reason": "sold_out"}The session’s effect authority does not cover this operation
object
Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).
Example
{ "reason": "sold_out"}Expired, consumed, unknown, or unresolvable — indistinguishable by design
object
Example generated
{ "reason": "example"}Not a merge, or already undone (not_unmergeable).
Missing/over-long evidence.
No durable backend is wired for this operation (fail-closed)
object
Stable, machine-readable reason code (e.g. “sold_out”, “processor_not_configured”, “rail_refused”).
Example
{ "reason": "sold_out"}