---
title: "Update existing recurring transaction."
method: PUT
path: "/v1/recurrences/{id}"
tags: ["recurrences"]
---

# Update existing recurring transaction.

`PUT /v1/recurrences/{id}`

Update existing recurring transaction.

## Path parameters

- `id` string, required

## Headers

- `X-Trace-Id` string, uuid

## Request body

- RecurrenceUpdate
  - `title` string, string
  - `description` string, string — Not to be confused with the description of the actual transaction(s) being created.
  - `first_date` string, date — First time the recurring transaction will fire.
  - `repeat_until` string, date, nullable — Date until when the recurring transaction can fire. After that date, it's basically inactive. Use either this field or repetitions.
  - `nr_of_repetitions` integer, nullable — Max number of created transactions. Use either this field or repeat_until.
  - `apply_rules` boolean — Whether or not to fire the rules after the creation of a transaction.
  - `active` boolean — If the recurrence is even active.
  - `notes` string, string, nullable
  - `repetitions` RecurrenceRepetitionUpdate[]
    - `type` 'daily' | 'weekly' | 'ndom' | 'monthly' | 'yearly', string — The type of the repetition. ndom means: the n-th weekday of the month, where you can also specify which day of the week.
    - `moment` string, string — Information that defined the type of repetition. - For 'daily', this is empty. - For 'weekly', it is day of the week between 1 and 7 (Monday - Sunday). - For 'ndom', it is '1,2' or '4,5' or something else, where the first number is the week in the month, and the second number is the day in the week (between 1 and 7). '2,3' means: the 2nd Wednesday of the month - For 'monthly' it is the day of the month (1 - 31) - For yearly, it is a full date, ie '2026-08-01'. The year you use does not matter.
    - `skip` integer — How many occurrences to skip. 0 means skip nothing. 1 means every other.
    - `weekend` integer — How to respond when the recurring transaction falls in the weekend. Possible values: 1. Do nothing, just create it 2. Create no transaction. 3. Skip to the previous Friday. 4. Skip to the next Monday.
  - `transactions` RecurrenceTransactionUpdate[]
    - `id` string, string, required
    - `description` string, string
    - `amount` string, amount — Amount of the transaction.
    - `foreign_amount` string, amount, nullable — Foreign amount of the transaction.
    - `currency_id` string, string — Submit either a currency_id or a currency_code.
    - `currency_code` string, string — Submit either a currency_id or a currency_code.
    - `foreign_currency_id` string, string, nullable — Submit either a foreign_currency_id or a foreign_currency_code, or neither.
    - `budget_id` string, string — The budget ID for this transaction.
    - `category_id` string, string — Category ID for this transaction.
    - `source_id` string, string — ID of the source account. Submit either this or source_name.
    - `destination_id` string, string — ID of the destination account. Submit either this or destination_name.
    - `tags` string[], nullable — Array of tags.
    - `piggy_bank_id` string, string, nullable
    - `bill_id` string, string, nullable — Optional.

## Response `200`

Updated recurring transaction stored, result in response

## Other responses

- `400` — Bad request
- `401` — Unauthenticated
- `404` — Page not found
- `422` — Validation error. The body will have the exact details.
- `500` — Internal exception

---

[API](https://skmtc.dev/firefly-iii/apis/firefly-iii-api-develop.md) · [All operations](https://skmtc.dev/firefly-iii/apis/firefly-iii-api-develop/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/firefly-iii/firefly-iii-api-develop/revisions/8a1f6472e04b/schema)
