VitrinaAPI

Improvements

What the nightly reviewer found in your agent: dismiss or resolve a finding, and rate a handoff.

Beta
This may change at any time, with a changelog entry and a notice to recent callers — see versioning.

Download the full API pública projection: openapi.json.

MethodPathWhat it does
PATCH/ai-agents/{id}/findings/{findingId}Mark a finding addressed, dismissed (with a note) or reopen it
POST/conversations/{id}/handoff-feedbackThe assigned human's answer to "could the agent have avoided this handoff?"

PATCH /ai-agents/{id}/findings/{findingId}

Mark a finding addressed, dismissed (with a note) or reopen it

Sets status to addressed, dismissed or open. addressed and dismissed stamp who decided and when; dismissed also stores the optional note as dismiss_note. Reopening with open clears those stamps. Recorded in the audit log and refreshes the agent's Coach notices. Needs the corrections:write scope; 404 when the finding does not belong to the agent in this workspace. Answers the updated finding.

ParameterInTypeRequiredConstraints
idpathuuidyes
findingIdpathuuidyes

Body

FieldTypeRequiredConstraints
statusopen \addressed \dismissed
notestring—máx. 1000
curl -X PATCH https://api.vitrinadev.com/api/v1/ai-agents/<id>/findings/<id> \
  -H "Authorization: Bearer $VITRINA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "dismissed",
    "note": "Es un caso aislado de una campaña ya terminada."
  }'

Example response (200)

{
  "data": {
    "id": "7b7b7b7b-0000-4000-8000-000000000011",
    "tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
    "ai_agent_id": "7b7b7b7b-0000-4000-8000-000000000001",
    "kind": "missing_knowledge",
    "topic_key": "horarios-de-atencion",
    "title": "El agente no sabe los horarios de atención de la sucursal",
    "description": "Varios clientes preguntaron por el horario de sábado sin obtener respuesta.",
    "status": "dismissed",
    "first_seen_at": "2026-09-20T15:00:00.000Z",
    "last_seen_at": "2026-10-08T18:30:00.000Z",
    "occurrence_count": 7,
    "sample_conversation_ids": [
      "bbbbbbbb-0000-4000-8000-000000000001",
      "bbbbbbbb-0000-4000-8000-000000000002"
    ],
    "investigation": null,
    "investigated_at": null,
    "investigation_error": null,
    "addressed_at": null,
    "addressed_by": null,
    "dismissed_at": "2026-10-09T10:00:00.000Z",
    "dismissed_by": "11111111-0000-4000-8000-000000000001",
    "dismiss_note": "Es un caso aislado de una campaña ya terminada.",
    "created_at": "2026-09-20T15:00:00.000Z",
    "updated_at": "2026-10-09T10:00:00.000Z"
  }
}

Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429

POST /conversations/{id}/handoff-feedback

The assigned human's answer to "could the agent have avoided this handoff?"

skipped only records that the card was dismissed; any other verdict queues a review that reads the note as first-hand evidence.

ParameterInTypeRequiredConstraints
idpathstringyesmín. 1

Body

FieldTypeRequiredConstraints
verdictmissing_knowledge \missing_capability \wrong_behavior \
notestring | null—máx. 1000
curl -X POST https://api.vitrinadev.com/api/v1/conversations/<id>/handoff-feedback \
  -H "Authorization: Bearer $VITRINA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verdict": "missing_knowledge",
    "note": "Preguntó por el horario de sábado y el agente no tenía el dato."
  }'

Example response (201)

{
  "data": {
    "feedback": {
      "verdict": "missing_knowledge",
      "note": "Preguntó por el horario de sábado y el agente no tenía el dato.",
      "user_id": "11111111-0000-4000-8000-000000000001",
      "at": "2026-10-09T10:00:00.000Z"
    },
    "review_status": "pending"
  }
}

Answers: 201 · 400 · 401 · 403 · 404 · 409 · 429

On this page