Antes de integrar las suscripciones ten en cuenta:
api-access:test) solo puede leer y crear datos de pruebas; un
token de producción (api-access:production) solo opera sobre datos de
producción. Las lecturas quedan filtradas automáticamente por el ambiente del token.group, plan,
subscriber) puedes usar los alias product, price y customer, que apuntan a
los mismos recursos. Ejemplo: GET /api/v1/subscriptions/customer equivale a
GET /api/v1/subscriptions/subscriber.discount_* del plan se mantienen por
compatibilidad pero se recomienda usar cupones.Todas las escrituras (POST/PUT/DELETE) de subscriptions/* aceptan el header
Idempotency-Key. Si repites una solicitud con la misma key y los mismos
parámetros, se reproduce la respuesta original (con el header
Idempotency-Replayed: true) sin volver a ejecutar el cobro o la creación. Es la
forma segura de reintentar ante errores de red.
curl -X POST "/api/v1/subscriptions/subscription" \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-type: application/json' \
-H 'Idempotency-Key: 9b1f0e34-6b2a-4a7e-9d0a-unico-por-operacion' \
-d '{ "plan_id": "...", "subscriber_id": "...", "card": "...", "office": 1 }'
{warning} Si reutilizas la misma
Idempotency-Keycon parámetros distintos recibirás un error409 .
Al consultar una suscripción puedes incrustar relaciones con expand[] y así evitar
llamadas adicionales. Valores soportados: plan, subscriber, next_transaction.
curl -X GET "/api/v1/subscriptions/subscription/your-subscription-id?expand[]=plan&expand[]=subscriber" \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-type: application/json'
El campo status (presente en las respuestas de suscripción) refleja el estado
actual de la suscripción:
| status | Significado |
|---|---|
trial |
En período de prueba. |
activa |
Activa y al día. |
en_gracia |
Un cobro falló pero sigue dentro del período de gracia (past due). |
pausada |
Cobros pausados (ver Pause). |
cancelada |
Cancelada; activa hasta el fin del período vigente. |
finalizada |
Terminada; no se realizarán más cobros. |
Esta página tiene una peculiaridad que conviene conocer antes de escribir el parser:
| Qué llamas | Qué recibes |
|---|---|
Las consultas (GET) |
snake_case: subscription_plan_id, next_transaction, trial_ends_at, is_active… |
| Las acciones (cancelar, pausar, reanudar, cambiar de plan) | camelCase: planId, nextRenewAt, isActive, onGracePeriod… |
No son los mismos campos con otro nombre: son dos representaciones distintas de la suscripción. No reutilices el parser de una para la otra. Cada sección de abajo muestra la que le corresponde.
{info} La fuente de verdad siempre es un
GETa la suscripción. Si después de una acción necesitas el objeto completo y consistente, vuelve a consultarla.
Descripción: Devuelve la lista paginada de todas tus suscripciones (filtradas por el ambiente del token: pruebas o producción). Útil para tableros, sincronizaciones y reconciliación.
GET /api/v1/subscriptions/subscription
Todos son opcionales y se combinan entre sí. Sin ninguno, la respuesta es la lista completa del ambiente del token.
| Parámetro | Tipo | Qué hace |
|---|---|---|
filter[subscriber_id] |
UUID exacto | Todas las suscripciones de un suscriptor |
filter[plan_id] |
UUID exacto | Todas las de un plan |
filter[status] |
exacto | trial, activa, en_gracia, pausada, cancelada, finalizada |
filter[email] |
parcial | Por el correo del suscriptor |
filter[subscription_id] |
parcial | Por el id de la suscripción |
filter[description] |
parcial | Por la descripción que guardaste al crearla |
filter[plan_name] |
parcial | Por el nombre del plan |
filter[active] |
1, 0, all |
Si está dando servicio ahora mismo |
filter[start_date] |
fecha | Creadas desde esa fecha (inclusive) |
filter[finish_date] |
fecha | Creadas hasta esa fecha (inclusive) |
sort |
campo | created_at, starts_at, ends_at, trial_ends_at. Prefija con - para descendente |
curl -X GET \
'https://sag-qa.efipay.co/api/v1/subscriptions/subscription?filter[email]=ana@correo.com&filter[status]=activa' \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Accept: application/json'
{success} Para reconciliar después de un fallo tuyo. Si tu sistema se cayó justo después de crear una suscripción y no sabes si quedó registrada, búscala por
filter[subscriber_id]ofilter[email]y comparacreated_at. No hace falta que tengas el id que nunca alcanzaste a guardar.
{info} ¿Referencia externa? Todavía no hay un campo
external_reference. Mientras tanto, usadescription(hasta 255 caracteres) para guardar tu propio identificador al crear la suscripción: es filtrable confilter[description].
Descripción: Devuelve el detalle de una suscripción a partir de su id. Acepta
objetos expandibles para incluir el plan, el suscriptor o el próximo cobro.
{success} Respuesta satisfactoria code:
200 { "id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b", "description": null, "webhook_url": "https://tu-comercio.com/webhook", "trial_ends_at": "2026-07-15 00:00:00", "discount_ends_at": null, "starts_at": "2026-07-15 00:00:00", "ends_at": "2026-08-15 00:00:00", "grace_ends_at": "2026-08-18 00:00:00", "next_transaction": "2026-08-15", "canceled_at": null, "paused_at": null, "resumes_at": null, "environment": "production", "status": "activa", "on_trial": false, "on_discount": false, "on_grace_period": false, "paused": false, "canceled": false, "is_active": true, "is_ended": false, "subscription_plan_id": "9a4698e5-d936-4298-84dc-4a770bfacc19", "subscriber_id": "9a469901-d010-4afe-94fe-da6790a4f72b", "office_id": "9a3bf0a4-9854-418f-aa05-5a04b8ce4372", "created_at": "2026-07-01 09:12:00", "updated_at": "2026-07-15T00:00:00.000000Z" }
| Campo | Tipo | Descripción |
|---|---|---|
id |
uuid | Id de la suscripción |
description |
string | null | Texto libre tuyo, hasta 255 caracteres |
webhook_url |
string | null | Dónde te avisamos los cambios |
status |
string | trial, activa, en_gracia, pausada, cancelada, finalizada |
environment |
string | production o testing |
starts_at |
fecha | null | Inicio del período vigente |
ends_at |
fecha | null | Fin del período vigente. Hasta aquí hay servicio |
grace_ends_at |
fecha | null | Fin de la ventana de gracia para reintentar el cobro |
trial_ends_at |
fecha | null | Fin de la prueba |
discount_ends_at |
fecha | null | Fin del descuento |
canceled_at |
fecha | null | Cuándo se canceló. Con at_period_end: false es igual a ends_at |
paused_at |
fecha | null | Cuándo se pausaron los cobros |
resumes_at |
fecha | null | Cuándo se reanudan. null con paused_at = pausa indefinida |
next_transaction |
fecha | null | Fecha del próximo cobro programado |
on_trial |
bool | En período de prueba |
on_discount |
bool | Con descuento vigente |
on_grace_period |
bool | Dentro de la gracia: el cobro falló pero sigue habiendo servicio |
paused |
bool | Cobros pausados ahora mismo |
canceled |
bool | Cancelada. Puede ser true con is_active en true |
is_active |
bool | Si hay servicio ahora mismo. Es el que debes mirar para dar o cortar acceso |
is_ended |
bool | El período terminó |
subscription_plan_id |
uuid | Plan |
subscriber_id |
uuid | Suscriptor |
office_id |
— | Sede |
created_at / updated_at |
fecha |
{warning}
canceledeis_activeno son opuestos. Una suscripción cancelada al final del período tienecanceled: trueeis_active: truehastaends_at. Para decidir si el cliente tiene acceso, mirais_active.
{info} Las fechas van en hora de Colombia con formato
Y-m-d H:i:s. Los camposplan,subscriberynext_transaction_chargesolo aparecen si los pides conexpand[].
Descripción: Lista las suscripciones asociadas a un plan específico. Útil para saber cuántos clientes están suscritos a un plan.
Descripción: Lista las suscripciones de un suscriptor (cliente) específico.
Descripción: Crea una suscripción a partir de un plan y un suscriptor ya
creados, más los datos de la tarjeta con la que se cobrará la recurrencia. La tarjeta se
tokeniza de forma segura; si prefieres, puedes enviar un card (token ya generado en
Tokenizado) y usaremos ese token para los cobros. El
primer cobro se realiza al momento (o al terminar el período de prueba, si el plan lo tiene).
La tarjeta puede llegar de dos maneras excluyentes: como card (un token ya
generado en Tokenizado) o como el objeto
card_information con los datos en claro. Envía una u otra, nunca las dos.
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| plan_id | Id del plan a cobrar. Debe estar activo y pertenecer a la misma sucursal que envías en office |
['required', 'exists:subscription_plans,id'] |
| subscriber_id | Id del suscriptor. Debe pertenecer a la misma sucursal que envías en office |
['required', 'exists:subscribers,id'] |
| office | Sucursal de la suscripción. Debe ser una de tus sucursales | ['required', 'exists:offices,id'] |
| description | Descripción libre de esta suscripción | ['nullable', 'string', 'max:255'] |
| webhook_url | URL a la que notificaremos cada cobro de esta suscripción. Recibe un POST firmado con la cabecera Signature. Ver webhooks |
['nullable', 'url'] |
| card | Token de una tarjeta guardada. Si lo envías, no envíes card_information |
['required_without:card_information', 'missing_with:card_information', 'string'] |
| card_information.holder | Nombre impreso en la tarjeta | ['sometimes', 'required', 'missing_with:card', 'string', 'max:80'] |
| card_information.number | Número de la tarjeta, sin espacios. Se valida como número de tarjeta real | ['sometimes', 'required', 'missing_with:card', 'numeric'] |
| card_information.datetime | Vencimiento en formato YYYY-MM, con mes entre 01 y 12. No puede estar vencida |
['sometimes', 'required', 'missing_with:card', 'date_format:Y-m', 'after_or_equal:<mes actual>'] |
| card_information.cvv | Código de seguridad. La cantidad de dígitos se valida según la franquicia que resulte de card_information.number |
['sometimes', 'required', 'missing_with:card', 'numeric'] |
Solicitud con token
curl -X POST\
"/api/v1/subscriptions/subscription"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{
"plan_id": "9a9331d9-ea9a-4ad4-a9a4-0d23bd91fff1",
"subscriber_id": "9a933275-1573-497c-916c-ba7fe4f99326",
"card": "your-token-card-here",
"office": 1
}'
Ejemplo de solicitud sin token:
curl -X POST\
"/api/v1/subscriptions/subscription"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{
"plan_id": "9a9331d9-ea9a-4ad4-a9a4-0d23bd91fff1",
"subscriber_id": "9a933275-1573-497c-916c-ba7fe4f99326",
"card_information": {
"holder": "Holder Holder",
"number": "5249314023340339",
"datetime": "2026-02",
"cvv": 899
},
"office": 1
}'
Descripción: Cancela una suscripción activa. Por defecto la cancelación es al
final del período vigente: el cliente conserva el servicio hasta ends_at.
| Cuerpo | canceled_at |
ends_at |
is_active |
Qué significa |
|---|---|---|---|---|
(vacío) o {"at_period_end": true} |
Ahora | No cambia | true hasta ends_at |
El cliente ya pagó el ciclo: lo termina |
{"at_period_end": false} |
Ahora | Ahora | false de inmediato |
Corte inmediato, también de la gracia |
curl -X PUT \
'https://sag-qa.efipay.co/api/v1/subscriptions/subscription/cancel/your-subscription-id' \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Content-type: application/json' \
-d '{ "at_period_end": false }'
{info} No llega un
renewdespués de cancelar. En cuanto queda registrada la cancelación, el motor de cobro deja de considerar la suscripción: no hay más cobros ni más reintentos pendientes. El último evento que recibes escanceled.
{warning}
at_period_end: falseno devuelve dinero. Corta el servicio, no reembolsa el ciclo ya cobrado. Para eso está la devolución.
{success} Respuesta satisfactoria code:
200 { "canceled": true, "at_period_end": true, "subscription": { "id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b", "status": "cancelada", "canceled": true } }
{danger} La suscripción ya estaba cancelada code:
400 { "canceled": false, "message": "La suscripción ya está cancelada." }
Descripción: Pausa los cobros de una suscripción. Mientras esté pausada, el motor de
recurrencia no realiza cobros. Puedes programar una reanudación automática con
resumes_at; si no lo envías, queda pausada hasta que llames a Reanudar cobros.
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| resumes_at | Fecha y hora en que la suscripción se reanuda sola. Debe ser futura. Si la omites, la pausa dura hasta que llames a reanudar | ['sometimes', 'nullable', 'date', 'after:now'] |
curl -X POST\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/pause"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{ "resumes_at": "2026-09-01 00:00:00" }'
{success} Respuesta satisfactoria code:
200 { "paused": true, "subscription": { "id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b", "status": "pausada", "paused": true, "pausedAt": "2026-07-30 10:00:00", "resumesAt": "2026-09-01 00:00:00" } }
{danger} No se puede pausar code:
400 { "paused": false, "message": "No se puede pausar una suscripción cancelada." }
Descripción: Reanuda los cobros de una suscripción pausada.
curl -X POST\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/resume"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json"
{success} Respuesta satisfactoria code:
200 { "resumed": true, "subscription": { "id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b", "status": "activa", "paused": false } }
Descripción: Actualiza la tarjeta con la que se cobran las recurrencias de una suscripción. La tarjeta se tokeniza de forma segura y reemplaza a la anterior.
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| number | Número de la nueva tarjeta, sin espacios. Se valida como número de tarjeta real | ['required', 'numeric'] |
| datetime | Vencimiento en formato YYYY-MM (por ejemplo 2030-05). No puede estar vencida |
['required', 'date'] |
| cvv | Código de seguridad. La cantidad de dígitos se valida según la franquicia que resulte de number |
['required', 'numeric'] |
curl -X PUT\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/update-payment-method"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{
"number": "5249314023340339",
"datetime": "2028-05",
"cvv": 899
}'
{success} Respuesta satisfactoria code:
200 { "updated": true }
{danger} Suscripción cancelada code:
400 { "message": "No se puede actualizar el método de pago de una suscripción cancelada" }
POST /api/v1/subscriptions/subscription/{subscription-id}/renew
Descripción: Le envía al suscriptor una invitación de renovación por correo, con un enlace en el que confirma que quiere seguir. Sirve para reactivar una suscripción que ya terminó.
{danger} No cobra nada. Este endpoint no genera un cobro inmediato ni reactiva la suscripción por sí solo: solo manda el correo. El cobro ocurre cuando el suscriptor acepta la invitación. La invitación vence a los 7 días y solo puede haber una pendiente por suscripción.
Si lo que quieres es cobrar ya mismo, crea una suscripción nueva o usa un cobro puntual.
No recibe cuerpo. El suscriptor debe tener una tarjeta guardada, porque la invitación la reutiliza.
curl -X POST \
'/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/renew' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
{success} Invitación enviada code:
200 { "renewed": true, "message": "Se ha enviado una invitación de renovación al suscriptor por correo electrónico." }
{danger} Ya hay una invitación pendiente code:
400 { "renewed": false, "message": "Ya existe una invitación de renovación pendiente para esta suscripción." }
{danger} El suscriptor no tiene tarjeta guardada code:
400 { "renewed": false, "message": "El suscriptor no tiene una tarjeta guardada. No se puede enviar la invitación." }
Descripción: Cambia el plan de una suscripción de forma inmediata y con prorrateo. No requiere que el suscriptor acepte nada.
El prorrateo calcula:
net): si es positivo se genera un cobro inmediato (upgrade); si es
negativo, ese monto queda como crédito a favor en el balance del cliente (downgrade).El cobro pendiente del próximo ciclo se re-tarifica automáticamente al precio del nuevo plan.
{info} Usa primero ChangePlanPreview para mostrarle al cliente el prorrateo antes de confirmar.
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| plan_id | Id del nuevo plan. Debe estar activo, ser de tu comercio y del mismo ambiente que la suscripción | ['required', 'exists:subscription_plans,id'] |
| mode | direct (por defecto) aplica el cambio de inmediato. invitation le envía al suscriptor una invitación por correo para que lo apruebe |
['sometimes', 'in:direct,invitation'] |
| proration_behavior | Qué hacer con el tiempo ya pagado: create_prorations (por defecto), none sin prorrateo, always_invoice factura el ajuste de inmediato |
['sometimes', 'in:create_prorations,none,always_invoice'] |
curl -X PUT\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/change-plan"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{
"plan_id": "9a4698e5-d936-4298-84dc-4a770bfacc19"
}'
{success} Cambio directo aplicado (upgrade con cobro de prorrateo) code:
200 { "changed": true, "proration": { "currency": "COP", "unused_fraction": 0.6, "credit_unused": 6000, "charge_new": 18000, "net": 12000, "line_items": [ { "description": "Tiempo no usado de Plan Básico", "amount": -6000 }, { "description": "Tiempo restante de Plan Premium", "amount": 18000 } ] }, "subscription": { "id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b", "planId": "9a4698e5-d936-4298-84dc-4a770bfacc19", "planName": "Plan Premium", "status": "activa" } }
{danger} La suscripción está inactiva o cancelada code:
400 { "changed": false, "message": "La suscripción está inactiva; usa la renovación con pago para reactivarla con el nuevo plan." }
Si envías mode: "invitation", en lugar de aplicar el cambio se crea una invitación
change_plan que se envía por correo al suscriptor. El cambio se ejecuta solo cuando
el suscriptor la acepta. Rutas públicas del flujo:
GET /subscription-invitation/{token}: ver detalle de la invitación.POST /subscription-invitation/{token}/accept: aceptar.POST /subscription-invitation/{token}/decline: rechazar.| Vigencia | 7 días desde el envío |
| Simultáneas | Una sola invitación change_plan pendiente por suscripción. Una segunda llamada responde 400 |
| Requisito | El suscriptor debe tener una tarjeta guardada; si no, 400 sin enviar el correo |
| Al aceptar | Se aplica el cambio y llega el webhook plan_changed, con transaction si hubo cobro |
| Al rechazar | La invitación queda en declined. No se emite webhook |
| Al expirar | La invitación deja de ser válida. Hoy no se emite ningún webhook al expirar |
{warning} Como no hay evento de expiración, si dependes de la invitación no dejes el cambio en «pendiente» para siempre: guarda la fecha de envío y date por vencido a los 7 días. Puedes confirmar el estado real con un
GETa la suscripción y comparar elplan.
En ambos modos, si la suscripción tiene webhook_url, se notifica el evento
plan_changed. El cuerpo incluye previous_plan_id con el plan que tenía antes.
Descripción: Previsualiza el prorrateo de un cambio de plan sin aplicarlo (la factura que se generaría con el cambio). Ideal para mostrarle al cliente cuánto se le cobrará o acreditará antes de confirmar.
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| plan_id | Id del plan destino, como parámetro de consulta. Debe ser de tu comercio y del mismo ambiente que la suscripción. Aquí no se exige que esté activo | ['required', 'exists:subscription_plans,id'] |
curl -X GET\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/change-plan-preview?plan_id=9a4698e5-d936-4298-84dc-4a770bfacc19"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json"
{success} Respuesta satisfactoria code:
200 { "proration": { "currency": "COP", "unused_fraction": 0.6, "credit_unused": 6000, "charge_new": 18000, "net": 12000, "line_items": [ { "description": "Tiempo no usado de Plan Básico", "amount": -6000 }, { "description": "Tiempo restante de Plan Premium", "amount": 18000 } ] } }
Descripción: Aplica un cupón (por su código) a una
suscripción. El descuento se refleja en los cobros recurrentes según la duración del
cupón (once, repeating o forever).
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| code | Código del cupón a aplicar. Debe existir en tu comercio, estar activo y todavía ser redimible | ['required', 'string'] |
curl -X POST\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/apply-coupon"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H "Content-type: application/json" \
-d '{ "code": "WELCOME10" }'
{success} Respuesta satisfactoria code:
200 { "applied": true, "coupon_id": "9b0f2a13-2c44-4a1a-9f2e-1d3b4c5d6e7f", "discount_ends_at": "2026-12-30 00:00:00" }
{danger} Cupón inválido o no disponible code:
400 { "applied": false, "message": "Cupón inválido o no disponible." }
Descripción: Lista las facturas de una suscripción. Cada factura representa un
ciclo de facturación con su estado (open, paid, void, uncollectible),
subtotal, impuesto, total y período.
{success} Respuesta satisfactoria code:
200 { "current_page": 1, "data": [ { "id": "9b0f4d21-8a3e-4c9b-9a1e-2f3a4b5c6d7e", "number": "INV-2026-000012", "status": "paid", "subtotal": 12605.04, "discount_total": 0, "tax_total": 2394.96, "total": 15000, "currency_type": "COP", "period_start": "2026-07-01 00:00:00", "period_end": "2026-08-01 00:00:00", "paid_at": "2026-07-01 19:00:05", "subscription_id": "9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b" } ], "total": 1, "last_page": 1 }
Descripción: Vista previa (borrador) de la próxima factura de la suscripción, con el descuento vigente ya aplicado. No genera ningún cobro.
{success} Respuesta satisfactoria code:
200 { "upcoming_invoice": { "status": "draft", "currency_type": "COP", "subtotal": 12605.04, "tax_total": 2394.96, "total": 15000, "period_start": "2026-08-01 00:00:00", "next_charge_at": "2026-08-01", "line_items": [ { "description": "Suscripción Plan Básico", "amount": 15000, "quantity": 1 } ] } }
Descripción: Descarga el PDF de una factura específica de la suscripción. La
respuesta es el archivo PDF (application/pdf).
curl -X GET\
"/api/v1/subscriptions/subscription/9da5903d-3d1a-4f60-b487-b6b6cd7d9d1b/invoices/your-invoice-id/pdf"\
-H 'Authorization: Bearer ACCESS_TOKEN' \
--output factura.pdf
Descripción: Devuelve el historial paginado de cobros (transacciones) realizados por la suscripción, con el detalle de cada pago y su estado.
{success} Respuesta satisfactoria code:
200 { "data": [ { "id": "01990bf8-e20c-72e4-b408-991e81f70beb", "amount": 15000, "currency_type": "COP", "tax": 0, "next_renew_at": "2025-09-02", "charge_at": "2025-09-02 14:48:06", "approved": 1, "subscription_id": "01990bf8-e1f3-7067-9c51-7bb4d1ad05bf", "transaction": { "transaction_id": 548, "amount": 15000, "currency_iso": "COP", "amount_cop": 15000, "tax": 0, "reference_1": "Subscription: 01990bf8-e1f3-7067-9c51-7bb4d1ad05bf", "reference_2": "Email: sdfasd@fsdfsd.ds", "reference_3": "1756842484281", "status": "Aprobada", "payment_method": "credit", "payment_method_source": "Visa", "network": "credibanco", "trazability_id": "548", "authorization_code": "548", "approved_at": "2025-09-02 14:48:04", "expired_at": "2025-09-03 14:48:04", "office_id": 1, "environment": "production", "aggregator": true, "economic_group_id": 1, "created_at": "2025-09-02 14:48:04", "customer_payer_id": "01976094-220e-719d-aa2a-7bca1b757f59", "customer_payer": { "email": "sdfasd@fsdfsd.ds", "name": "Osmi Otalora", "identification_type": "CC", "id_number": "101006464", "dialling_code": "57", "cellphone": "3006776454", "country": "COL", "state": "Bogota", "city": "Bogota", "address_1": "Bogota", "address_2": "Bogota", "zip_code": "0000" }, "subscription_id": "01990bf8-e1f3-7067-9c51-7bb4d1ad05bf" } } ], "links": { "first": "http://localhost:8009/api/v1/subscriptions/subscription/01990bf8-e1f3-7067-9c51-7bb4d1ad05bf/transaction-history?page=1", "last": "http://localhost:8009/api/v1/subscriptions/subscription/01990bf8-e1f3-7067-9c51-7bb4d1ad05bf/transaction-history?page=1", "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "links": [ { "url": null, "label": "« Anterior", "active": false }, { "url": "http://localhost:8009/api/v1/subscriptions/subscription/01990bf8-e1f3-7067-9c51-7bb4d1ad05bf/transaction-history?page=1", "label": "1", "active": true }, { "url": null, "label": "Siguiente »", "active": false } ], "path": "http://localhost:8009/api/v1/subscriptions/subscription/01990bf8-e1f3-7067-9c51-7bb4d1ad05bf/transaction-history", "per_page": 15, "to": 1, "total": 1 } }
Descripción: Devuelve la información del próximo cobro recurrente pendiente: cuánto y
cuándo se cobrará. Si aún no hay un cobro programado, transaction será null.
{success} Respuesta satisfactoria code:
200 { "id": "01990bf8-eadc-7064-9996-06f08a7fbcd5", "amount": 15000, "currency_type": "COP", "tax": 0, "next_renew_at": "2025-10-02", "charge_at": null, "approved": null, "subscription_id": "01990bf8-e1f3-7067-9c51-7bb4d1ad05bf", "transaction": null }