---
title: "The first-writer-wins conflict ledger"
method: GET
path: "/api/v1/ackdb/persons/merge-candidates"
tags: ["ackDB"]
---

# The first-writer-wins conflict ledger

`GET /api/v1/ackdb/persons/merge-candidates`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/ackdb/persons/merge-candidates`
- Auth: HTTP bearer

Every durable-key write that hit a value owned by ANOTHER human lands here instead of merging (ackDB never auto-merges people). Rows carry the contested key, the evidence payload that asserted it, and both persons (hydrated with names). A repeat of the same conflict bumps `updatedAt` rather than adding a row, and a DISMISSED candidate stays dismissed on re-conflict.

Consume the queue with `POST /persons/{personId}/merge` (one pair) or `POST /persons/merge-duplicates` (batch).

## Query parameters

- `status` 'open' | 'merged' | 'dismissed'
- `limit` integer
- `offset` integer

## Response `200`

`{ data: MergeCandidate[] (+ personAName/personBName), total, limit, offset }`.

- object
  - `data` unknown, required

## Other responses

- `400`: Unknown status value.

---

[API](https://skmtc.dev/floqer/apis/floqer-public-api.md) - [All operations](https://skmtc.dev/floqer/apis/floqer-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/floqer/apis/floqer-public-api/revisions/fce50dc07b20?raw)
