Dealership insights
The Comisiones export for the month-end close, as Excel or CSV: one row per seller and deal with the commission arithmetic visible, and a summary of what each person is owed.
Download the full API pública projection: openapi.json.
Read the deal figures explains this resource in prose, with runnable examples.
| Method | Path | What it does |
|---|---|---|
GET | /insights/resultados | What the AI did for the agenda (any vertical) |
GET | /insights/seller-performance/export | Exportar comisiones — the month-end payroll file (Excel or CSV) |
GET /insights/resultados
What the AI did for the agenda (any vertical)
The same facts as GET /clinic/insights/resultados, for any vertical, with the vertical's vocabulary (family: a dealer reads visits and test drives, clientes). Blocks with no data for the vertical come back applies: false (money, confirmation, reminders for a dealer) rather than as zeros. Aggregates only. Requires analytics:read; CLP figures additionally require clinic_money:read. Accepts from / to (bare YYYY-MM-DD, to inclusive; default the 90 days ending today) and location_id.
| Parameter | In | Type | Required | Constraints |
|---|---|---|---|---|
from | query | string | no | patrón ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ |
to | query | string | no | patrón ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ |
location_id | query | uuid | no |
curl https://api.vitrinadev.com/api/v1/insights/resultados \
-H "Authorization: Bearer $VITRINA_KEY"Example response (200)
{
"data": {
"from": "2026-07-01",
"to": "2026-09-28",
"timezone": "America/Santiago",
"location_id": null,
"family": "clinic",
"previous_period": {
"from": "2026-04-02",
"to": "2026-06-30"
},
"bookings": {
"ai": 286,
"agenda_total": 2011,
"share_pct": 14.2,
"previous": {
"ai": 240,
"agenda_total": 1950,
"share_pct": 12.3
},
"rule": "Citas del período (por la fecha de la cita) que agendó el asistente de Vitrina en una conversación, ÷ todas las citas del período."
},
"money": {
"applies": true,
"withheld": false,
"booked_clp": 11400000,
"booked_priced": 271,
"booked_unpriced": 15,
"agenda_clp": 96000000,
"clp_share_pct": 11.9,
"paid_clp": 7250000,
"paid_patients": 164,
"unlinked": 4,
"regime": "mirror",
"previous": {
"booked_clp": 9800000,
"paid_clp": 6100000
},
"rule_booked": "Valor de las citas que agendó Vitrina: el precio de sus prestaciones, o el del catálogo. Es lo agendado, no lo cobrado.",
"rule_paid": "Pagos recibidos en el período por los pacientes que Vitrina agendó, desde el día en que los agendó."
},
"out_of_hours": {
"configured": true,
"count": 111,
"pct": 38.8,
"previous_pct": 36.1,
"heatmap": [
{
"weekday": 1,
"hour": 21,
"count": 9
},
{
"weekday": 6,
"hour": 11,
"count": 14
}
],
"rule": "Citas que Vitrina agendó mientras tu negocio estaba cerrado, según tu horario de atención (incluye feriados)."
},
"autonomy": {
"no_human": 158,
"pct": 56.6,
"measured": 279,
"unknown": 7,
"previous_pct": 52,
"rule": "Citas de Vitrina en las que nadie de tu equipo escribió en la conversación antes de agendar."
},
"time_to_book": {
"median_seconds": 734,
"p95_seconds": 80100,
"p95_phrase": "5 de cada 100 personas tardan más de 22 h 15 min en quedar agendadas.",
"measured": 279,
"unknown": 7,
"previous_median_seconds": 910,
"rule": "Tiempo desde el primer mensaje del paciente hasta que su cita quedó agendada (la mediana)."
},
"hours_returned": {
"minutes_per_booking": 10,
"hours": 47.7,
"rule": "Cada cita que agenda Vitrina ahorra 10 minutos de responder y agendar a mano."
},
"recovery": {
"window_days": 30,
"known_attendance": 1063,
"unknown_attendance": 21,
"no_show_pct": 10.2,
"no_show": {
"count": 108,
"recovered": 37,
"recovered_via_vitrina": 17,
"recovered_pct": 34.6,
"via_vitrina_pct": 15.9,
"pending": 12,
"unlinked": 1
},
"cancelled": {
"count": 240,
"recovered": 26,
"recovered_via_vitrina": 11,
"recovered_pct": 10.8,
"via_vitrina_pct": 4.6,
"pending": 18,
"unlinked": 0
},
"rule_no_show": "Citas pasadas marcadas como «no asistió» ÷ citas con asistencia conocida (asistió + no asistió).",
"rule_recovered": "Una cita perdida se recupera cuando el mismo paciente agenda otra dentro de 30 días."
},
"confirmation": {
"applies": true,
"confirmed_attendance_pct": 93.1,
"unconfirmed_attendance_pct": 78.4,
"confirmed_closed": 610,
"unconfirmed_closed": 212,
"rule": "Asistencia de las citas cuyo paciente confirmó el recordatorio, frente a las que nunca respondieron."
},
"ads": {
"state": "active",
"spend_clp": 1648000,
"booked": 58,
"attended": 41,
"paid": 22,
"cost_per_booked": 28414,
"cost_per_attended": 40195,
"cost_per_paid": 74909,
"rule": "Inversión en anuncios del período ÷ citas agendadas, asistidas y pacientes de anuncios que pagaron, según Vitrina Ads para las mismas fechas."
},
"reminders": {
"applies": true,
"sent": 721,
"failed": 120,
"failed_pct": 14.3,
"by_cause": [
{
"cause": "no_whatsapp",
"count": 61
},
{
"cause": "no_phone",
"count": 38
},
{
"cause": "meta_payment_block",
"count": 21
}
],
"rule": "Recordatorios de citas del período que no salieron, agrupados por la causa que registró el envío."
},
"truncated": false
}
}Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429
GET /insights/seller-performance/export
Exportar comisiones — the month-end payroll file (Excel or CSV)
The same figures as the report above, rendered as an .xlsx workbook (default) or, with ?format=csv, a ;-separated UTF-8 CSV of the ledger, on the same export rail as GET /vehicles/export: sheet "Comisiones" is one row per seller per deal with the commission arithmetic visible (base × «Tasa %» → comisión; rates are percentages, never basis points; dates are dd-mm-aaaa hh:mm on the America/Santiago clock), sheet "Resumen" is what to pay each person. Same ?window= parameter and the same dealership_economics:read gate as the report — a file must not be pullable for a period or by a principal the screen refuses. Content-Disposition carries the generated filename (comisiones-<periodo>-<YYYY-MM-DD>.xlsx). Audited.
| Parameter | In | Type | Required | Constraints |
|---|---|---|---|---|
window | query | 24h \ | 7d \ | 30d \ |
month | query | string | no | patrón ^\d{4}-(0[1-9]|1[0-2])$ |
year | query | string | no | patrón ^\d{4}$ |
from | query | string | no | |
to | query | string | no | |
format | query | xlsx \ | csv | no |
curl https://api.vitrinadev.com/api/v1/insights/seller-performance/export \
-H "Authorization: Bearer $VITRINA_KEY"Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429
Inbox views
Saved inbox filters, team-wide or personal, by conversation attributes; a team view can take its conversations out of «Esperando respuesta».
Instagram posts
Prepare a vehicle's Instagram post (a caption written in the dealership's own style, plus the first photos) and approve it to publish or schedule it. Nothing posts without the approval.