# Suscripciones y cobros únicos

En Reveniu tenemos dos tipos de planes de cobro: Cobros Recurrentes o Suscripciones; y Cobros Únicos. Esto estará determinado por el tipo de Plan al que se asocia tu cliente. Ejemplo, si asocias al cliente a un Plan de Cobro Mensual, se creará una Suscripción. Si asocias al cliente a un plan de Pago Único, se creará un Cobro Único.

La diferencia principal es que las suscripciones recurrentes permiten el cobro al cliente varias veces con un solo registro de su tarjeta: El cliente registra su método de pago una sola vez y Reveniu se encarga de cobrar automáticamente en las fechas indicadas por su intervalo. Los cobros únicos solo se crean para procesar el pago UNA sola vez al cliente.&#x20;

Si el plan al que estás asociando a tu cliente es de pago único, sólo recibirás la confirmación del pago al final del proceso, pero si deseas cobrar un monto adicional el cliente deberá ingresar de nuevo sus datos e iniciar el proceso nuevamente.

## Ciclo de vida&#x20;

### Cobro único

1. Se genera un cobro único al momento de iniciar el checkout
2. Se intenta automáticamente un cobro, recibiendo del gateway la respuesta del pago respectivo
3. Se registra el resultado del pago, con el estatus definido.
4. Los cobros únicos no pueden ser reintentados, renovados o actualizados

### Suscripción&#x20;

Una suscripción es un modelo dinámico, y puede tener diferentes estados durante su proceso de vida. Típicamente una suscripción está asociada a un número de pagos exitosos que debe completar antes de renovarse o declararse expirada. Si tiene una duración indefinida, la suscripción seguirá cobrando en su intervalo definido hasta que sea cancelada por ti o por el cliente.

1. Al inicio del checkout, la suscripción será creada con un status automático "Abandonada". En el transcurso de 10 minutos se intentará el 1er pago de dicha subscripción y se actualizará su status:
   1. Si el pago es exitoso, su status cambiará a "On time". Se resta 1  de los intentos de pago del total de pagos y se programa la próxima fecha de pago tomando en cuenta la fecha del pago exitoso y el intervalo configurado para la suscripción. Ejemplo, si es una suscripción mensual, se programará para el mismo día del mes siguiente.
   2. Si el pago es fallido, su status cambiará a "Failed 1 time" y se programará un intento de pago para el siguiente día calendario.&#x20;
      1. La suscripción realizará hasta 4 intentos totales de pago, pasando su estado a:
         1. Failed 1 time
         2. Failed 2 time
         3. Failed 3 time
         4. Failed
      2. Si la suscripción llega a su estado Failed, no realizará mas cobros. Podrá ser reactivada si el cliente actualiza los datos de su tarjeta o si el comercio inicia un ciclo de recuperación.
2. Al culminar su número de pagos programados, la suscripción verificará si debe ser o no renovada. De ser renovada mantendrá su estatus "On time". Si no, llegará al status ¨Expired¨

### Sobre los urls de Suscripciones y Cobros únicos

En ambos casos, internamente se crea un modelo Suscripción, por lo que manejarás siempre el mismo url api/v1/subscriptions/ . No existen en esta versión los endpoints del tipo api/v1/onetime\_payment, por ejemplo.

## Objeto Suscripción

{% tabs %}
{% tab title="Objeto" %}

| ATRIBUTO                     | TIPO        | DESCRIPCION                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| interval                     | integer     | <p>Intervalo de cobro de la suscripción <br>(<a href="/pages/-Md2cws7Ro0aHSjbjEB1#intervalos-de-un-plan-suscripcion">Ver variables</a>)<br></p>                                                                                                                                                                                                                                                                                                                                                              |
| status                       | integer     | <p>Estatus actual de la suscripción<br>(<a href="/pages/-Md2cws7Ro0aHSjbjEB1#status-de-una-suscripcion">Ver variables</a>)</p>                                                                                                                                                                                                                                                                                                                                                                               |
| cicles                       | integer     | <p>Número de ciclos de cobro que debe completar un suscripción antes de terminarse o renovarse. <br>Si se trata de un link de cobro indefinido y auto renovable siempre aparecerá como 1</p>                                                                                                                                                                                                                                                                                                                 |
| remaining\_cicles            | integer     | Número de ciclos de cobro que le faltan por cobrar a la suscripción.                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| trial\_cicles                | integer     | Número de meses de prueba gratis que quieres agregar a un plan mensual. El número debe ser menor estricto al parámetro **cicles**                                                                                                                                                                                                                                                                                                                                                                            |
| link\_title                  | string      | Título del plan.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| link\_description            | string      | Descripción del plan.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `is_custom_amount`           | boolean     | **Falso** Si el plan tiene un monto fijo, **Verdadero** si tiene un monto definido por el cliente al momento del checkout.                                                                                                                                                                                                                                                                                                                                                                                   |
| is\_uf                       | boolean     | **Verdadero** Sí el cobro es con CLP, **Falso** sí el cobro es con UF.                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| plan\_id                     | integer     | Identificador del plan al que pertenece la suscripción.                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `is_auto_renew`              | boolean     | **Verdadero** Sí la suscripción se auto renovará cuando `remaining_cicles` sea 0.                                                                                                                                                                                                                                                                                                                                                                                                                            |
| link\_amount                 | number      | Monto a cobrar en cada recurrencia.                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| discount                     | object      | <ul><li><code>rate</code>(number): Valor a descontar</li><li><code>is\_fixed</code>(boolean): <strong>Verdadero</strong> si el rate es un monto fijo, <strong>Falso</strong> si rate es un % del total</li><li><code>has\_discount</code> (boolean):  <strong>Verdadero</strong> si el plan tiene un descuento asociado.</li><li><code>cicles</code> (integer):     Número de veces que se aplica el descuento al momento de ' iniciar el plan. Siempre será 1 si la suscripción  es de pago único</li></ul> |
| customer                     | object      | <ul><li><code>full\_name</code> (string): Nombre del Cliente</li><li><code>email</code>(string): email del Cliente</li></ul>                                                                                                                                                                                                                                                                                                                                                                                 |
| last\_payment                | object      | <ul><li>date Fecha del último pago procesado para esta suscripción</li><li>status: Es cero si el pago fue exitoso y diferente de cero si es fallido.<br></li></ul>                                                                                                                                                                                                                                                                                                                                           |
| dte\_type                    | list        | Códigos de los DTE que puede generar la suscripción (sólo disponible con integración a Open Factura)                                                                                                                                                                                                                                                                                                                                                                                                         |
| subscription\_custom\_fields | object list | Listado de los valores de campos custom que se definan al crear el plan                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| total\_successful\_payments  | integer     | Número de pagos **exitosos** procesados con esta suscripción                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| payment\_method              | object      | <ul><li>payment\_method\_type: Visa, Mastercad, AMEX, Redcompra</li><li>last\_4\_card\_digits String con los últimos 4 dígitos de la tarjeta asociada <br></li></ul>                                                                                                                                                                                                                                                                                                                                         |
| external\_id                 | string      | Si deseas asociar esta suscripción a un identificador arbitrario                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| {% endtab %}                 |             |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

{% tab title="JSON" %}
`{`&#x20;

`"id": 2080,`&#x20;

`"interval": "3",`&#x20;

`"created_on": "2022-11-30T15:14:27.361634Z",`&#x20;

`"status": "1",`&#x20;

`"cicles": 1,`&#x20;

`"remaining_cicles": 1,`&#x20;

`"link_title": "Plan de Prueba",`&#x20;

`"link_description": "",`&#x20;

`"plan_amount": 1000.0,`&#x20;

`"is_uf": false,`&#x20;

`"next_due": "2022-12-30T15:00:00Z",`&#x20;

`"plan_id": 345678,`&#x20;

`"is_auto_renew": false,`&#x20;

`"discount_rate": 0,`&#x20;

`"discount_is_fixed": false,`&#x20;

`"discount_cicles": 0,`&#x20;

`"customer": { "id": 764, "email": "kenny.vivas+nov301@reveniu.com", "name": "Kenny Vivas" },`&#x20;

`"last_payment": { "date": "2022-11-30T15:24:45.604953Z", "status": "0" },`&#x20;

`"dte_type": {},`&#x20;

`"subscription_custom_fields": [],`&#x20;

`"total_successful_payments": 1,`&#x20;

`"payment_method": { "last_4_card_digits": "XXXXXXXXXXXX6623", "payment_method_type": "Visa" }`&#x20;

`}`
{% endtab %}
{% endtabs %}

### Métodos disponibles

## Crear una suscripción o un cobro único, dependiendo de la frecuencia definida por el plan asociado

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/`

Permite iniciar una suscripción a través del API, evitándole al usuario tener que ingresar su información y permitiendo redirigir desde tu aplicación directamente a la selección de medio de pago.

#### Headers

| Name               | Type   | Description                        |
| ------------------ | ------ | ---------------------------------- |
| Reveniu-Secret-Key | string | Identificador para acceder al API. |

#### Request Body

| Name                    | Type    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ----------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| plan\_id                | integer | Identificador único del plan al que corresponderá la suscripción.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| field\_values           | object  | Datos a asociar a la suscripción.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| extra\_customer\_fields | Array   | <p>Array de objetos <strong>Field</strong> si necesitas agregar campos adicionales que no están en la lista de field\_values pre definidos por Reveniu</p><p></p><p>Cada campo se define como un objeto Field de esta forma:</p><p><code>{</code> </p><p>  <code>"name":"El nombre del campo custom",</code>    </p><p><code>"tag\_name":"identificador\_en\_snake\_case",</code> </p><p><code>"content":"El contenido del campo" </code><strong><code>(Siempre sera un string)</code></strong> </p><p><code>}</code></p><p><strong>¡Los tres elementos del objeto son requeridos!</strong></p> |

{% tabs %}
{% tab title="200 La respuesta incluye el id de la suscripción (que puede ser consultado posteriormente), una URL donde debes dirigir al usuario para que complete la inscripción de su medio de pago. y un token de seguridad necesario para redirigir a tu cliente al formulario de registro de sus datos de pago (requerido en muchos medios de pago)." %}

```
{
    "id": 12414, 
    "completion_url": "https://reveniu.com/....",
    "security_token": "fjgj6d3hrhfh6838whfht5482"

}
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejemplo" %}

```
curl https://integration.reveniu.com/api/v1/subscriptions/ \
  -H "Reveniu-Secret-Key: your-secret" \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{
      "plan_id": 123,
      "external_id": "IDENTIFICADOR_EXTERNO_1",
      "field_values": {
        "email": "usuario@gmail.com",
        "name": "Perico de los Palotes",
        // Si tu plan es de monto indefinido, debes definir el monto del cobro con este campo
        "amount": 15000,
        // Hasta aqui los parámetros obligatorios. Si deseas puedes agregar:
        "address": "Avenida de los Palotes 123, Palotes, RM, Chile",
        // Los campos de rut y ent_rut reciben strings, por lo que se puede
        //agregar el dígito verificador sin problemas y en diferentes formatos
        "rut": "1111111k",
        "ent_rut": "1111111-1" //(Rut de empresa)                                                   
        "bday": "26/10/2015",
        "phone": 1111111,
        "comuna": 1,
        "region": 1,
        "country": 1,
        "rsocial": "Razon social",        
        "comments": "Comentarios"
      }
      // Si deseas agregar campos adicionales aparte de los listados en el objeto field_values
      // (como, 'color de ojos' o 'talla de camisa', lo que necesites!)
      // Debes agregar el siguiente array (al mismo nivel de "field_values") de objetos, llamado
      // "extra_customer_fields"
      "extra_customer_fields":
        [
          {
            "name":"El nombre de primer campo custom",
            "tag_name":"identificador_en_snake_case",
            "content":"El contenido del campo" (Siempre sera un string)
          },
          {
            "name":"El nombre de otro campo custom",
            "tag_name":"identificador_del_otro_campo_en_snake_case",
            "content":"El contenido del otro campo" (Recuerda, los valores SIEMPRE seran strings)
          }
        ],
        
    ...
  }'
```

#### Respuesta

`{ "id": INTEGER,`&#x20;

&#x20; `"completion_url":   "https://webpay3gint.transbank.cl/webpayserver/bp_multicode_inscription.cgi", "security_token": "01ab49732ee545e5c4644ad4bb8e8b538e58ea604c4b72952946d7c906986531", "status_code": 200 }`

La respuesta incluye el **id** de la suscripción (que puede ser consultado posteriormente), una **URL** donde debes dirigir al usuario para que complete la inscripción de su medio de pago. y un **token de seguridad** necesario para redirigir a tu cliente al formulario de registro de sus datos de pago (requerido en muchos medios de pago). Podrás tomar el control final del flujo mediante el `success_url` o el `failure_url` del plan, pero te recomendamos siempre usar el webhook ***subscription\_succeeded*** para completar en tu backend la operación (pues aún si el navegador del usuario o la conexión del usuario sufre un problema, recibirás el llamado a tu webhook).

#### Si no estás usando webhooks para verificar la creación de una suscripción/cobro único

Al redireccionar al `success_url` o a `failure_url` que definas en cada link de pago, incluímos un parametro GET id=id\_\_de\_suscripcion. Puedes usar este parámetro para verificar que el id que recibes es en efecto el perteneciente una suscripción creada. Recuerda que al recibir esta redirección es muy probable que la suscripción aún no tenga su primer cobro, por lo que puedes esperar hasta un máximo de 10 minutos para verificar su pago. Consulta la sección [Ciclo de vida de una suscripción](/~/changes/PZnR7vI812y9vCFVj2aA/api-recursos/suscripciones.md#ciclo-de-vida-de-una-suscripcion) para mas detalles.

**Uso de external\_id**

Si deseas que tu suscripcion tenga un identificador arbitrario que generes desde tu backend, puedes asignarlo. Esto NO ALTERA ni REEMPLAZA al id de la suscripción, pero siempre lo recibirás en la info de los webhooks y los demas servicios del api. No es posible realizar una busqueda por external\_id en los servicios de búsqueda del api.

#### Cómo usar el *completion\_link* para disparar el formulario de registro de tarjeta (Caso Transbank)

Actualmente estamos usando *Transbank* como gateway de pagos de forma general en Reveniu. Tanto para los planes de pago único (WebpayPlusMall) como en los casos de pago recurrente (OneClickMall) es necesario redirigir via **POST** a la dirección `completion_url` y el parámetro **TBK\_TOKEN** igual a `security_token` . Dejamos un snippet de ejemplo de cómo hacerlo automáticamente creado un formulario con javascript.

Te recomendamos que te asegures de almacenar el parámetro id que identifica a la suscripción, debido a que o bien recibirás por [webhook](/~/changes/PZnR7vI812y9vCFVj2aA/api-recursos/webhooks.md) la notificación de que la suscripción fue activada o bien puedes tu mismo preguntar por el estatus de la suscripción usando el [servicio](/~/changes/PZnR7vI812y9vCFVj2aA/api-recursos/suscripciones.md#devuelve-los-detalles-de-una-suscripcion) que te suministramos al efecto

Una vez que tu cliente culmine el proceso de registro será redirigido a la página de éxito o fracaso que definas para cada plan (incluyendo el parámetro `id`=Id de la suscripción, por GET) De no tener una página definida de éxito o fracaso en el plan que estás usando, Reveniu mostrará sus propias páginas de éxito o fracaso por defecto.

Ejemplo (Javascript)

```javascript
var form = document.createElement('form');
form.method = 'POST';
form.action = data.**completion_url**;
form.target = '_self';
var input = document.createElement('input');
input.id = 'TBK_TOKEN';
input.name = 'TBK_TOKEN';
input.type = 'hidden';
input.value = data.**security_token**;
form.appendChild(input);
document.body.appendChild(form);
form.submit();
```

{% endtab %}
{% endtabs %}

## Listar todas las suscripciones

<mark style="color:blue;">`GET`</mark> `https://integration.reveniu.com/api/v1/subscriptions/`

Entrega la información de todas las suscripciones del comercio.

#### Query Parameters

| Name        | Type     | Description                                      |
| ----------- | -------- | ------------------------------------------------ |
| plan        | Int      | Filtrar por Id de plan                           |
| date\_start | YYYY-m-d | Filtrar por fecha de creación (mayor o igual a ) |
| date\_end   | YYYY-m-d | Filtrar por fecha de creación (menor o igual a ) |

#### Headers

| Name               | Type   | Description                        |
| ------------------ | ------ | ---------------------------------- |
| Reveniu-Secret-Key | string | Identificador para acceder al API. |

{% tabs %}
{% tab title="200 Devuelve listado de suscripciones del comercio" %}

```
[
"data": [
    {
      "id": 195,
      "status": "10",
      "interval": "3"
    },
...
]
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejemplo" %}

```
curl https://integration.reveniu.com/api/v1/subscriptions/ \
  -H "Reveniu-Secret-Key: your-secret"
```

{% endtab %}
{% endtabs %}

## Devuelve los detalles de una suscripción

<mark style="color:blue;">`GET`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{id}`

Retorna los detalles de la suscripción.

#### Path Parameters

| Name | Type    | Description                            |
| ---- | ------- | -------------------------------------- |
| id   | integer | Identificador único de la suscripción. |

#### Headers

| Name               | Type   | Description                        |
| ------------------ | ------ | ---------------------------------- |
| Reveniu-Secret-Key | string | Identificador para acceder el API. |

{% tabs %}
{% tab title="200 Devuelve una suscripción." %}

```
{
    "id":12414,
    "status":1,
    "cicles":10,
    "remaining_cicles":5,
    "next_due": "2023-04-07T15:00:00Z",
    "created_on": "2022-11-07T15:44:31.694097Z",
    "trial_cicles":1,
    "link_title":"Plan Mensual Especial",
    "link_description":"Acceso a nuestros servicios",
    "is_custom_amount":false,
    "is_auto_renew":true,
    "link_amount":10000,
    "is_uf":false,
    "plan_id":101,
     "payment_method": {
    "last_4_card_digits": "XXXXXXXXXXXX6623",
    "payment_method_type": "Visa"
     }
    "discount":{
                "has_discount":true,
                "rate":500,
                "is_fixed":true,
                "cicles":3
            },
    "customer":{
                "full_name":"Rafael Diaz",
                "email":"rafaeldiaz@reveniu.com",
            },
    }
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejemplo" %}

```
curl https://integration.reveniu.com/api/v1/subscriptions/123 \
  -H "Reveniu-Secret-Key: your-secret"
```

{% endtab %}
{% endtabs %}

## Listar suscripciones asociadas a un correo electrónico

<mark style="color:blue;">`GET`</mark> `https://integration.reveniu.com/api/v1/subscriptions/search?email={email}`

Devuelve listado de suscripciones asociada a un correo electrónico.

#### Path Parameters

| Name  | Type   | Description                                   |
| ----- | ------ | --------------------------------------------- |
| email | string | Correo electrónico asociado a la suscripción. |

#### Headers

| Name               | Type   | Description                        |
| ------------------ | ------ | ---------------------------------- |
| Reveniu-Secret-Key | string | Identificador para acceder el API. |

{% tabs %}
{% tab title="200 Retorna el listado de suscripciones asociadas a un correo electrónico" %}

```
[
{
    "id":12414,
    "status":1,
    "cicles":10,
    "remaining_cicles":5,
    "trial_cicles":1,
    "link_title":"Plan Mensual Especial",
    "link_description":"Acceso a nuestros servicios",
    "is_custom_amount":false,
    "is_auto_renew":true,
    "link_amount":10000,
    "is_uf":false,
    "plan_id":101,
    "discount":{
                "has_discount":true,
                "rate":500,
                "is_fixed":true,
                "cicles":3
            },
    "customer":{
                "full_name":"Rafael Diaz",
                "email":"rafaeldiaz@reveniu.com",
            },
    }
...
]
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejemplo" %}

```
curl https://integration.reveniu.com/api/v1/subscriptions/search?email=usuario@gmail.com \
  -H "Reveniu-Secret-Key: your-secret"
```

{% endtab %}
{% endtabs %}

## Devuelve los pagos asociados a una suscripción

<mark style="color:blue;">`GET`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{id}/payments`

Retorna los pagos pertenecientes a una suscripción

#### Path Parameters

| Name | Type    | Description                            |
| ---- | ------- | -------------------------------------- |
| id   | integer | Identificador único de la suscripción. |

#### Headers

| Name               | Type   | Description                        |
| ------------------ | ------ | ---------------------------------- |
| Reveniu-Secret-Key | string | Identificador para acceder el API. |

{% tabs %}
{% tab title="200 Retorna listado de pagos asociados a una suscripción" %}

```
[
    {
        id: 220,
        payments:[{
        buy_order: 20200420220,
        issued_on: "2020-04-20T23:55:14.981934Z",
        amount: 1000,
        credit_card_type: "VD",
        is_recurrent: false,    
        subscription: 175,
        gateway_response: "0"}
        ...
        ]
    },

]
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Ejemplo" %}

```
curl https://integration.reveniu.com/api/v1/subscriptions/{id}/payments \
  -H "Reveniu-Secret-Key: your-secret"
```

{% endtab %}
{% endtabs %}

## Intenta recuperar una suscripción&#x20;

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/v1/subscriptions/reactivate/{id}`

Si la suscripción tiene un estado fallido, este método activará su modo de recuperación y cambiará la próxima fecha de cobro a TODAY.

#### Path Parameters

| Name                                 | Type    | Description          |
| ------------------------------------ | ------- | -------------------- |
| id<mark style="color:red;">\*</mark> | Integer | Id de la suscripción |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "result": true
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
  "error": "Bad request",
  "status_code": 400
}
```

{% endtab %}
{% endtabs %}

## Forzar la recuperación de un listado de suscripciones (actualización por lotes)

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/reactivate/`

Si se provee un listado de ids de suscripciones pertenecientes al comercio, la actualización se hará por lotes. Permite recuperar hasta 50 suscripciones a la vez.

Devuelve en el arreglo *success\_list los ids de las suscripciones que si pudo reactivar, y en failed\_*&#x6C;ist los ids que presentaron errores

#### Query Parameters

| Name                                   | Type        | Description                               |
| -------------------------------------- | ----------- | ----------------------------------------- |
| subs<mark style="color:red;">\*</mark> | Integer \[] | Arreglo de identificadores de suscripción |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
  "result": true,
  "success_changes": [arreglo de ids],
  "failed_changes": [arreglo de ids]
}}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
  "error": "Bad request",
  "status_code": 400
}
```

{% endtab %}
{% endtabs %}

## Genera un pago por un monto arbitrario a una suscripción activa&#x20;

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{id}/payments/authorize/`

La suscripción debe pertenecer al comercio y encontrarse activa. El perfil del comercio debe tener permisos de plan PRO y sus propias credenciales habilitadas de gateway

#### Path Parameters

| Name                                 | Type   | Description          |
| ------------------------------------ | ------ | -------------------- |
| id<mark style="color:red;">\*</mark> | String | Id de la suscripción |

#### Query Parameters

| Name                                     | Type    | Description      |
| ---------------------------------------- | ------- | ---------------- |
| amount<mark style="color:red;">\*</mark> | Integer | Monto a procesar |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
  "result": [
    true/false, //Pago exitoso?
    true/false, // Se aplico un descuento en este pago?
    {
      "details": [
        {
          "amount": 175000,
          "status": "AUTHORIZED",
          "authorization_code": "1213",
          "payment_type_code": "VN",
          "response_code": 0,
          "installments_number": 0,
          "commerce_code": "597055555542",
          "buy_order": "202203071500001" //Orden hija 
        }
      ],
      "buy_order": "202203071500", //Orden padre
      "card_detail": {
        "card_number": "6623"
      },
      "accounting_date": "0307",
      "transaction_date": "2022-03-07T21:30:36.641Z"
    }
  ],
  "status_code": 200
}
```

{% endtab %}
{% endtabs %}

## Dar de baja una suscripción conociendo su id

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{id}/disable/`

#### Path Parameters

| Name                                 | Type    | Description                     |
| ------------------------------------ | ------- | ------------------------------- |
| id<mark style="color:red;">\*</mark> | Integer | Identificador de la suscripción |

{% tabs %}
{% tab title="200: OK Suscripción dada de baja" %}

```javascript
{
    'result':True | False,
    'sub_id':INTEGER} 
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
{
    'result': False
 
}}
```

{% endtab %}
{% endtabs %}

## Desactiva la renovación de una suscripción

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{Id de sub}/disablerenew/`

Permite que la suscripción quede como activa hasta su próxima fecha de cobro programada. En esa próxima fecha la suscripción no se cobrará, sino que será marcada como **Expirada**.

#### Path Parameters

| Name                                 | Type   | Description          |
| ------------------------------------ | ------ | -------------------- |
| id<mark style="color:red;">\*</mark> | String | Id de la suscripción |

## Cambiar el día preferido de cobro de una suscripción

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{Id de sub}/dueday/`

Se cambia el día preferido de pago de una suscripción al próximo día calendario. Ejemplo, si hoy es 20 de mayo y deseas cambiarlo a los días 15, se cambiará la próxima fecha programada al 15 de junio y se realizarán los cobros todos los 15 de cada mes a partir de ese momento.

#### Request Body

| Name                                       | Type | Description                                            |
| ------------------------------------------ | ---- | ------------------------------------------------------ |
| new\_day<mark style="color:red;">\*</mark> | Int  | Día del mes al que se quiere cambiar la fecha de cobro |

## Enviar a un cliente el link para cambio de método de pago de una suscripción

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/change_method/`

Envía un correo con un link para cambiar el método de pago asociado a la suscripción o suscripciones especificadas por id en el arreglo "subs"

#### Request Body

| Name                                   | Type | Description                                                                   |
| -------------------------------------- | ---- | ----------------------------------------------------------------------------- |
| subs<mark style="color:red;">\*</mark> | list | Lista de ids enteros de las suscripciones a las que se desea enviar el correo |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
{'result':True,'success_changes':[120,121,122],'failed_changes':[131,132]}}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    {'error':'Bad request','status_code':400}
}
```

{% endtab %}
{% endtabs %}

## Cambiar el monto de cobro de una suscripción

<mark style="color:green;">`POST`</mark> `https://integration.reveniu.com/api/v1/subscriptions/{id}/amount/`

#### Request Body

| Name                                     | Type    | Description                                  |
| ---------------------------------------- | ------- | -------------------------------------------- |
| amount<mark style="color:red;">\*</mark> | Integer | Monto al que se desea cambiar la suscripción |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    'result':True,
    'sub_id':Id de suscripción,
    'new_amount':Nuevo monto
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    'result':False
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.reveniu.com/~/changes/PZnR7vI812y9vCFVj2aA/api-recursos/suscripciones.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
