Llevar el expediente del auto a tu sistema
El costo, la etapa de preparación, los papeles y el margen, en orden.
AutomotorasSolo en los workspaces de automotoras.
Un ERP propio necesita el expediente completo de cada unidad: el costo, la etapa de preparación, los papeles y el margen al venderse. Ninguno de esos cuatro datos vive en el mismo lugar. Esta receta hace el recorrido completo, en el orden en que un sync real los pide.
Trampa
El costo no viene si no pides el scope exacto
floor_price_clp (el precio piso, tu costo) se omite del objeto para
cualquier key sin dealership_economics:read: no llega en null, llega
ausente. price_clp (el precio de venta) no tiene ese candado: es el único
monto de un auto pensado para verse. Si tu sync lee el
costo y no lo ve, revisa el scope antes de asumir que el auto no tiene costo
cargado.
Antes de empezar
marketplace:readpara el detalle del vehículo, ydealership_economics:readpara el costo.vehicle_registry:readpara los documentos.sale_notes:read(o:write, si tu sync también las emite) para el margen realizado.
1. El costo, junto al precio de venta
curl "https://api.vitrinadev.com/api/v1/vehicles/26a00eb8-62ce-4a02-a9a7-72204ed8a392" \
-H "Authorization: Bearer $VITRINA_KEY"{
"data": {
"id": "26a00eb8-62ce-4a02-a9a7-72204ed8a392",
"make": "Toyota",
"model": "Yaris",
"version": "XLS 1.5",
"year": 2022,
"price_clp": 11990000,
"floor_price_clp": 9800000,
"status": "disponible",
"tenencia": "propio",
"not_on_lot": false,
"registration_number": "LBXR21"
}
}price_clp es lo que el comprador ve. floor_price_clp es tu costo, el que el ERP necesita para el margen. Los dos viven en el mismo objeto: es la misma unidad, vista con dos permisos distintos, nunca dos llamadas.
2. En qué etapa de preparación va
Reacondicionamiento es un tablero (kind: vehicle) igual que cualquier pipeline de ventas, solo que mueve autos en vez de oportunidades:
curl -X PUT https://api.vitrinadev.com/api/v1/vehicles/26a00eb8-62ce-4a02-a9a7-72204ed8a392/pipeline \
-H "Authorization: Bearer $VITRINA_KEY" \
-H "Content-Type: application/json" \
-d '{ "pipeline_id": "01a0aee1-b99a-7ab1-8e94-0948d1329ac9" }'{
"data": {
"id": "26a00eb8-62ce-4a02-a9a7-72204ed8a392",
"pipeline_id": "01a0aee1-b99a-7ab1-8e94-0948d1329ac9",
"stage_id": "01a0aee1-b9b5-7a75-af15-de9c2e86ae19",
"stage_entered_at": "2026-09-23T11:45:47.126Z",
"status": "disponible",
"prep_assignee_user_id": null
},
"meta": { "outcome": "moved" }
}La etapa operativa (stage_id, esta llamada) y el estado comercial (status) son ejes separados. Un auto en «Mecánica» puede estar reservado, y uno en la última columna del tablero puede ya estar vendido. Tu ERP debe leer los dos si quiere saber dónde está el auto y si se puede vender.
3. Los papeles
El expediente completo, cómo se sube y cómo se descarga, ya está resuelto en Guardar y leer el expediente. Para un sync, lo único nuevo es el orden: primero la lista, después el contenido de cada archivo que aún no tienes.
curl "https://api.vitrinadev.com/api/v1/vehicle-attachments?vehicle_id=26a00eb8-62ce-4a02-a9a7-72204ed8a392" \
-H "Authorization: Bearer $VITRINA_KEY"{ "data": [] }Un expediente vacío es una respuesta válida, no un error. Solo dice que todavía no se ha subido ningún papel para esta unidad. GET /vehicle-attachments/{id}/content trae los bytes de cada uno que sí exista, con los mismos headers de descarga que describe la referencia (Content-Disposition: attachment, Cache-Control: private, no-store).
4. El margen, cuando la unidad se vende
curl -X POST https://api.vitrinadev.com/api/v1/sale-notes \
-H "Authorization: Bearer $VITRINA_KEY" \
-H "Content-Type: application/json" \
-d '{
"vehicle_id": "26a00eb8-62ce-4a02-a9a7-72204ed8a392",
"seller_of_record": "automotora",
"net_clp": 11990000,
"tax_treatment": "afecto",
"buyer_contact_id": "01a0ce13-d6a9-70cd-8d7f-7345a88df003"
}'{
"data": {
"id": "f5562449-9f51-4fb3-bd4f-276b6bccaa29",
"display_id": "V-6",
"vehicle_id": "26a00eb8-62ce-4a02-a9a7-72204ed8a392",
"net_clp": 11990000,
"tax_clp": null,
"tax_treatment": "afecto",
"status": "issued",
"issued_at": "2026-09-23T11:46:24.380Z"
}
}La nota de venta no trae un campo margin. Lo calculas tú: net_clp de esta respuesta, menos el floor_price_clp del paso 1. sale_note.issued dispara al emitirla. Un sync que escucha webhooks se entera de la venta sin consultar cada unidad de nuevo.
Cuando falla
Pedir el costo sin dealership_economics:read no da error: el campo no está en el objeto. Antes de reportar «el auto no tiene costo cargado», confirma que la key trae el scope.
En la aplicación: el costo se carga en la ficha del auto, pestaña Costos, y el tablero de preparación en Stock → Pipelines. Guía completa en Manual de automotora → Registrar costos y → Pipelines y reacondicionamiento.
El contrato completo del expediente, con los seis tipos de documento, está en Guardar y leer el expediente. Ahí también está la obligación que trae recibir la cédula de un tercero.