Gestionar suscripciones
Una vez que una suscripción está activada, puedes gestionar su ciclo de vida usando la API de MONEI — pausar, reanudar, cancelar, omitir pagos, actualizar el método de pago, modificar los detalles de la suscripción y prorratear cambios de plan.
Pausar una suscripción
Suspende temporalmente la facturación sin cancelar la suscripción. Hay varias formas de pausar:
Pausar inmediatamente
La suscripción pasa al estado PAUSED de inmediato. No se cobran más pagos hasta que la reanudes.
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/pause' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json'
const subscription = await monei.subscriptions.pause('YOUR_SUBSCRIPTION_ID');
<?php
$subscription = $monei->subscriptions->pause('YOUR_SUBSCRIPTION_ID');
?>
subscription = monei.subscriptions.pause("YOUR_SUBSCRIPTION_ID")
Pausar al final del periodo de facturación actual
La suscripción permanece ACTIVE hasta que finaliza el periodo de facturación actual y luego pasa a PAUSED.
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/pause' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"pauseAtPeriodEnd": true,
"pauseIntervalCount": 3
}'
const subscription = await monei.subscriptions.pause('YOUR_SUBSCRIPTION_ID', {
pauseAtPeriodEnd: true,
pauseIntervalCount: 3
});
<?php
use Monei\Model\PauseSubscriptionRequest;
$subscription = $monei->subscriptions->pause(
'YOUR_SUBSCRIPTION_ID',
new PauseSubscriptionRequest([
'pause_at_period_end' => true,
'pause_interval_count' => 3
])
);
?>
from Monei import PauseSubscriptionRequest
subscription = monei.subscriptions.pause(
"YOUR_SUBSCRIPTION_ID",
pause_subscription_request=PauseSubscriptionRequest(
pause_at_period_end=True,
pause_interval_count=3
)
)
Reanudación automática tras N ciclos de facturación
Establece pauseIntervalCount para reanudar automáticamente la suscripción después de un número específico de ciclos de facturación. Por ejemplo, si la suscripción se factura mensualmente y estableces pauseIntervalCount: 3, se pausará durante 3 meses y luego se reanudará automáticamente.
Cuando el contador llega a 0, la suscripción vuelve a ACTIVE y la facturación se reanuda.
Reanudar una suscripción
Reanuda una suscripción pausada para reiniciar la facturación. El siguiente pago se programa al final del periodo de facturación actual.
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/resume' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json'
const subscription = await monei.subscriptions.resume('YOUR_SUBSCRIPTION_ID');
<?php
$subscription = $monei->subscriptions->resume('YOUR_SUBSCRIPTION_ID');
?>
subscription = monei.subscriptions.resume("YOUR_SUBSCRIPTION_ID")
Al reanudar se eliminan cualquier indicador pendiente de pausa o cancelación al final del periodo.
Cancelar una suscripción
Detiene permanentemente una suscripción. Una vez cancelada, no se realizarán más cobros.
Cancelar inmediatamente
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/cancel' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json'
const subscription = await monei.subscriptions.cancel('YOUR_SUBSCRIPTION_ID');
<?php
$subscription = $monei->subscriptions->cancel('YOUR_SUBSCRIPTION_ID');
?>
subscription = monei.subscriptions.cancel("YOUR_SUBSCRIPTION_ID")
Cancelar al final del periodo de facturación actual
La suscripción permanece activa hasta que finaliza el periodo actual y luego pasa a CANCELED. El cliente conserva el acceso hasta que vence su periodo pagado.
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/cancel' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"cancelAtPeriodEnd": true
}'
const subscription = await monei.subscriptions.cancel('YOUR_SUBSCRIPTION_ID', {
cancelAtPeriodEnd: true
});
<?php
use Monei\Model\CancelSubscriptionRequest;
$subscription = $monei->subscriptions->cancel(
'YOUR_SUBSCRIPTION_ID',
new CancelSubscriptionRequest([
'cancel_at_period_end' => true
])
);
?>
from Monei import CancelSubscriptionRequest
subscription = monei.subscriptions.cancel(
"YOUR_SUBSCRIPTION_ID",
cancel_subscription_request=CancelSubscriptionRequest(
cancel_at_period_end=True
)
)
Si un cliente cambia de opinión antes de que finalice el periodo, puedes reanudar la suscripción para eliminar el indicador de cancelación al final del periodo.
Omitir ciclos de facturación
Omite uno o más ciclos de facturación sin cambiar el estado de la suscripción. La suscripción permanece ACTIVE — simplemente no se cobra el pago durante los ciclos omitidos.
Usa el endpoint actualizar suscripción con skipIntervalCount (1–31):
- cURL
- Node.js
- PHP
- Python
curl --request PUT 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"skipIntervalCount": 2
}'
const subscription = await monei.subscriptions.update('YOUR_SUBSCRIPTION_ID', {
skipIntervalCount: 2
});
<?php
use Monei\Model\UpdateSubscriptionRequest;
$subscription = $monei->subscriptions->update(
'YOUR_SUBSCRIPTION_ID',
new UpdateSubscriptionRequest([
'skip_interval_count' => 2
])
);
?>
from Monei import UpdateSubscriptionRequest
subscription = monei.subscriptions.update(
"YOUR_SUBSCRIPTION_ID",
UpdateSubscriptionRequest(
skip_interval_count=2
)
)
Por ejemplo, establecer skipIntervalCount: 2 en una suscripción mensual omite los 2 próximos pagos mensuales. La facturación se reanuda automáticamente tras los ciclos omitidos.
Omitir solo está disponible para suscripciones en estado ACTIVE, TRIALING o PAST_DUE. No se puede usar en suscripciones pausadas, canceladas o pendientes.
Actualizar el método de pago
Para cambiar el método de pago de una suscripción activa, llama de nuevo al endpoint activate. MONEI crea un pago de verificación de €0 para validar el nuevo método de pago sin cobrar al cliente.
El flujo de activación es el mismo que la activación inicial — usa el enfoque de página de pago alojada o de checkout personalizado. Una vez verificado el nuevo método de pago, todos los cobros recurrentes futuros lo utilizarán.
Actualizar los detalles de la suscripción
Modifica propiedades de la suscripción como el importe, el intervalo de facturación, la descripción, los metadatos o la fecha del próximo pago usando el endpoint actualizar suscripción.
- cURL
- Node.js
- PHP
- Python
curl --request PUT 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 2500,
"description": "Pro Plan Monthly (upgraded)"
}'
const subscription = await monei.subscriptions.update('YOUR_SUBSCRIPTION_ID', {
amount: 2500,
description: 'Pro Plan Monthly (upgraded)'
});
<?php
use Monei\Model\UpdateSubscriptionRequest;
$subscription = $monei->subscriptions->update(
'YOUR_SUBSCRIPTION_ID',
new UpdateSubscriptionRequest([
'amount' => 2500,
'description' => 'Pro Plan Monthly (upgraded)'
])
);
?>
from Monei import UpdateSubscriptionRequest
subscription = monei.subscriptions.update(
"YOUR_SUBSCRIPTION_ID",
UpdateSubscriptionRequest(
amount=2500,
description="Pro Plan Monthly (upgraded)"
)
)
Campos actualizables:
- amount — Cambia el importe del cobro recurrente. El nuevo importe se aplica desde el siguiente ciclo de facturación. Para cobrar o reembolsar la diferencia ahora, prorratea el cambio.
- interval / intervalCount — Cambia la frecuencia de facturación. El periodo máximo es de 1 año. El periodo actual llega a su fin y el nuevo intervalo se aplica desde el siguiente.
- nextPaymentAt — Mueve el próximo cobro a otra fecha, sin cambiar el precio. Consulta Mover la fecha del próximo cobro.
- trialPeriodEnd — Amplía el periodo de prueba de una suscripción en estado
TRIALING(debe ser una marca de tiempo futura). - description / metadata — Actualiza los campos descriptivos y los metadatos personalizados.
Si la suscripción usa Bizum como método de pago, el importe no puede modificarse tras la activación y los cobros no se pueden prorratear.
Mover la fecha del próximo cobro
Envía nextPaymentAt (una marca de tiempo Unix en segundos) para mover el próximo cobro. Los cobros siguientes parten de la nueva fecha. Por sí solo, el cambio no cobra ni reembolsa nada.
- La fecha debe ser futura y no más de cinco años en adelante.
- La suscripción debe estar en
ACTIVEoPAST_DUE. Para mover una prueba, actualizatrialPeriodEnd. Para mover una suscripción pausada, reanúdala primero. - Una omisión, pausa o cancelación pendiente bloquea el cambio, porque el cobro en la nueva fecha no se produciría. Elimínala en la misma solicitud: envía
skipIntervalCount: 0,pauseIntervalCount: null,pauseAtPeriodEnd: falseocancelAtPeriodEnd: false. - En una suscripción
PAST_DUE, el cambio detiene los reintentos y programa el cobro en la nueva fecha.
Para cobrar o reembolsar el tiempo que el cambio añade o quita, envía también prorate: true.
Prorratear un cambio
Por defecto, un nuevo precio o intervalo se aplica en el siguiente ciclo de facturación. Envía prorate: true con la actualización para liquidar la diferencia ahora: MONEI abona el tiempo no usado al precio actual, cobra el nuevo precio y cobra o reembolsa la diferencia.
Lo que MONEI cobra depende de lo que cambies:
| Cambio | Abono | Cobro | Periodo de facturación |
|---|---|---|---|
amount | Tiempo no usado al precio actual | Tiempo restante al nuevo precio | Sin cambios |
interval / intervalCount | Tiempo no usado al precio actual | El nuevo precio completo | Se reinicia ahora |
nextPaymentAt | Tiempo no usado al precio actual | Tiempo desde ahora hasta la nueva fecha, al precio actual | Termina en la nueva fecha |
Una fecha posterior cobra el tiempo que añade. Una fecha anterior reembolsa el tiempo que quita.
Por ejemplo, un cliente con un plan mensual de 10 € sube a 20 € a mitad de mes. MONEI abona 5 € por la mitad no usada a 10 €, cobra 10 € por esa misma mitad a 20 € y cobra la diferencia de 5 € al método de pago guardado. El siguiente cobro de 20 € se hace en la fecha original.
1. Previsualiza el cambio
Llama a previsualizar la actualización de la suscripción con los mismos campos que vas a enviar. Devuelve lo que liquidaría el cambio y no modifica nada. Muéstralo al cliente antes de que confirme.
- cURL
- Node.js
- PHP
- Python
curl --request POST 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID/preview' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 2000
}'
const preview = await monei.subscriptions.preview('YOUR_SUBSCRIPTION_ID', {
amount: 2000
});
<?php
use Monei\Model\PreviewSubscriptionUpdateRequest;
$preview = $monei->subscriptions->preview(
'YOUR_SUBSCRIPTION_ID',
new PreviewSubscriptionUpdateRequest([
'amount' => 2000
])
);
?>
from Monei import PreviewSubscriptionUpdateRequest
preview = monei.subscriptions.preview(
"YOUR_SUBSCRIPTION_ID",
PreviewSubscriptionUpdateRequest(
amount=2000
)
)
{
"credit": 500,
"charge": 1000,
"net": 500,
"direction": "charge",
"refundCapped": false,
"effectiveAt": 1790000000,
"currentPeriodEnd": 1791296000
}
- credit — Tiempo no usado al precio actual, en la unidad monetaria más pequeña.
- charge — Tiempo al nuevo precio. Un cambio de intervalo cobra el nuevo precio completo.
- net —
chargemenoscredit: el importe que se mueve. - direction —
charge,refundonone.nonesignifica que la diferencia se redondea a cero. - newPeriodEnd / nextPaymentAt — Solo cuando el cambio reinicia o mueve el periodo de facturación.
Las cifras son una estimación: la actualización las recalcula al aplicarla. La previsualización hace las mismas comprobaciones que la actualización, así que un cambio que la previsualización rechaza también se rechaza al actualizar.
2. Aplica el cambio
Envía los mismos campos a actualizar la suscripción con prorate: true:
- cURL
- Node.js
- PHP
- Python
curl --request PUT 'https://api.monei.com/v1/subscriptions/YOUR_SUBSCRIPTION_ID' \
--header 'Authorization: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": 2000,
"prorate": true
}'
const subscription = await monei.subscriptions.update('YOUR_SUBSCRIPTION_ID', {
amount: 2000,
prorate: true
});
<?php
use Monei\Model\UpdateSubscriptionRequest;
$subscription = $monei->subscriptions->update(
'YOUR_SUBSCRIPTION_ID',
new UpdateSubscriptionRequest([
'amount' => 2000,
'prorate' => true
])
);
?>
from Monei import UpdateSubscriptionRequest
subscription = monei.subscriptions.update(
"YOUR_SUBSCRIPTION_ID",
UpdateSubscriptionRequest(
amount=2000,
prorate=True
)
)
La respuesta es la suscripción actualizada. lastProration registra lo que liquidó el cambio (credit, charge, net y el paymentId del cobro, si lo hay) y lastProrationAt registra cuándo. MONEI también envía un webhook subscription.updated.
Cómo funcionan los reembolsos
Cuando la diferencia es negativa, MONEI la reembolsa de los pagos que financiaron el periodo de facturación actual, empezando por el más reciente: el cobro del último cambio prorrateado del periodo y después el pago de renovación. Si entre los dos no cubren el reembolso, MONEI rechaza el cambio y no mueve dinero. Un cambio se liquida completo o no se liquida.
Para reembolsar, tu cuenta debe tener los reembolsos habilitados.
Límites
- Estado — Solo suscripciones
ACTIVEyTRIALING. En una suscripciónTRIALINGlos campos cambian y no se mueve dinero, porque no hay tiempo pagado que abonar. - Cambios repetidos — Puedes prorratear un periodo de facturación más de una vez. Espera al menos un segundo entre cambios: MONEI rechaza un cambio mientras el anterior se está liquidando.
- Periodos redimensionados — Después de un cambio que mueve el fin del periodo actual (un cambio de
nextPaymentAt, o un cambio de intervalo sinprorate), no puedes volver a prorratear hasta la siguiente renovación. - Fecha del próximo cobro — Un cambio prorrateado de
nextPaymentAtsolo funciona en suscripcionesACTIVE, no se puede combinar con un cambio de intervalo y no puede cobrar más de 24 periodos de facturación. - Cambios programados —
prorateno se puede combinar contrialPeriodEnd,cancelAtPeriodEnd,pauseAtPeriodEnd,pauseIntervalCountniskipIntervalCount. Un cambio de intervalo prorrateado se rechaza mientras haya una cancelación, pausa u omisión programada. La única excepción es un cambio denextPaymentAt, que acepta los valores de eliminación de Mover la fecha del próximo cobro. - Algo que liquidar —
proratenecesita un cambio enamount,interval,intervalCountonextPaymentAt. - Bizum — Las suscripciones que pagan con Bizum no se pueden prorratear.
Prorratear en el Dashboard
- En el MONEI Dashboard, abre la suscripción y haz clic en Actualizar.
- Cambia el Importe, el Periodo de facturación o la Próxima fecha de cobro.
- Activa Aplica el cambio ahora. El formulario muestra lo que se cobrará o reembolsará al cliente.
- Haz clic en Actualizar la suscripción.
El interruptor Aplica el cambio ahora aparece en las suscripciones activas que no pagan con Bizum. Cada liquidación aparece después en la cronología de la suscripción como Cobro prorrateado o Reembolso prorrateado.