> ## Documentation Index
> Fetch the complete documentation index at: https://www.smartretry.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Update recurring

> Modify the schedule, amount, or end conditions of an existing recurring billing series.

`PUT /v1/payments/recurring/update/{terminal_friendly_id}`

Updates configuration for an active recurring series. You can change the billing amount, frequency, total payment count, or cancellation date. Only fields you include in the request body are updated - omitted fields retain their current values.

<Note>
  Scheduling fields (`recurring_date_type`, `time_interval`) can only be updated on series where `managed_by` is `our_platform`. Attempting to update these fields on a `merchant`- or `payment_provider`-managed series returns an error.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --request PUT \
    --url https://terminal.smartretry.com/v1/payments/recurring/update/ABC123 \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: YOUR_API_KEY' \
    --data '{
      "recurring_id": "RC9F4A2B",
      "amount": 24.99,
      "number_of_payments": 24
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.put(
      "https://terminal.smartretry.com/v1/payments/recurring/update/ABC123",
      headers={
          "Content-Type": "application/json",
          "x-api-key": "YOUR_API_KEY"
      },
      json={
          "recurring_id": "RC9F4A2B",
          "amount": 24.99,
          "number_of_payments": 24
      }
  )

  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://terminal.smartretry.com/v1/payments/recurring/update/ABC123",
    {
      method: "PUT",
      headers: {
        "Content-Type": "application/json",
        "x-api-key": "YOUR_API_KEY"
      },
      body: JSON.stringify({
        recurring_id: "RC9F4A2B",
        amount: 24.99,
        number_of_payments: 24
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

## Path parameters

<ParamField path="terminal_friendly_id" type="string" required>
  Your 6-character terminal identifier.
</ParamField>

## Request body

<ParamField body="recurring_id" type="string" required>
  The 8-character identifier of the recurring series to update.
</ParamField>

<ParamField body="amount" type="number">
  New default charge amount for future payments in this series, in major currency units (e.g., `24.99` for \$24.99). Does not affect charges that have already been processed.
</ParamField>

<ParamField body="first_payment_date" type="string">
  New start date for the series in `YYYY-MM-DD` format. Only supported when `managed_by` is `our_platform`.
</ParamField>

<ParamField body="recurring_date_type" type="string">
  New billing frequency. One of `daily`, `weekly`, `monthly`, or `yearly`. Only supported when `managed_by` is `our_platform`.
</ParamField>

<ParamField body="time_interval" type="integer">
  New interval multiplier. Minimum value: `1`. Only supported when `managed_by` is `our_platform`.
</ParamField>

<ParamField body="number_of_payments" type="integer">
  New total payment count for the series. Minimum value: `1`. The count includes payments already completed - setting this to a value lower than `completed_payments` will immediately complete the series.
</ParamField>

## Response

<ResponseField name="recurring_id" type="string">
  The identifier of the updated recurring series (8 characters).
</ResponseField>

<ResponseField name="updated" type="boolean">
  `true` if the update was applied successfully.
</ResponseField>

```json Example response theme={null}
{
  "recurring_id": "RC9F4A2B",
  "updated": true
}
```

<Tip>
  To preview how a schedule change affects upcoming payments before applying it, call the [status endpoint](/docs/api-reference/recurring/status) first to review current `future_transactions`.
</Tip>
