VitrinaAPI

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.

Beta
This may change at any time, with a changelog entry and a notice to recent callers — see versioning.

Download the full API pública projection: openapi.json.

Quote a plan and close the till explains this resource in prose, with runnable examples.

MethodPathWhat it does
GET/clinic/evidence-cardsEvidence cards for the owner's home (at most three)
POST/clinic/evidence-cards/{rule_id}/dismissDismiss 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.

ParameterInTypeRequiredConstraints
rule_idpathpayments_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

On this page