Skip to content

Enviar Comprobante de Pago

Sube el comprobante de una transferencia bancaria SPI para un pago de suscripción pendiente — una captura de pantalla, PDF o foto del comprobante de la transferencia. Acepta hasta 5 archivos por solicitud; puedes llamarlo de nuevo en cualquier momento para agregar más (nada de lo ya subido se sobrescribe).

PATCH /v1/payments/:id/proof

Autenticación

Authorization: Bearer <api-key>

El pago debe pertenecer a una suscripción propiedad de tu tenant. Esta es tu propia API key — no el secreto de administrador.

Cuándo llamar a este endpoint

Después de solicitar un plan pago — ya sea mediante POST /v1/subscriptions o POST /v1/tenants/promote (campos tier/billingInterval), o haciendo que tu proveedor inicie uno mediante la API de administración — la respuesta incluye un payment e instrucciones bankTransfer. Realiza la transferencia SPI por payment.total_amount (el monto total con IVA incluido) y luego llama a este endpoint con el comprobante correspondiente. El mismo flujo también cubre una renovación — aproximadamente 7 días antes del current_period_end de tu suscripción recibirás una notificación y un correo SUBSCRIPTION_RENEWAL_DUE con un nuevo payment.id contra el cual enviar el comprobante (ver Notificaciones).

Cuerpo de la solicitud

multipart/form-data.

CampoTipoRequeridoDescripción
proofarchivo (repite el campo para más de uno)PNG, JPEG, GIF o PDF. Máximo 2 MB por archivo, hasta 5 archivos por solicitud.
referenceNumberstringEl número de referencia/confirmación que tu banco te dio para la transferencia SPI. Máximo 50 caracteres. Se aplica a todos los archivos de esta solicitud — si estás reenviando después de un rechazo con una nueva transferencia, envía el número de referencia de esa nueva transferencia.

Consejo: al realizar la transferencia SPI, incluye el payment.id de este pago en el campo de descripción/referencia de la transferencia en tu banco (por ejemplo, "Pago Comprobify 18") — no generamos ningún otro número de orden, así que esta es la forma más fácil de que tu proveedor asocie la transferencia con tu pago al revisarlo. No todos los bancos admiten un campo de descripción, por lo que esto no es obligatorio, pero es lo más útil que puedes hacer para agilizar la revisión.

Respuesta

200 OK

json
{
  "ok": true,
  "payment": {
    "id": "00000000-0000-0000-0000-000000000018",
    "subscription_id": 12,
    "status": "REPORTED",
    "amount": "17.39",
    "iva_rate": "0.1500",
    "iva_amount": "2.61",
    "total_amount": "20.00",
    "method": "SPI_TRANSFER",
    "reported_at": "2026-06-28T23:14:03.087Z"
  },
  "proofs": [
    {
      "id": "00000000-0000-0000-0000-000000000042",
      "filename": "receipt.pdf",
      "mimeType": "application/pdf",
      "referenceNumber": "SPI-20260628-00931",
      "active": true,
      "createdAt": "2026-06-28T23:14:03.087Z"
    }
  ]
}

proofs lista únicamente el/los archivo(s) subido(s) en esta solicitud — llama a Listar Comprobantes de Pago para ver el conjunto completo subido hasta el momento (este pago puede tener otros de un intento anterior). Los bytes crudos del archivo nunca se devuelven en la respuesta, solo los metadatos; usa Descargar Comprobante de Pago con un proofId de esta respuesta para volver a obtenerlos. status pasa a REPORTED. Tu proveedor revisa los archivos y verifica o rechaza el pago; una vez verificado, autofactura el comprobante y la suscripción se activa automáticamente en cuanto el SRI lo autoriza. Una vez que un pago está VERIFIED, ya no se aceptan más subidas (ni eliminaciones) para él — todo lo relativo a su comprobante queda fijo en ese punto.

Qué sucede después

Recibirás una notificación y un correo PAYMENT_VERIFIED o PAYMENT_REJECTED tan pronto tu proveedor registre su decisión (ver Notificaciones) — no necesitas consultar activamente, aunque GET /v1/subscriptions/me (estados intermedios y cualquier motivo de rechazo) y GET /v1/tenants/me (el tier/cuota resultante una vez aplicado) también están siempre disponibles.

Si tu comprobante es rechazado, el correo explica el motivo en lenguaje claro, y GET /v1/subscriptions/me muestra el mismo motivo como un rejection_reason_code estable (uno de AMOUNT_MISMATCH, TRANSFER_NOT_FOUND, WRONG_ACCOUNT, ILLEGIBLE_PROOF, DUPLICATE_SUBMISSION, OTHER) para que tu propia interfaz lo asocie a un mensaje. Una vez que hayas corregido lo que se señaló, llama de nuevo a este mismo endpoint con un nuevo comprobante para el mismo pago — los archivos del intento rechazado permanecen exactamente donde están (ver Listar Comprobantes de Pago y Eliminar Comprobante de Pago si deseas quitar alguno), simplemente estás agregando más. El rechazo no es un callejón sin salida; solo un pago ya VERIFIED rechaza subidas adicionales.

Errores

Estado HTTPCódigoCuándo ocurre
400INVALID_FILE_UPLOADNo se envió ningún archivo, un archivo no es PNG/JPEG/GIF/PDF, o un archivo supera los 2 MB
400VALIDATION_FAILEDreferenceNumber faltó, estaba vacío, o superaba los 50 caracteres
400PROOF_FILE_LIMIT_REACHEDEste pago ya tiene el número máximo de archivos de comprobante activos (10 en total, considerando todos los intentos de subida) — elimina uno primero mediante Eliminar Comprobante de Pago
401UNAUTHORIZEDAPI key faltante o inválida
404PAYMENT_NOT_FOUNDEl pago no existe, o pertenece a otro tenant
409CONFLICTEl pago ya estaba VERIFIED y no puede aceptar más comprobantes

Documentación de la API de Comprobify