Files
bookhoard/docs/developer/api/conflicts/resolve_conflict.md
T
John O'Keefe eacc33bfac docs(conflicts,queue): Beam WO5 batch — 13 endpoints backfilled, registry pinned
Beam added frontmatter + provenance + labeled examples to the 7 conflict and
6 queue docs, fixing real field drift on the way (resolve response keys,
bulk result shape, dismiss-all deleted count, queue stats counts).

Claude registry verification found TWO Beam catches of Claude's own draft:
- queue routes use :device_id / :item_id params (registry first draft said :id)
- resolve_conflict DOES take a body (ConflictResolutionRequest) — registry
  first draft said nil
Both fixed; gate then surfaced one real Beam defect: example-request used a
nonexistent "resolution" field in resolve + bulk-resolve (real contract:
winner=<source|manual> with required manual_data for manual; strategy=
most_recent|highest_progress|manual). Fixed in the docs.

Pinned by type: ConflictListResponse, ConflictDetailResponse,
ConflictResolveResponse, BulkResolveRequest/Response, QueueStatsResponse,
ConflictResolutionRequest. dismiss-all deleted is an int count.
2026-10-24 15:37:45 -04:00

58 lines
1.4 KiB
Markdown

---
method: POST
path: /api/conflicts/:id/resolve
auth: jwt
area: conflicts
---
<!-- source: internal/handlers/conflicts.go:208 ConflictHandler.ResolveConflict -->
# Resolve Conflict
Resolve a specific conflict by choosing which version to keep.
**Endpoint**: `POST /api/conflicts/:id/resolve`
**Auth**: Required
**Content-Type**: `application/json`
## Path Parameters
| Parameter | Type | Required | Description |
| --------- | ------------- | -------- | ------------- |
| id | string (UUID) | Yes | Conflict UUID |
## Request Body
| Field | Type | Required | Description |
| ---------- | ------ | -------- | -------------------------------------------------------------- |
| resolution | string | Yes | Resolution strategy: "device", "server", or "highest_progress" |
### Example Request
```json example-request
{
"winner": "kobo"
}
```
`winner` is one of the conflict's source keys (e.g. `"kobo"`, `"koreader"`,
`"web"`) or `"manual"` — the latter requires `manual_data`.
## Response (200 OK)
```json example-response
{
"conflict_resolved": true,
"applied_to": {},
"devices_synced": []
}
```
## Error Responses
| Code | Description |
| ---- | --------------------------- |
| 400 | Invalid resolution strategy |
| 401 | Invalid or expired token |
| 404 | Conflict not found |
| 400 | Conflict already resolved |