Referencia del API · tag loans
Cartera
Vida del crédito desembolsado: plan de pagos, cuotas, recaudos, abonos extraordinarios, pago total y certificados.
Esta página se genera desde el contrato (data/gateway-v1.json): cada operación muestra su verbo,
ruta, parámetros, cuerpo, respuestas, si lleva Idempotency-Key y el método equivalente en los cinco SDK.
Para el flujo de punta a punta con ejemplos completos, ve a la guía de implementación.
Operaciones del tag loans #
Descripción en el contrato: Cartera: préstamos ya desembolsados del afiliado (saldo, próxima cuota, mora), plan de pagos y desglose de cuotas, recaudos reportados por la entidad (taquilla, nómina/libranza, archivo bancario), abono extraordinario, pago total y certificado de deuda / paz y salvo. El afiliado se identifica por document; loan_id acepta el UUID o el número del préstamo.
| Método | Ruta | Operación | Scope | Idem. |
|---|---|---|---|---|
| GET | /v1/gateway/loans/ | Préstamos del afiliado | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/ | Detalle de un préstamo | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/certificate/ | Certificado de deuda / paz y salvo | loans:read | — |
| POST | /v1/gateway/loans/{loan_id}/extra-payment/ | Registrar un abono a capital | loans:collect | recomendada |
| GET | /v1/gateway/loans/{loan_id}/extra-payment/quote/ | Simular un abono extraordinario | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/installments/ | Plan de pagos | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/installments/{number}/ | Detalle de una cuota | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/installments/{number}/breakdown/ | Desglose de una cuota (cómo se aplicaría un pago) | loans:read | — |
| GET | /v1/gateway/loans/{loan_id}/payments/ | Historial de pagos | loans:read | — |
| POST | /v1/gateway/loans/{loan_id}/payments/ | Registrar un pago recibido por la entidad | loans:collect | recomendada |
| POST | /v1/gateway/loans/{loan_id}/payoff/ | Registrar el pago total anticipado | loans:collect | recomendada |
| GET | /v1/gateway/loans/{loan_id}/payoff/quote/ | Cotizar el pago total de hoy | loans:read | — |
Préstamos del afiliado #
GET/v1/gateway/loans/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
document obligatorio | query | string | Documento del afiliado. Ej.: 1032456789 |
status | query | string | ACTIVE (cartera viva) o un estado puntual (PAID_OFF, IN_ARREARS…). |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Préstamos con saldo, próxima cuota y mora. | LoanList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.list()client.loans.list()$client->loans->list()await client.Loans.ListAsync()client.Loans.List(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/?document=1032456789" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Detalle de un préstamo #
GET/v1/gateway/loans/{loan_id}/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Resumen + pago total de hoy + paz y salvo. | LoanSummary
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.get()client.loans.get()$client->loans->get()await client.Loans.GetAsync()client.Loans.Get(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Certificado de deuda / paz y salvo #
GET/v1/gateway/loans/{loan_id}/certificate/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
as_of | query | string | Fecha de corte AAAA-MM-DD (hoy por defecto). |
pdf | query | boolean | true → genera el PDF y devuelve pdf_url firmada. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Saldo a la fecha y estado de paz y salvo. | LoanCertificate
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.certificate()client.loans.certificate()$client->loans->certificate()await client.Loans.CertificateAsync()client.Loans.Certificate(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/certificate/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Registrar un abono a capital #
POST/v1/gateway/loans/{loan_id}/extra-payment/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema LoanCollectionIn — Recaudo reportado por la entidad. La reference es la llave natural del recibo (préstamo + canal + referencia): reenviarla devuelve el mismo recibo; con otro monto → 409.
| Campo | Tipo | Descripción |
|---|---|---|
amount | string | number | Monto COP. En payoff es opcional. Ej.: "195000" |
channel | string | Valores: CASH, ACH_LIBRANZA, BANK_FILE, MANUAL. Ej.: "CASH" |
document | string | Opcional: si viene, el préstamo debe ser suyo. Ej.: "1032456789" |
installment_number | integer | Solo en payments: cuota a pagar primero. |
mode | string | Solo en extra-payment. Valores: reduce_term, reduce_installment. |
reference obligatorio | string | Ej.: "REC-2026-001" Máx. 100 caracteres. |
value_date | string (date) | Fecha valor (no futura). |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Recaudo aplicado (o reenvío de la misma referencia). | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.register_extra_payment()client.loans.registerExtraPayment()$client->loans->registerExtraPayment()await client.Loans.RegisterExtraPaymentAsync()client.Loans.RegisterExtraPayment(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/extra-payment/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"amount": "195000",
"channel": "CASH",
"reference": "REC-2026-001"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Simular un abono extraordinario #
GET/v1/gateway/loans/{loan_id}/extra-payment/quote/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
amount obligatorio | query | string | Monto del abono (COP). |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Asignación del abono y escenarios (reducir plazo / cuota). | LoanQuote
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.quote_extra_payment()client.loans.quoteExtraPayment()$client->loans->quoteExtraPayment()await client.Loans.QuoteExtraPaymentAsync()client.Loans.QuoteExtraPayment(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/extra-payment/quote/?amount=<amount>" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Plan de pagos #
GET/v1/gateway/loans/{loan_id}/installments/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
status | query | string | PENDING | PARTIAL | OVERDUE | PAID |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Cuotas de la versión activa del plan. | LoanInstallmentList
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.installments()client.loans.installments()$client->loans->installments()await client.Loans.InstallmentsAsync()client.Loans.Installments(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/installments/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Detalle de una cuota #
GET/v1/gateway/loans/{loan_id}/installments/{number}/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
number obligatorio | ruta | integer | Número de la cuota. Ej.: 4 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Cuota con componentes y lo pendiente. | LoanInstallment
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.get_installment()client.loans.getInstallment()$client->loans->getInstallment()await client.Loans.GetInstallmentAsync()client.Loans.GetInstallment(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/installments/4/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Desglose de una cuota (cómo se aplicaría un pago) #
GET/v1/gateway/loans/{loan_id}/installments/{number}/breakdown/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
number obligatorio | ruta | integer | Número de la cuota. Ej.: 4 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
amount | query | string | Monto a simular; sin él, lo pendiente de la cuota. |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Prelación aplicada al monto. | LoanQuote
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.installment_breakdown()client.loans.installmentBreakdown()$client->loans->installmentBreakdown()await client.Loans.InstallmentBreakdownAsync()client.Loans.InstallmentBreakdown(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/installments/4/breakdown/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Historial de pagos #
GET/v1/gateway/loans/{loan_id}/payments/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Recibos del préstamo. | LoanQuote
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.payments()client.loans.payments()$client->loans->payments()await client.Loans.PaymentsAsync()client.Loans.Payments(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/payments/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Registrar un pago recibido por la entidad #
POST/v1/gateway/loans/{loan_id}/payments/
reference (y por Idempotency-Key en el borde). Emite payment.received y payment.applied (y loan.paid_off si salda).Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema LoanCollectionIn — Recaudo reportado por la entidad. La reference es la llave natural del recibo (préstamo + canal + referencia): reenviarla devuelve el mismo recibo; con otro monto → 409.
| Campo | Tipo | Descripción |
|---|---|---|
amount | string | number | Monto COP. En payoff es opcional. Ej.: "195000" |
channel | string | Valores: CASH, ACH_LIBRANZA, BANK_FILE, MANUAL. Ej.: "CASH" |
document | string | Opcional: si viene, el préstamo debe ser suyo. Ej.: "1032456789" |
installment_number | integer | Solo en payments: cuota a pagar primero. |
mode | string | Solo en extra-payment. Valores: reduce_term, reduce_installment. |
reference obligatorio | string | Ej.: "REC-2026-001" Máx. 100 caracteres. |
value_date | string (date) | Fecha valor (no futura). |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Recaudo aplicado (o reenvío de la misma referencia). | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.register_payment()client.loans.registerPayment()$client->loans->registerPayment()await client.Loans.RegisterPaymentAsync()client.Loans.RegisterPayment(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/payments/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"amount": "195000",
"channel": "CASH",
"reference": "REC-2026-001"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Registrar el pago total anticipado #
POST/v1/gateway/loans/{loan_id}/payoff/
amount debe ser el de payoff/quote (si no, 422).Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
Idempotency-Key | cabecera | string | Client-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. Ej.: horizonte-2026-06-26-credit-000123 |
Cuerpo de la petición
Tipo de contenido: application/json · obligatorio
Esquema LoanCollectionIn — Recaudo reportado por la entidad. La reference es la llave natural del recibo (préstamo + canal + referencia): reenviarla devuelve el mismo recibo; con otro monto → 409.
| Campo | Tipo | Descripción |
|---|---|---|
amount | string | number | Monto COP. En payoff es opcional. Ej.: "195000" |
channel | string | Valores: CASH, ACH_LIBRANZA, BANK_FILE, MANUAL. Ej.: "CASH" |
document | string | Opcional: si viene, el préstamo debe ser suyo. Ej.: "1032456789" |
installment_number | integer | Solo en payments: cuota a pagar primero. |
mode | string | Solo en extra-payment. Valores: reduce_term, reduce_installment. |
reference obligatorio | string | Ej.: "REC-2026-001" Máx. 100 caracteres. |
value_date | string (date) | Fecha valor (no futura). |
Acepta campos adicionales (additionalProperties): se reenvían al motor sin cambios.
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Recaudo aplicado (o reenvío de la misma referencia). | TransactionEnvelope
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.register_payoff()client.loans.registerPayoff()$client->loans->registerPayoff()await client.Loans.RegisterPayoffAsync()client.Loans.RegisterPayoff(ctx, …)curl -X POST "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/payoff/" \
-H "X-API-Key: $COMPENSE_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"document": "1032456789",
"amount": "195000",
"channel": "CASH",
"reference": "REC-2026-001"
}'Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.
Cotizar el pago total de hoy #
GET/v1/gateway/loans/{loan_id}/payoff/quote/
Parámetros
| Nombre | En | Tipo | Descripción |
|---|---|---|---|
loan_id obligatorio | ruta | string | UUID del préstamo o su número (loan_number). Ej.: 3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7 |
document | query | string | Documento del afiliado. Opcional: si se envía, el préstamo debe ser suyo. Ej.: 1032456789 |
Respuestas
| Código | Descripción | Cuerpo |
|---|---|---|
| 200 | Valor exacto que cobra payoff hoy. | LoanQuote
application/json |
Errores posibles (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
| 400 | Malformed request. | about:blank |
| 401 | Missing or invalid API key. | about:blank |
| 403 | The key is valid but lacks the required scope, or the source IP is not allow-listed. | about:blank |
| 404 | The requested resource does not exist. | about:blank |
| 409 | Idempotency conflict — same key, original still processing. | https://errors.compense.co/gateway/idempotency-conflict |
| 422 | Request body failed validation. | https://errors.compense.co/gateway/validation |
| 429 | Per-key rate limit or monthly quota exceeded; see Retry-After. | https://errors.compense.co/gateway/rate-limited |
| 500 | Unexpected gateway error; quote the trace_id to support. | about:blank |
| 502 | The processing engine returned an error. | https://errors.compense.co/gateway/upstream-error |
| 504 | The processing engine did not respond in time. | https://errors.compense.co/gateway/upstream-error |
Ver Errores problem+json para la excepción equivalente en cada SDK.
Ejemplo
client.loans.quote_payoff()client.loans.quotePayoff()$client->loans->quotePayoff()await client.Loans.QuotePayoffAsync()client.Loans.QuotePayoff(ctx, …)curl "https://sandbox.dev.compense.co/gw/v1/gateway/loans/3f1c2e7a-4b8d-4e6f-a1c0-d2e3f4a5b6c7/payoff/quote/" \
-H "X-API-Key: $COMPENSE_API_KEY"Los métodos de cada SDK salen de su suite de paridad con el contrato. El cURL va contra el sandbox; los valores <campo> son marcadores.