> ## 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.

# Apply a previewed sync rule

> Save shared integration rules only if the preview is still current. Excluded links are paused, never deleted. Newly matching unlinked tasks are exported through the integration event path. Paused links require explicit review to resume.



## OpenAPI

````yaml /openapi.json patch /integration-sync/project/{projectId}/{provider}
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:
  /integration-sync/project/{projectId}/{provider}:
    patch:
      tags:
        - Integration sync
      summary: Apply a previewed sync rule
      description: >-
        Save shared integration rules only if the preview is still current.
        Excluded links are paused, never deleted. Newly matching unlinked tasks
        are exported through the integration event path. Paused links require
        explicit review to resume.
      operationId: saveIntegrationSyncRules
      parameters:
        - schema:
            type: string
            minLength: 1
          required: true
          name: projectId
          in: path
        - schema:
            type: string
            enum:
              - github
              - gitea
              - gitlab
          required: true
          name: provider
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                rules:
                  type: object
                  properties:
                    outgoing:
                      oneOf:
                        - type: object
                          properties:
                            mode:
                              type: string
                              enum:
                                - all
                          required:
                            - mode
                        - type: object
                          properties:
                            mode:
                              type: string
                              enum:
                                - labels
                            match:
                              type: string
                              enum:
                                - any
                                - all
                            labels:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 128
                              minItems: 1
                              maxItems: 50
                          required:
                            - mode
                            - match
                            - labels
                      description: >-
                        Kaneo workspace label IDs controlling task sync. Missing
                        labels pause sync.
                    incoming:
                      oneOf:
                        - type: object
                          properties:
                            mode:
                              type: string
                              enum:
                                - all
                          required:
                            - mode
                        - type: object
                          properties:
                            mode:
                              type: string
                              enum:
                                - labels
                            match:
                              type: string
                              enum:
                                - any
                                - all
                            labels:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 128
                              minItems: 1
                              maxItems: 50
                          required:
                            - mode
                            - match
                            - labels
                      description: >-
                        Exact repository label names controlling which issues
                        can be imported.
                  required:
                    - outgoing
                    - incoming
                previewToken:
                  type: string
                  minLength: 64
                  maxLength: 64
              required:
                - rules
                - previewToken
      responses:
        '200':
          description: Saved rules and current scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationSyncPreview'
        '400':
          description: Invalid rule or workspace label
          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, or missing required permission
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '404':
          description: Project, integration, or linked task not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '409':
          description: Configuration, impact or comparison changed; review again
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '429':
          $ref: '#/components/responses/ApiKeyRateLimited'
components:
  schemas:
    IntegrationSyncPreview:
      type: object
      properties:
        isActive:
          type: boolean
        rules:
          type: object
          properties:
            outgoing:
              oneOf:
                - type: object
                  properties:
                    mode:
                      type: string
                      enum:
                        - all
                  required:
                    - mode
                - type: object
                  properties:
                    mode:
                      type: string
                      enum:
                        - labels
                    match:
                      type: string
                      enum:
                        - any
                        - all
                    labels:
                      type: array
                      items:
                        type: string
                        minLength: 1
                        maxLength: 128
                      minItems: 1
                      maxItems: 50
                  required:
                    - mode
                    - match
                    - labels
              description: >-
                Kaneo workspace label IDs controlling task sync. Missing labels
                pause sync.
            incoming:
              oneOf:
                - type: object
                  properties:
                    mode:
                      type: string
                      enum:
                        - all
                  required:
                    - mode
                - type: object
                  properties:
                    mode:
                      type: string
                      enum:
                        - labels
                    match:
                      type: string
                      enum:
                        - any
                        - all
                    labels:
                      type: array
                      items:
                        type: string
                        minLength: 1
                        maxLength: 128
                      minItems: 1
                      maxItems: 50
                  required:
                    - mode
                    - match
                    - labels
              description: >-
                Exact repository label names controlling which issues can be
                imported.
          required:
            - outgoing
            - incoming
        labels:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
              color:
                type: string
            required:
              - id
              - name
              - color
        missingLabels:
          type: array
          items:
            type: string
        total:
          type: number
        matching:
          type: number
        willCreate:
          type: number
        willPause:
          type: number
        needsReview:
          type: number
        paused:
          type: number
        matchingTasks:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              number:
                type:
                  - number
                  - 'null'
              title:
                type: string
            required:
              - id
              - number
              - title
        pausedNextCursor:
          type:
            - string
            - 'null'
        pausedTasks:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              number:
                type:
                  - number
                  - 'null'
              title:
                type: string
              linkId:
                type: string
              url:
                type: string
              eligible:
                type: boolean
            required:
              - id
              - number
              - title
              - linkId
              - url
              - eligible
        previewToken:
          type: string
      required:
        - isActive
        - rules
        - labels
        - missingLabels
        - total
        - matching
        - willCreate
        - willPause
        - needsReview
        - paused
        - matchingTasks
        - pausedNextCursor
        - pausedTasks
        - previewToken
    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.