Enviar gasto
POST /api/spot/gastos con la boleta y sus documentos asociados (orden médica, receta).
POST /api/spot/gastos?public_key={tu_public_key}&rut={rut_paciente}
Content-Type: multipart/form-dataEnvía a Skip el gasto de un paciente — la boleta más su metadata — para que Skip lo rinda ante su ISAPRE/seguro. El endpoint acepta 1 a 5 archivos por request: no solo la boleta, sino todos los documentos asociados al gasto.
Envía todos los documentos del gasto
Si tienes disponible la orden médica, receta u otro comprobante asociado al gasto, es fuertemente recomendado que lo subas junto a la boleta, en la misma request (repitiendo el campo uploaded_files).
¿Por qué importa? Las ISAPREs y seguros exigen la orden médica para rendir prestaciones derivadas — kinesiología, exámenes, imágenes, procedimientos. Una boleta de este tipo enviada sola queda retenida hasta que Skip consiga el documento faltante con el paciente, lo que retrasa (y a veces impide) el reembolso. Si el documento viene contigo desde el inicio, la rendición sale completa a la primera.
Qué documento exige cada tipo de prestación, y cómo leer una boleta chilena en lenguaje Skip: Guía de boletas y documentos de rendición.
Campos del formulario
El único campo requerido de facto es uploaded_files (sin archivos → 400). Los demás son opcionales, pero mientras más completos, mejor el matcheo y la rendición.
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
uploaded_files | file × 1–5 | sí | La boleta y sus documentos asociados (orden médica, receta, otros comprobantes) — repite el campo, un archivo por ocurrencia. PDF o imagen (PDF, JPEG, PNG, WebP, HEIC/HEIF). XML no soportado. Máx 2 MB por archivo. |
name | string | no | Nombre del paciente. |
date | dd/mm/yyyy | no | Fecha de atención de la boleta. |
receipt_id | string | no | El número de folio de la boleta (se guarda como referencia tuya). |
receipt_rut | string | no | RUT de la entidad emisora (la clínica). |
doctor_rut | string | no | RUT del médico tratante. |
total | integer | no | Monto en CLP, sin decimales. |
Respuesta
{
"status": "ok",
"processed_files": ["boleta_kinesiologia.pdf", "orden_medica.pdf"],
"submission_status": "...",
"pending_document_ids": [],
"missing_document_types": []
}processed_files es la lista de archivos que Skip aceptó. Los archivos que fallan validación se descartan en silencio — chequea esta lista contra lo que enviaste. La respuesta incluye campos adicionales de estado de rendición; trátala como no exhaustiva.
Un 200 significa recibido y encolado, no validado ni extraído: la extracción con IA y la presentación a la ISAPRE ocurren de forma asíncrona y pueden fallar después sin reflejarse en esta respuesta (hoy no hay webhook público de status). Detalle en Boletas → processed_files.
Idempotencia
Skip deduplica por el contenido del archivo (hash SHA256, dentro del mismo paciente), no por receipt_id — este último se guarda solo como referencia tuya. Para reintentar tras un fallo de red sin crear un gasto duplicado (ni un segundo WhatsApp al paciente), reenvía el mismo archivo byte a byte. Si regeneras el PDF, el hash cambia y Skip lo tratará como una boleta nueva.
Errores
| Status | code | Causa |
|---|---|---|
| 401 | invalid_provider | public_key inválida. |
| 400 | no_files / too_many_files / file_too_large | Sin archivos, más de 5 archivos, o archivo > 2 MB. |
| 404 | beneficiary_not_found | No hay beneficiario para rut (el paciente no es usuario Skip con ISAPRE asociada). Guarda la boleta y reintenta cuando el paciente complete su onboarding — ver Boletas → paciente aún no registrado. |
Ejemplos
Kinesiología: boleta + orden médica (dos archivos)
El caso recomendado para prestaciones derivadas. La orden médica viaja en la misma request, repitiendo uploaded_files:
curl -X POST "https://backend.getskip.ai/api/spot/gastos?public_key=pk_live_xxx&rut=12345678-9" \
-F "name=María González" \
-F "date=15/04/2026" \
-F "receipt_id=4821" \
-F "receipt_rut=99999999-9" \
-F "doctor_rut=11111111-1" \
-F "total=180000" \
-F "uploaded_files=@boleta_kinesiologia.pdf" \
-F "uploaded_files=@orden_medica.pdf"Consulta médica: solo la boleta
Para prestaciones que no requieren documentos de respaldo (ej. una consulta médica), basta con la boleta:
curl -X POST "https://backend.getskip.ai/api/spot/gastos?public_key=pk_live_xxx&rut=12345678-9" \
-F "name=María González" \
-F "date=15/04/2026" \
-F "receipt_id=4822" \
-F "receipt_rut=99999999-9" \
-F "doctor_rut=11111111-1" \
-F "total=50000" \
-F "uploaded_files=@boleta.pdf"¿El gasto corresponde a una orden AAPD? Usa AAPD → Enviar gasto, que liga la boleta a su orden para destrabar la rendición.