VitrinaAPI

Mejoras

Lo que el revisor nocturno encontró en tu agente: descartar o marcar resuelto un hallazgo, y calificar una derivación.

Beta
Puede cambiar en cualquier momento, con una entrada en el changelog y aviso a quienes la llamaron recientemente — ver versionado.

Descarga la proyección completa de la API pública: openapi.json.

MétodoRutaQué hace
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.

ParámetroEnTipoObligatorioRestricciones
idpathuuidsí
findingIdpathuuidsí

Cuerpo

CampoTipoObligatorioRestricciones
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."
  }'

Ejemplo de respuesta (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"
  }
}

Responde: 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.

ParámetroEnTipoObligatorioRestricciones
idpathstringsímín. 1

Cuerpo

CampoTipoObligatorioRestricciones
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."
  }'

Ejemplo de respuesta (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"
  }
}

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

En esta página