VitrinaAPI

Adjuntar y conservar documentos

Subir documentos a una ficha y responder las solicitudes de acceso y supresión.

ClínicasSolo en los workspaces de clínicas.

POST /clinic/patients/{id}/documents cuelga un archivo de una ficha y GET /clinic/documents/{id}/content descarga sus bytes. Cada documento lleva una fecha hasta la cual hay que guardarlo. Responder a quien pide sus datos, o su borrado, es una obligación legal con plazos.

Sensible, y con una regla extra sobre los bytes

Pide clinic_record:read, o clinic_record:write para escribir, además del permiso de clínica. Cada lectura queda en el registro de accesos, y una aplicación conectada recibe 403 CONNECTED_APP_SENSITIVE_DATA. La descarga del archivo tampoco sale a una aplicación conectada, aunque la clínica haya permitido nombres (Datos personales y de salud).

Lo que hay colgado de una ficha

curl "https://api.vitrinadev.com/api/v1/clinic/patients/$PACIENTE/documents" \
  -H "Authorization: Bearer $VITRINA_KEY"
{
  "data": {
    "data": [
      {
        "id": "99999999-0000-4000-8000-000000000001",
        "clinic_patient_id": "12121212-0000-4000-8000-000000000001",
        "encounter_id": "44444444-0000-4000-8000-000000000001",
        "kind": "imagen",
        "title": "Radiografía panorámica",
        "mime_type": "application/pdf",
        "size_bytes": 182344,
        "sensitivity": "phi",
        "uploaded_source": "staff",
        "retention_until": "2041-09-22",
        "purged_at": null,
        "purge_reason": null,
        "created_at": "2026-09-22T21:53:03.510Z"
      }
    ],
    "total": 1,
    "page": 1,
    "limit": 50
  }
}
  • kind dice de qué tipo es, y con eso su plazo de conservación: examen, imagen, informe, receta, indicaciones, consentimiento, presupuesto, boleta, certificado, otro.
  • sensitivity separa lo clínico (phi) de lo administrativo. Una boleta y una radiografía comparten lista sin compartir trato.
  • uploaded_source dice quién lo subió: staff, el propio patient desde su enlace, un agent, una import o el system.
  • retention_until sale del tipo y de la política de la clínica (Conservación).
  • purged_at y purge_reason son la lápida. Un documento borrado no sale de la lista: queda qué había y por qué ya no está.

POST /clinic/documents/{id}/delete lo borra antes de su plazo, y por eso exige un motivo.

Los derechos del paciente

La Ley 21.719 le da a una persona el derecho a llevarse sus datos y a pedir que se los supriman. Las dos son solicitudes con estado: una ficha se arma, y una supresión se evalúa contra el plazo legal.

curl -X POST "https://api.vitrinadev.com/api/v1/clinic/patients/$PACIENTE/export" \
  -H "Authorization: Bearer $VITRINA_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Solicitud de acceso de la paciente, recibida en la recepción el 2026-09-22" }'

GET /clinic/privacy-requests lista las solicitudes con su estado, y GET /clinic/privacy-requests/{id}/download baja el archivo cuando el export está listo. El reason es obligatorio en las dos rutas: quién pidió qué y cuándo es parte de demostrar que se respondió a tiempo.

Supresión

POST /clinic/patients/{id}/erase pide la supresión, y lo que se puede borrar está acotado por el piso de conservación. Lo que la ley obliga a guardar no se borra porque alguien lo pida. La respuesta dice qué se borró y qué se conserva, con su fecha.

Eventos

EventoCuándo
clinic_document.uploadedEntró un documento a una ficha
clinic_document.deletedSe borró antes de su plazo, con su motivo
clinic_privacy_request.completedUn export o una supresión quedó lista

Los tres llegan como aviso, con data_omitted: "sensitive". Un evento nunca lleva el archivo ni un enlace que lo entregue sin credencial. Trae el id, y quien tenga el permiso lo descarga con el suyo. Esa descarga también queda registrada.

En esta página