# API · Edit recurring plan

> Editing a recurring plan and its status.

- kind: api-operation
- status: stable
- api_version: v1
- last_verified: 2026-10-22
- url: https://tilopay.com/en/developers/api/recurrentes/planes/edit-plan

```http
POST /api/v1/editPlanRepeat
```

## What it does [#que-hace]

Edits an existing plan, including its status.

## Authentication [#autenticacion]

Requires the API bearer token in the `Authorization` header — see [authentication](/en/developers/api/autenticacion).

## Parameters [#parametros]

<Param id="edit-plan-parametro-key" name="key" type="string" required>
Tilopay integration key.
</Param>

<Param id="edit-plan-parametro-id" name="id" type="integer" required>
Recurring plan id.
</Param>

<Param id="edit-plan-parametro-title" name="title" type="string" required>
Recurring plan title.
</Param>

<Param id="edit-plan-parametro-description" name="description" type="string">
Plan description.
</Param>

<Param id="edit-plan-parametro-frecuency" name="frecuency" type="integer">
Charge frequency.

| Code | Value |
| --- | --- |
| 1 | Daily |
| 2 | Weekly |
| 3 | Monthly |
| 4 | Yearly |
| 5 | Fortnightly |
| 6 | Every two months |
| 7 | Quarterly |
| 8 | Every four months |
| 9 | Every six months |
</Param>

<Param id="edit-plan-parametro-currency" name="currency" type="string" required>
Currency code in ISO 4217 format.
</Param>

<Param id="edit-plan-parametro-first-amount" name="first_amount" type="integer" required>
Initial payment amount.
</Param>

<Param id="edit-plan-parametro-trial" name="trial" type="integer" required>
Enables the free trial period: 0 no, 1 yes.
</Param>

<Param id="edit-plan-parametro-trial-days" name="trial_days" type="integer" required>
Days of the free trial period.
</Param>

<Param id="edit-plan-parametro-attempts" name="attempts" type="integer" required>
Number of retries for failed charges.
</Param>

<Param id="edit-plan-parametro-status" name="status" type="integer" required>
Status of the recurring plan.

| Code | Value |
| --- | --- |
| 0 | Inactive |
| 1 | Active |
| 2 | Active but with no new sign-ups |
</Param>

<Param id="edit-plan-parametro-thanks-url" name="thanks_url" type="string">
Optional field. The merchant's own thank-you URL; it must support the **GET** method.
</Param>

<Param id="edit-plan-parametro-webhook-subscribe" name="webhook_subscribe" type="string">
Optional field. Webhook URL, over **POST**, that receives the callback in the request body when a customer successfully takes out a subscription. Example of the data sent: `{'id_plan' : 1, 'email' : 'email@email.com', 'modality' : 'ModalityName', 'amount' : 25, 'frequency' : '', 'coupon' : '5HT5W8YT', 'free_trial' : 1, 'next_payment_date' : '2023-02-25'}`
</Param>

<Param id="edit-plan-parametro-webhook-payment" name="webhook_payment" type="string">
Optional field. Webhook URL, over **POST**, that receives the callback in the request body when the customer is charged successfully. Example of the data sent: `{'id_plan' : 1, 'email' : 'email@email.com', 'amount' : 25, 'auth' : '123456', 'orderNumber' : 'PRE123456'}`
</Param>

<Param id="edit-plan-parametro-webhook-rejected" name="webhook_rejected" type="string">
Optional field. Webhook URL, over **POST**, that receives the callback in the request body when a payment fails. Example of the data sent: `{'id_plan' : 1, 'email' : 'email@email.com', 'amount' : 25}`
</Param>

<Param id="edit-plan-parametro-webhook-unsubscribe" name="webhook_unsubscribe" type="string">
Optional field. Webhook URL, over **POST**, that receives the callback in the request body when a customer cancels the subscription to one of their plans. Example of the data sent: `{'id_plan' : 1, 'email' : 'email@email.com', 'expire' : '2023-02-25'}`
</Param>

<Param id="edit-plan-parametro-webhook-reactive" name="webhook_reactive" type="string">
Optional field. Webhook URL, over **POST**, that receives the callback in the request body when a customer reactivates the subscription to one of their plans. Example of the data sent: `{'id_plan' : 1, 'email' : 'email@email.com', 'next_payment_date' : '2023-02-25'}`
</Param>

<Param id="edit-plan-parametro-end-at" name="end_at" type="string">
End date of the recurring plan, `d-m-Y` format (for example 25-09-2022). When the plan has no end date, send it empty.
</Param>

## Request example [#request]

The `<...>` values are placeholders: replace them with your own credentials and data.

```json
{
  "key": "<api_key>",
  "id": 3,
  "title": "Plan title",
  "description": "Plan description",
  "frecuency": 2,
  "currency": "USD",
  "first_amount": 0,
  "trial": 0,
  "trial_days": 0,
  "attempts": 5,
  "status": 1,
  "thanks_url": "",
  "webhook_subscribe": "",
  "webhook_payment": "",
  "webhook_rejected": "",
  "webhook_unsubscribe": "",
  "webhook_reactive": "",
  "end_at": "25-10-2023"
}
```

## Response [#respuesta]

<Param id="edit-plan-respuesta-url" name="url" type="string">
Plan URL on `https://tp.cr` or `https://app.tilopay.com`.
</Param>

```json
{
  "type": "200",
  "status": 1,
  "message": "Success",
  "url": "https://app.tilopay.com/link/<plan_link>"
}
```

To interpret a response that is not a success, see [how to read an error response](/en/developers/api/procesos-operativos/errors).
