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

# Update task recurrence

> Make a task repeat, or stop it repeating. Setting a rule requires task:update and task:create; clearing it requires task:update. When a repeating task moves into a final column, the next task is created in the project's first open column with its dates moved forward one interval from the completed task's due date, and the rule moves to that new task. A completed task cannot start repeating: reopen it, or set the rule on its next task.



## OpenAPI

````yaml /openapi.json put /task/recurrence/{id}
openapi: 3.1.0
info:
  title: Kaneo API
  version: 1.0.0
  description: Kaneo Project Management API - Manage projects, tasks, labels, and more
servers:
  - url: https://cloud.kaneo.app/api
    description: Kaneo API Server
security:
  - bearerAuth: []
paths:
  /task/recurrence/{id}:
    put:
      tags:
        - Tasks
      summary: Update task recurrence
      description: >-
        Make a task repeat, or stop it repeating. Setting a rule requires
        task:update and task:create; clearing it requires task:update. When a
        repeating task moves into a final column, the next task is created in
        the project's first open column with its dates moved forward one
        interval from the completed task's due date, and the rule moves to that
        new task. A completed task cannot start repeating: reopen it, or set the
        rule on its next task.
      operationId: updateTaskRecurrence
      parameters:
        - schema:
            type: string
          required: true
          name: id
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                recurrence:
                  anyOf:
                    - $ref: '#/components/schemas/TaskRecurrence'
                    - type: 'null'
                  description: Null stops the task from repeating.
              required:
                - recurrence
      responses:
        '200':
          description: The updated task
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '400':
          description: Invalid recurrence rule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          description: Missing or invalid credentials
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '403':
          description: >-
            No access to the project, missing task:update, or missing
            task:create when setting a rule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Task not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '409':
          description: The task is completed and no longer holds a rule; reopen it first
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          $ref: '#/components/responses/ApiKeyRateLimited'
components:
  schemas:
    TaskRecurrence:
      type: object
      properties:
        frequency:
          type: string
          enum:
            - daily
            - weekly
            - monthly
            - yearly
        interval:
          type: integer
          minimum: 1
          maximum: 99
          description: Repeat every this many days, weeks, months, or years.
        weekdays:
          type: array
          items:
            type: integer
            minimum: 0
            maximum: 6
          minItems: 1
          maxItems: 7
          description: >-
            Weekly rules only: the days to repeat on, 0 for Sunday to 6 for
            Saturday. Without them, a weekly rule repeats on the due date's
            weekday.
        timeZone:
          type: string
          description: >-
            IANA time zone used to keep the next due date on the same local day
            and time.
      required:
        - frequency
        - interval
        - timeZone
      description: >-
        When a task with this rule moves into a final column, the next task is
        created with its dates moved forward by one interval from the completed
        task's due date.
    Task:
      type: object
      properties:
        id:
          type: string
        projectId:
          type: string
        position:
          type:
            - number
            - 'null'
          description: Order within its column, ascending.
        number:
          type:
            - number
            - 'null'
          description: Per-project counter shown as {projectSlug}-{number}.
        userId:
          type:
            - string
            - 'null'
          description: The assignee, if any.
        title:
          type: string
        description:
          type:
            - string
            - 'null'
        descriptionDeferred:
          type: boolean
          description: >-
            True when the list omits a large description; load the task detail
            or description pages to read it. Do not replace stored text with
            this null summary.
        status:
          type: string
          description: The slug of the column the task sits in.
        priority:
          type: string
          description: 'One of: no-priority, low, medium, high, urgent.'
        startDate:
          type:
            - string
            - 'null'
          format: date-time
        dueDate:
          type:
            - string
            - 'null'
          format: date-time
        recurrence:
          anyOf:
            - $ref: '#/components/schemas/TaskRecurrence'
            - type: 'null'
        createdAt:
          type: string
          format: date-time
        customFields:
          type: array
          items:
            type: object
            properties:
              fieldId:
                type: string
              value:
                type: string
            required:
              - fieldId
              - value
      required:
        - id
        - projectId
        - position
        - number
        - userId
        - title
        - description
        - status
        - priority
        - startDate
        - dueDate
        - createdAt
    ApiError:
      type: object
      properties:
        message:
          type: string
          description: Human-readable description of the error.
          example: Task not found
        code:
          type: string
          description: >-
            Stable UPPER_SNAKE_CASE code. Derived from the status unless a more
            specific code applies, such as VALIDATION_ERROR or
            MISSING_PERMISSION.
          example: NOT_FOUND
        issues:
          type: array
          items:
            type: object
            properties:
              path:
                type: string
                description: >-
                  Dotted path to the invalid input, prefixed with the request
                  part (body, query, params, header).
                example: body.title
              message:
                type: string
                example: Required
            required:
              - path
              - message
          description: Every validation issue, for VALIDATION_ERROR.
        missingPermissions:
          type: array
          items:
            type: string
          description: >-
            Permissions the caller lacks for this route, as resource:action, for
            MISSING_PERMISSION and API_KEY_SCOPE.
          example:
            - task:update
      required:
        - message
        - code
  responses:
    ApiKeyRateLimited:
      description: >-
        The API key exceeded its rate limit or usage quota. Wait the number of
        seconds in Retry-After before retrying. The X-RateLimit headers are sent
        only when the rate limit was hit.
      headers:
        Retry-After:
          description: >-
            Seconds to wait before retrying. Omitted when an exhausted usage
            quota never refills.
          schema:
            type: integer
        X-RateLimit-Limit:
          description: Requests the API key may make per window.
          schema:
            type: integer
        X-RateLimit-Remaining:
          description: Requests left in the current window.
          schema:
            type: integer
        X-RateLimit-Reset:
          description: Unix time in seconds when the current window resets.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or session token (Bearer)

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.