Handling ambiguous identity matches

When Anchord finds multiple plausible matches and can't pick one with confidence, it returns needs_review instead of guessing. This is the key safety mechanism that prevents agents from writing to the wrong record.

When this happens

Endpoints involved

EndpointSignal
POST /api/v1/resolve/companystatus: "needs_review"
POST /api/v1/resolve/personstatus: "needs_review"
POST /api/v1/guard/writeallowed: false with blocks array

What the response looks like

{
  "status": "needs_review",
  "safe_to_write": false,
  "candidates": [
    { "entity_id": "ent_111", "confidence": 0.92 },
    { "entity_id": "ent_222", "confidence": 0.90 }
  ],
  "conflicts": ["AMBIGUOUS_CANDIDATES"],
  "attempt_id": "att_xyz789"
}

Key fields: attempt_id (links to the Review Queue), candidates (competing matches with scores), safe_to_write: false (explicit signal to stop).

What the agent should do

1

Stop — do not write

Do not pick a candidate programmatically. The point is that the system couldn't, so the agent shouldn't either.

2

Escalate to a human

Store the attempt_id and link the user to the Review Queue, where they can confirm, dismiss, defer, or create a new entity.

3

Retry after resolution

Once the human resolves the ambiguity, the same resolve call returns resolved with a stable AnchorID. Proceed to guard and write.

Dive deeper