Home panel suggestions
Up to three cards carrying the clinic's own number that justifies opening a module (payments without a receipt, unsettled commissions, unreconciled payments, accepted budgets without an appointment, advertising spend), and how to dismiss one for the member viewing it.
Download the full API pública projection: openapi.json.
Quote a plan and close the till explains this resource in prose, with runnable examples.
| Method | Path | What it does |
|---|---|---|
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"Example response (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
}
]
}
}Answers: 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.
| Parameter | In | Type | Required | Constraints |
|---|---|---|---|---|
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"Example response (200)
{
"data": {
"rule": "payments_without_boleta",
"dismissed_at": "2026-09-30T15:00:00.000Z",
"value": 1450000
}
}Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429
Clinic commissions
Each professional's commission history: the months Vitrina settles next to the liquidaciones Dentalink issued, imported read-only, and the Dentalink exports the clinic uploads.
Clinic supplies inventory
The clinic's supplies with their stock, minimum and last price; every entry, exit and count is recorded with who, when and why, and the ones below their minimum show as «Por reponer».