Sugerencias del panel de inicio
Hasta tres tarjetas con la cifra de la propia clínica que justifica abrir un módulo (pagos sin boleta, comisiones sin liquidar, pagos sin conciliar, presupuestos aceptados sin cita, gasto en publicidad), y cómo cerrar una para quien la ve.
Descarga la proyección completa de la API pública: openapi.json.
Presupuestar un plan y cerrar caja explica este recurso en prosa, con ejemplos ejecutables.
| Método | Ruta | Qué hace |
|---|---|---|
GET | /clinic/evidence-cards | Evidence cards for the owner's home (at most three) |
POST | /clinic/evidence-cards/{rule_id}/dismiss | Dismiss one evidence card for the calling member |
GET /clinic/evidence-cards
Evidence cards for the owner's home (at most three)
Deterministic, no model call. Each card carries rule, the proving number (\{ value, unit: "clp" | "count" \}), human-ready Spanish title / label / detail / cta_label, a workspace-relative route, and money_at_stake_clp. Ordered by money at stake, biggest first. A rule whose module is already set up, whose number is zero, or that the caller dismissed (and whose number has not grown in 30 days) is absent: an empty array means render nothing. The numbers are the destination modules' own (boletas, comisiones, conciliación, números comerciales, gastos).
Connected apps: every patient and contact in the response is a Seudónimo de paciente — initials plus a stable number, "M.F. · #1001" — unless the clinic allowed patient names, with RUT, phone and email masked in free text and meta.patient_privacy saying so. Clinical alerts (flags) are withheld in both modes, and a non-JSON body (an export, a file) is refused with 403 CONNECTED_APP_SENSITIVE_DATA.
curl https://api.vitrinadev.com/api/v1/clinic/evidence-cards \
-H "Authorization: Bearer $VITRINA_KEY"Ejemplo de respuesta (200)
{
"data": {
"cards": [
{
"rule": "payments_without_boleta",
"number": {
"value": 1450000,
"unit": "clp"
},
"label": "en pagos sin boleta este mes",
"title": "Este mes registraste $1.450.000 en pagos sin boleta",
"detail": "12 pagos sin documento tributario. Conecta la emisión electrónica y emite cada boleta desde el mismo pago.",
"cta_label": "Activar boletas",
"route": "/clinic/boletas?tab=emision",
"money_at_stake_clp": 1450000
}
]
}
}Responde: 200 · 400 · 401 · 403 · 404 · 409 · 429
POST /clinic/evidence-cards/{rule_id}/dismiss
Dismiss one evidence card for the calling member
Stored as a per-member preference (no table). The card returns only after 30 days AND only if its number grew since; the number is read server-side at dismissal time, never taken from the caller.
Connected apps: every patient and contact in the response is a Seudónimo de paciente — initials plus a stable number, "M.F. · #1001" — unless the clinic allowed patient names, with RUT, phone and email masked in free text and meta.patient_privacy saying so. Clinical alerts (flags) are withheld in both modes, and a non-JSON body (an export, a file) is refused with 403 CONNECTED_APP_SENSITIVE_DATA.
| Parámetro | En | Tipo | Obligatorio | Restricciones |
|---|---|---|---|---|
rule_id | path | payments_without_boleta \ | commissions_unsettled \ | payments_unreconciled \ |
curl -X POST https://api.vitrinadev.com/api/v1/clinic/evidence-cards/<id>/dismiss \
-H "Authorization: Bearer $VITRINA_KEY"Ejemplo de respuesta (200)
{
"data": {
"rule": "payments_without_boleta",
"dismissed_at": "2026-09-30T15:00:00.000Z",
"value": 1450000
}
}Responde: 200 · 400 · 401 · 403 · 404 · 409 · 429
Comisiones de la clínica
El historial de comisiones de cada profesional: los meses que liquida Vitrina junto a las liquidaciones que emitió Dentalink, importadas de solo lectura, y las exportaciones de Dentalink que suba la clínica.
Inventario de insumos
Los insumos de la clínica con su stock, mínimo y último precio; cada entrada, salida y conteo queda registrado con quién, cuándo y por qué, y los que están bajo su mínimo salen como «Por reponer».