---
title: "Record a resolution"
method: POST
path: "/org/gaps/{gapId}/resolutions"
tags: ["Gaps"]
---

# Record a resolution

`POST /org/gaps/{gapId}/resolutions`

## Request

- Base URL: `https://apiv2.senso.ai/api/v1`
- URL: `https://apiv2.senso.ai/api/v1/org/gaps/{gapId}/resolutions`
- Auth: API key in header `X-API-Key`

Records what was done about a gap and moves its status accordingly.

- `answered`, `content_added`, `content_updated` → `addressed`. Each requires `produced_content_id`.
- `ruled_kb_correct`, `we_dont_do_this` → `resolved`.
- `dismissed`, `not_relevant`, `source_irrelevant` → `dismissed`. `source_irrelevant` requires `authority_content_id`.
- `ruled_claim_correct`, `ruled_document` → no status change. The ruling is recorded, and an open gap shows `awaiting_update` in the list until a follow-up resolution such as `content_updated` moves it. Each requires `authority_content_id`.

A resolution recorded with an API key names no person, so it has no `resolved_by_name` or `resolved_by_email`.

## Path parameters

- `gapId` string, uuid, required

## Request body

- CreateGapResolutionRequest
  - `resolution_type` 'answered' | 'content_added' | 'content_updated' | 'ruled_kb_correct' | 'ruled_claim_correct' | 'ruled_document' | 'dismissed' | 'not_relevant' | 'we_dont_do_this' | 'source_irrelevant', required: What was decided about a gap. See `POST /org/gaps/{gapId}/resolutions` for the effect of each.
  - `produced_content_id` string, uuid: The content that was written. Required for `answered`, `content_added` and `content_updated`.
  - `authority_content_id` string, uuid: The document the decision is about. Required for `ruled_claim_correct`, `ruled_document` and `source_irrelevant`.
  - `ruling_side` 'kb' | 'claim' | 'document': Which side a ruling found correct.
  - `notes` string

## Response `201`

The recorded resolution.

- GapResolution: One decision recorded against a gap.
  - `resolution_id` string, uuid, required
  - `resolution_type` 'answered' | 'content_added' | 'content_updated' | 'ruled_kb_correct' | 'ruled_claim_correct' | 'ruled_document' | 'dismissed' | 'not_relevant' | 'we_dont_do_this' | 'source_irrelevant', required: What was decided about a gap. See `POST /org/gaps/{gapId}/resolutions` for the effect of each.
  - `ruling_side` 'kb' | 'claim' | 'document'
  - `authority_content_id` string, uuid
  - `authority_content_version_id` string, uuid
  - `produced_content_id` string, uuid
  - `produced_content_version_id` string, uuid
  - `notes` string
  - `resolved_by_name` string: The person who recorded it. Absent when it was recorded with an API key.
  - `resolved_by_email` string: Absent when it was recorded with an API key.
  - `created_at` string, date-time, required

## Other responses

- `400`: The body was malformed, `resolution_type` is missing or unknown, a content id the type requires is missing, or the gap does not exist in your organization.
- `401`: Missing or invalid credentials — supply a valid org API key in the `X-API-Key` header.
- `403`: The API key is authenticated but not permitted to access this resource.

---

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