Skip to content

Return a confirmed suggestion to Proposed

Settings module

POST/ai-suggestions/{id}/reopenaiSuggestions.reopen

Returns a Confirmed suggestion to Proposed when the public API refused the write, naming the refusal. Requires `Idempotency-Key`; a replay returns the original response. A rule that refuses the request returns 422 with `refusal` and `reason`.

  • Requires the capability home.dashboard.read.
  • OAuth scopes: home.
  • Send an Idempotency-Key header. A replay with the same key returns the original response.
  • Error statuses: 400, 401, 404, 409, 422, 429. Errors are RFC 9457 problem details.

Path and query parameters

aiSuggestions.reopen: Path and query parameters
FieldTypeRequiredDescription
idstring (uuid)YesIdentifier of the ai suggestion.

Request body: AiSuggestionReopenRequest

aiSuggestions.reopen: AiSuggestionReopenRequest
FieldTypeRequiredDescription
reasonstringYesWhy, recorded in the suggestion ledger.Constraints: length 1 to 500
{
  "reason": "Checked against the certificate."
}

Response 200: AiSuggestion

aiSuggestions.reopen: AiSuggestion
FieldTypeRequiredDescription
idstring (uuid)YesIdentifier of the ai suggestion.
org_idstring (uuid)YesIdentifier of the owning organization, derived from the parent row and never accepted from the caller.
created_atstring (date-time)YesWhen the row was created.
created_bystring (uuid) | nullYesIdentifier of the person who created the row.
updated_atstring (date-time)YesWhen the row was last updated.
updated_bystring (uuid) | nullYesIdentifier of the person who last updated the row.
request_idstring (uuid)YesIdentifier of the AI request that proposed the change.
operation_idstringYesPublic API operation that performs the change.Constraints: length 1 to 100
target_idstring (uuid) | nullYesIdentifier of the record the change updates; null when it creates one.
summarystringYesWhat will change, shown on the confirmation step.Constraints: length 1 to 1000
suggestion_stateAiSuggestionStateYesProposed and waiting for the person who asked, Confirmed by them, Applied once the public API accepted the write, Rejected, or Expired unanswered.Constraints: one of "Proposed", "Confirmed", "Applied", "Rejected", "Expired"
expires_atstring (date-time)YesAfter this time the suggestion can no longer be confirmed.
applied_idstring (uuid) | nullYesIdentifier of the record the public API wrote, once Applied.
proposed_fieldsarray of AiSuggestionFieldYesProposed fields in confirmation order.
{
  "id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "org_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "created_at": "2026-10-08T14:30:00Z",
  "created_by": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "updated_at": "2026-10-08T14:30:00Z",
  "updated_by": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "request_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "operation_id": "insuranceCertificates.create",
  "target_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "summary": "Add the Atlantic Mutual general liability certificate.",
  "suggestion_state": "Proposed",
  "expires_at": "2026-10-08T14:30:00Z",
  "applied_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "proposed_fields": [
    {
      "field_path": "expires_on",
      "proposed_value": "2027-03-31",
      "confidence": 0.91,
      "refusal": null,
      "missing": null,
      "source_excerpt": "Policy expiration 03/31/2027",
      "provenance": "agent"
    }
  ]
}

Code samples

curl -X POST "$XOS_BASE_URL/ai-suggestions/0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f/reopen" \
  -H "Authorization: Bearer $XOS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Checked against the certificate."}'
const { data } = await xos.aiSuggestions.reopen("0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f", {
    "reason": "Checked against the certificate."
  });
response = xos.ai_suggestions.reopen("0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f", {"reason": "Checked against the certificate."})
xos ai-suggestions reopen 0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f --data '{"reason":"Checked against the certificate."}'