# Planes

Los clientes pueden suscribirse a planes, lo que creará automáticamente una nueva suscripción que activará una autorización de pago al comienzo de cada ciclo de facturación. Los clientes también podrán cancelar una suscripción en cualquier momento.

Los planes no se pueden eliminar, sin embargo, pueden quedar inactivos, lo que no cancelará las suscripciones actuales, pero evitará que los clientes creen nuevas suscripciones.

Las suscripciones creadas a través de un plan se mantendrán independientes del plan que las originó, es decir estas podrán ser modificadas sin afectar dicho plan. *Esto implica también que si modificas un plan, no estarás modificando las suscripciones ya creadas.*

## Endpoints

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

```http
 GET /api/v1/plans/
 GET /api/v1/plans/ID
 POST /api/v1/plans/
```

{% endtab %}
{% endtabs %}

## Objeto Plan

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

####

| ATRIBUTO                          | TIPO     | DESCRIPCION                                                                                                                                                                                                                                                          |        |                                                                   |
| --------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------- |
| **id**                            | string   | Identificador único del objeto.                                                                                                                                                                                                                                      |        |                                                                   |
| created\_on                       | datetime | Fecha en la que se creó el objeto en formato ISO 8601. Basado en UTC.                                                                                                                                                                                                |        |                                                                   |
| frequency                         | string   | Determina el período de facturación. Para las suscripciones y cobros recurrentes se creará un nuevo pago en cada período y se solicitará una autorización en el 1er. Período.[ Ver lista de opciones.](/api-recursos/variables.md#intervalos-de-un-plan-suscripcion) |        |                                                                   |
| owner                             | object   | Un objeto Profile al cual le pertenece el plan                                                                                                                                                                                                                       |        |                                                                   |
| active                            | boolean  | Indica si el plan se encuentra activo                                                                                                                                                                                                                                |        |                                                                   |
| slug                              | string   | Cadena de caracteres utilizada para identificar de manera única al objeto.                                                                                                                                                                                           |        |                                                                   |
| title                             | string   | Título o nombre del plan.                                                                                                                                                                                                                                            |        |                                                                   |
| description                       | string   | Texto detallando las características del plan.                                                                                                                                                                                                                       |        |                                                                   |
| price                             | float    | Número punto flotante que representa el  precio del plan.                                                                                                                                                                                                            |        |                                                                   |
| currency                          | string   | Código ISO de tres letras para la moneda. [Ver lista de opciones](/api-recursos/variables.md#listado-de-monedas).                                                                                                                                                    |        |                                                                   |
| is\_custom\_amount                | boolean  | Si permite que el monto sea definido al momento del registro                                                                                                                                                                                                         |        |                                                                   |
| custom\_amount\_min               | integer  | Minimo monto permitido                                                                                                                                                                                                                                               |        |                                                                   |
| custom\_amount\_max               | integer  | Maximo monto permitido                                                                                                                                                                                                                                               |        |                                                                   |
| is\_uf                            | boolean  | Indica si el precio está expresado en Unidad de Fomento (UF). Sólo disponible para Chile.                                                                                                                                                                            |        |                                                                   |
| subs\_counter                     | integer  |                                                                                                                                                                                                                                                                      |        |                                                                   |
| total\_cicles                     | integer  |                                                                                                                                                                                                                                                                      |        |                                                                   |
| rut\_field                        | boolean  | Indica si se solicita el RUT (Rol Único Tributario, identificador de personas naturales y jurídicas en Cchile). Se almacena en el campo custom\_fields conf                                                                                                          |        |                                                                   |
| bday\_field                       | boolean  | Indica si se solicita la fecha de nacimiento. Se almacena en el campo custom\_fields conf                                                                                                                                                                            |        |                                                                   |
| phone\_field                      | boolean  | Indica si se solicita el teléfono. Se almacena en el campo custom\_fields conf                                                                                                                                                                                       |        |                                                                   |
| address\_field                    | boolean  | Indica si se solicita la dirección. Se almacena en el campo custom\_fields conf                                                                                                                                                                                      |        |                                                                   |
| street\_field                     | boolean  | Indica si se solicita la calle. Se almacena en el campo custom\_fields conf                                                                                                                                                                                          |        |                                                                   |
| comuna\_field                     | boolean  | Indica si se solicita la comuna. Se almacena en el campo custom\_fields conf                                                                                                                                                                                         |        |                                                                   |
| region\_field                     | boolean  | Indica si se solicita la región. Se almacena en el campo custom\_fields conf                                                                                                                                                                                         |        |                                                                   |
| country\_field                    | boolean  | Indica si se solicita el país. Se almacena en el campo custom\_fields conf                                                                                                                                                                                           |        |                                                                   |
| rsocial\_field                    | boolean  | Indica si se solicita la razón social. Se almacena en el campo custom\_fields conf                                                                                                                                                                                   |        |                                                                   |
| deliverytimeslot\_field           | boolean  |                                                                                                                                                                                                                                                                      |        |                                                                   |
| comments\_field                   | boolean  | Indica si se permiten comentarios. Se almacena en el campo custom\_fields conf                                                                                                                                                                                       |        |                                                                   |
| rut\_enterprise\_field            | boolean  |                                                                                                                                                                                                                                                                      |        |                                                                   |
| accepting\_new\_enrollments       | boolean  | Si el plan acepta nuevos registros                                                                                                                                                                                                                                   |        |                                                                   |
| accepting\_new\_enrollments\_date | datetime | <p>Fecha limite para permitir nuevos registros. El formato es <br><em>YYYY-MM-DDThh:mm\[:ss\[.uuuuuu]]\[+HH:MM                                                                                                                                                       | -HH:MM | Z].</em><br>Ejemplo:<br><strong>2022-10-13T00:00:00Z</strong></p> |
|                                   |          |                                                                                                                                                                                                                                                                      |        |                                                                   |
| auto\_renew                       | boolean  | Indica si el plan se renueva automáticamente                                                                                                                                                                                                                         |        |                                                                   |
| notify\_termination               | boolean  |                                                                                                                                                                                                                                                                      |        |                                                                   |
| prefferred\_due\_day              | integer  | Indica el día de la obligación de cobro del plan.                                                                                                                                                                                                                    |        |                                                                   |
| limited\_stock                    | boolean  | Si existe un numero limitado de compras permitidas                                                                                                                                                                                                                   |        |                                                                   |
| stock\_available                  | integer  | Cantidad de ventas permitidas                                                                                                                                                                                                                                        |        |                                                                   |
| trial\_enabled                    | boolean  | Si hay una prueba gratis                                                                                                                                                                                                                                             |        |                                                                   |
| trial\_cicles                     | integer  | Numeor de ciclos con prueba gratis                                                                                                                                                                                                                                   |        |                                                                   |
| coupon                            | object   | <p>Un objeto Coupon relaciona con el plan. Ejemplo:</p><p>"coupon":{</p><p> "is\_fixed":true, </p><p>"code":1, </p><p>"discount\_rate":50, "discount\_cicles":3, "discount\_use\_limit":0 }</p>                                                                      |        |                                                                   |
| success\_message                  | String   | Mensaje de éxito cuando el cliente culmina su registro                                                                                                                                                                                                               |        |                                                                   |
| redirect\_to                      | Url      | Si el cliente culmina con exito, redirigir a esta página                                                                                                                                                                                                             |        |                                                                   |
| redirect\_to\_failure             | Url      | Si el cliente culmina con error, redirigir a esta página                                                                                                                                                                                                             |        |                                                                   |
| {% endtab %}                      |          |                                                                                                                                                                                                                                                                      |        |                                                                   |

{% tab title="JSON" %}

```
```

{% endtab %}
{% endtabs %}

## Listar todos los planes

<mark style="color:blue;">`GET`</mark> `/api/v1/plans`

Devuelve una lista de todos los planes creados anteriormente. Los planes se devuelven en orden y los más recientes aparecen primero.

#### Headers

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

{% tabs %}
{% tab title="200 Devuelve un listado de los planes del comercio" %}

```
"data": [
    {
      "id": 172,
      "slug": "AAAASgW9bcQpVn8YalebGXuW6gG8zq",
      "frequency": "3",
      "title": "Pago Cuota Mensual"
    }
]
```

{% endtab %}
{% endtabs %}

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

```
curl /api/v1/plans/ \
  -H "Reveniu-Secret-Key: your-secret"
```

{% endtab %}
{% endtabs %}

## Ver el detalle de un plan por su id

<mark style="color:blue;">`GET`</mark> `/api/v1/plans/ID`

#### Query Parameters

| Name                               | Type    | Description |
| ---------------------------------- | ------- | ----------- |
| <mark style="color:red;">\*</mark> | Integer | Id del plan |

{% tabs %}
{% tab title="200: OK Responde un objeto PLAN" %}

```javascript
{

  "id": 641,
  "created_on": "2021-12-07T17:44:15.510683Z",
  "currency": "1",
  "subs_counter": 0,
  "frequency": "3",
  "slug": "aQKcqse6bFB1ZRTnhJhS98JmWO3YQ31Y",
  "active": true,
  "price": 1000,
  "title": "plan de ejemplo",
  "description": "",
  "is_custom_link": true,
  "is_custom_amount": false,
  "custom_amount_min": null,
  "custom_amount_max": null,
  "total_cicles": 5,
  "rut_field": false,
  "phone_field": false,
  "address_field": false,
  "street_field": false,
  "bday_field": false,
  "comuna_field": false,
  "region_field": false,
  "country_field": false,
  "rsocial_field": false,
  "deliverytimeslot_field": false,
  "rut_enterprise_field": false,
  "success_message": "",
  "comments_field": false,
  "redirect_to": "",
  "redirect_to_failure": "",
  "is_uf": false,
  "accepting_new_enrollments": true,
  "accepting_new_enrollments_date": null,
  "auto_renew": true,
  "notify_termination": true,
  "coupon": null,
  "prefferred_due_day": null
}
```

{% endtab %}

{% tab title="400: Bad Request Si el api secret es incorrecto" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Crear un plan

<mark style="color:green;">`POST`</mark> `/api/v1/plans`

#### Headers

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

#### Request Body

| Name               | Type    | Description                                                       |
| ------------------ | ------- | ----------------------------------------------------------------- |
| frecuency          | integer | Indica el intervalo de cobro del plan. Ver lista de opciones      |
| cicles             | integer | Si es un plan recurrente, se puede definir la duración en ciclos. |
| trial\_cicles      | integer |                                                                   |
| title              | string  |                                                                   |
| description        | string  |                                                                   |
| is\_custom\_amount | integer |                                                                   |
| is\_uf             | boolean |                                                                   |
| amount             | number  |                                                                   |
| is\_auto\_renew    | boolean |                                                                   |
| discount           | object  |                                                                   |

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

```
{
    "id":3450,
    "link_url": "https://app.reveniu.com/...."
}
```

{% endtab %}
{% endtabs %}

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

```
curl /api/v1/plans/ \
  -H "Reveniu-Secret-Key: your-secret" \
  -H "Content-Type: application/json" \
  -X POST \
 --data '
 {
    "frequency":3,
    "cicles":12,
    "trial_cicles":10,
    "title":"Plan Mensual Especial",
    "description":"Acceso a nuestros servicios",
    "is_custom_link":true,
    "price":170000,
    "auto_renew":true,
    "prefferred_due_day":18,
    "redirect_to":"http://successweb.com",
    "discount_enabled":true,
    "coupon":{
        "is_fixed":true,
        "code":1,
        "discount_rate":50,
        "discount_cicles":3,
        "discount_use_limit":0
    }
}
 
 '
```

{% endtab %}
{% endtabs %}

## Editar un plan

<mark style="color:purple;">`PATCH`</mark> `/api/v1/plans/{id}/`

#### Path Parameters

| Name | Type   | Description                  |
| ---- | ------ | ---------------------------- |
| id   | string | Identificador único del plan |

#### Headers

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

#### Request Body

| Name      | Type    | Description                                                  |
| --------- | ------- | ------------------------------------------------------------ |
| frequency | integer | Indica el intervalo de cobro del plan. Ver lista de opciones |

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

```
```

{% 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/api-recursos/planes.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.
