Documentation menu

API reference

21 operations in config-items. Raw spec: openapi.json.

GET/api/v1/config-items

GET /api/config-items — active items only (merged tombstones excluded).

Parameters

NameInTypeRequiredDescription
client_idquery—No
layout_idquery—No
semantic_classquery—NoCI6 semantic class filter (workstation | server | vm | network_appliance | printer | iot).
qquery—No

Responses

StatusDescription
200

Security: bearer

POST/api/v1/config-items/feed-upsert

POST /api/config-items/feed-upsert — CI2: the single feeder write path (lane 8's seam). Never blind-inserts: existing (source_system, external_id) links resolve to their own item; identity keys resolve the deterministic case; ambiguity queues reviewable candidates and only auto-merges at/above the org threshold.

Request body

FeedUpsertRequest

Responses

StatusDescription
200
409idempotency key reused
422source system / external id validation

Security: bearer

DELETE/api/v1/config-items/interfaces/{id}

DELETE /api/config-items/interfaces/{id}

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200

Security: bearer

GET/api/v1/config-items/merge-candidates

GET /api/config-items/merge-candidates — the review queue.

Parameters

NameInTypeRequiredDescription
statusquery—Nopending | auto_merged | accepted | rejected

Responses

StatusDescription
200

Security: bearer

POST/api/v1/config-items/merge-candidates/batch

POST /api/config-items/merge-candidates/batch — accept/reject/defer N candidates in ONE call. Every ACCEPT is an audited, individually undoable merge (per-candidate split substrate); a failed member never aborts the batch (per-item outcome, never a silent partial).

Request body

BatchCandidateRequest

Responses

StatusDescription
200
422unknown batch action / empty id list

Security: bearer

POST/api/v1/config-items/merge-candidates/{id}/accept

POST /api/config-items/merge-candidates/{id}/accept — fold the candidate into the primary with the candidate's evidence attached.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404candidate not visible in scope
409candidate already decided

Security: bearer

POST/api/v1/config-items/merge-candidates/{id}/defer

POST /api/config-items/merge-candidates/{id}/defer — park the candidate out of the pending queue WITHOUT deciding it (reversible via restore; a feed upsert refreshes evidence but never un-defers silently).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404candidate not visible in scope
409candidate already decided

Security: bearer

POST/api/v1/config-items/merge-candidates/{id}/reject

POST /api/config-items/merge-candidates/{id}/reject — keep both items.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404candidate not visible in scope
409candidate already decided

Security: bearer

POST/api/v1/config-items/merge-candidates/{id}/restore

POST /api/config-items/merge-candidates/{id}/restore — un-defer: a parked candidate returns to the pending queue.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404candidate not visible in scope
409candidate is not deferred

Security: bearer

GET/api/v1/config-items/merge-candidates/{id}/workbench

GET /api/config-items/merge-candidates/{id}/workbench — the guided merge workbench's read model: side-by-side cards across ALL ConfigSourceLinks, the field-by-field picker rows, the inline deterministic + decision evidence, and the threshold context.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404candidate not visible in scope

Security: bearer

POST/api/v1/config-items/merges/{id}/split

POST /api/config-items/merges/{id}/split — undo a merge (IF7): links, interfaces, and field tiers ride back from the audit row's packet.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404merge not visible in scope
409merge already undone

Security: bearer

GET/api/v1/config-items/precedence

GET /api/config-items/precedence — org overrides (shipped ADR defaults resolve in Rust when no row matches).

Responses

StatusDescription
200

Security: bearer

PUT/api/v1/config-items/precedence

PUT /api/config-items/precedence — a per-type/per-source precedence override (CI5). Upserts by (layout, field, source).

Request body

UpsertPrecedenceRequest

Responses

StatusDescription
200
422unknown semantic class

Security: bearer

GET/api/v1/config-items/settings

GET /api/config-items/settings — the org's auto-merge threshold.

Responses

StatusDescription
200

Security: bearer

PUT/api/v1/config-items/settings

PUT /api/config-items/settings — the org's auto-merge confidence threshold (CI4).

Request body

UpdateSettingsRequest

Responses

StatusDescription
200
422threshold out of range

Security: bearer

GET/api/v1/config-items/{id}

GET /api/config-items/{id} — the CI with its source links + interfaces.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404config item not visible in scope

Security: bearer

PATCH/api/v1/config-items/{id}

PATCH /api/config-items/{id} — human curation (CI5): curated values are sticky forever; feeds never auto-overwrite them afterwards.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

CurateFieldsRequest

Responses

StatusDescription
200
404config item not visible in scope
409version conflict or idempotency key reused

Security: bearer

POST/api/v1/config-items/{id}/accept-observed

POST /api/config-items/{id}/accept-observed — CI5 one-click "accept the new value": promotes the observed value into the sticky curated tier.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

AcceptObservedRequest

Responses

StatusDescription
200
404config item not visible in scope
409no observed value for that field / version conflict

Security: bearer

POST/api/v1/config-items/{id}/interfaces

POST /api/config-items/{id}/interfaces — record a NIC (ADR 0003 lifecycle rule: NICs are attributes, not their own CIs).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

CreateInterfaceRequest

Responses

StatusDescription
200
404config item not visible in scope

Security: bearer

POST/api/v1/config-items/{id}/merge

POST /api/config-items/{id}/merge — an explicit human merge (the queue's accept path rides this too). Audited + undoable (split).

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

CiMergeRequest

Responses

StatusDescription
200
404config item not visible in scope
409cannot merge an item into itself / already merged

Security: bearer

GET/api/v1/config-items/{id}/merges

GET /api/config-items/{id}/merges — the item's merge audit trail.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200

Security: bearer