Spot

Enviar gasto

POST /api/spot/gastos con uno o más archivos de boleta.

POST /api/spot/gastos?public_key={tu_public_key}&rut={rut_paciente}
Content-Type: multipart/form-data

Envía a Skip el gasto de un paciente — la boleta más su metadata — para que Skip lo rinda ante su ISAPRE/seguro. Puedes mandar 1–5 boletas en una sola request.

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.

CampoTipoObligatorioNotas
uploaded_filesfile × 1–5PDF o imagen (PDF, JPEG, PNG, WebP, HEIC/HEIF). XML no soportado. Máx 2 MB por archivo.
namestringnoNombre del paciente.
datedd/mm/yyyynoFecha de atención de la boleta.
receipt_idstringnoTu ID interno de la boleta (se guarda como referencia).
receipt_rutstringnoRUT de la entidad emisora (la clínica).
doctor_rutstringnoRUT del médico tratante.
totalintegernoMonto en CLP, sin decimales.

Respuesta

{
  "status": "ok",
  "processed_files": ["boleta_a.pdf", "boleta_b.jpg"],
  "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

StatuscodeCausa
401invalid_providerpublic_key inválida.
400no_files / too_many_files / file_too_largeSin archivos, más de 5 archivos, o archivo > 2 MB.
404beneficiary_not_foundNo 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.

Ejemplo

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=DTE-2026-001" \
  -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.

On this page