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
}
}kinddice de qué tipo es, y con eso su plazo de conservación:examen,imagen,informe,receta,indicaciones,consentimiento,presupuesto,boleta,certificado,otro.sensitivitysepara lo clínico (phi) de lo administrativo. Una boleta y una radiografía comparten lista sin compartir trato.uploaded_sourcedice quién lo subió:staff, el propiopatientdesde su enlace, unagent, unaimporto elsystem.retention_untilsale del tipo y de la política de la clínica (Conservación).purged_atypurge_reasonson 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
| Evento | Cuándo |
|---|---|
clinic_document.uploaded | Entró un documento a una ficha |
clinic_document.deleted | Se borró antes de su plazo, con su motivo |
clinic_privacy_request.completed | Un 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.