openapi: 3.1.0
info:
  title: 'Universal Work Engine API'
  description: 'Headless work management infrastructure. Model tasks, workflows, dependencies and assignments for any product — without building it yourself.'
  version: 1.0.0
servers:
  -
    url: 'https://universal-work-engine-develop-niyqyr.laravel.cloud'
tags:
  -
    name: Authentication
    description: "\nRegister, log in, and log out. Tokens are scoped to a tenant and used as Bearer auth on all other endpoints."
  -
    name: Tenant
    description: "\nRead and update the current tenant. The tenant is resolved from your auth token — you cannot access another tenant's data."
  -
    name: Users
    description: "\nManage users within the tenant. Roles: `owner`, `admin`, `member`, `viewer`."
  -
    name: Workflows
    description: "\nDefine and manage workflow state machines. A workflow is a set of states and valid transitions between them.\nStates carry a `category` (todo, active, blocked, closed, cancelled) for cross-workflow reporting.\nTransitions can enforce role requirements and WIP limits."
  -
    name: Projects
    description: "\nProjects are containers for work items. Each project has a short `key` (e.g. `PROJ`) used in display IDs,\na default workflow, and optional settings. Deleting a project archives it rather than destroying it."
  -
    name: 'Work Items'
    description: "\nWork items are the core unit of work. They belong to a project, carry a type (task, story, epic, etc.),\nand move through a workflow state machine. Items can be nested (parent/child), linked via relations,\nand extended with custom fields."
  -
    name: Relations
    description: "\nRelations model how work items connect. The `blocks` type forms a directed acyclic graph (DAG) —\ncycle detection runs on every insert. Use relations to encode dependencies, duplicates, or soft associations."
  -
    name: Assignments
    description: "\nAssign users to work items with a role. Roles drive transition permissions —\nonly a user with role `reviewer` can approve a transition that requires a reviewer.\nRoles: `assignee`, `reviewer`, `approver`, `watcher`."
  -
    name: 'Custom Fields'
    description: "\nDefine custom fields per project. Supported types: `text`, `number`, `boolean`, `date`, `select`, `multi_select`.\nField values are stored on work items in the `custom_fields` JSONB column — read and write them via work item endpoints."
  -
    name: 'Connection Mappings'
    description: "\nMap external projects to internal projects and configure field mappings."
  -
    name: Connections
    description: "\nManage external platform connections (Jira, Trello, etc.)."
  -
    name: Endpoints
    description: ''
  -
    name: Events
    description: "\nAudit log of all changes made within your tenant."
  -
    name: Import
    description: "\nImport work items from JSON payloads or uploaded CSV/JSON files."
  -
    name: 'Sync Jobs'
    description: "\nTrigger and inspect sync jobs for external platform connections."
  -
    name: Webhooks
    description: "\nManage outbound webhooks for your tenant. Each webhook receives signed POST requests\nwhen subscribed events occur. Verify authenticity using the `X-Signature-256` header."
components:
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: 'Obtain a token via <code>POST /api/v1/auth/register</code> or <code>POST /api/v1/auth/login</code>. Pass it as a Bearer token: <code>Authorization: Bearer {token}</code>.'
security:
  -
    default: []
paths:
  /api/v1/auth/register:
    post:
      summary: Register
      operationId: register
      description: 'Create a new account and tenant. Returns an API token scoped to the new tenant.'
      parameters: []
      responses:
        201:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
                    examples:
                      - 1|abc123...
                  user:
                    type: object
                    properties:
                      id:
                        type: string
                        examples:
                          - uuid
                      name:
                        type: string
                        examples:
                          - 'Jane Doe'
                      email:
                        type: string
                        examples:
                          - jane@example.com
                      role:
                        type: string
                        examples:
                          - owner
                  tenant:
                    type: object
                    properties:
                      id:
                        type: string
                        examples:
                          - uuid
                      name:
                        type: string
                        examples:
                          - 'Acme Corp'
                      slug:
                        type: string
                        examples:
                          - acme-corp-x7k2q1
                examples:
                  -
                    token: 1|abc123...
                    user:
                      id: uuid
                      name: 'Jane Doe'
                      email: jane@example.com
                      role: owner
                    tenant:
                      id: uuid
                      name: 'Acme Corp'
                      slug: acme-corp-x7k2q1
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                tenant_name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - 'n'
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  examples:
                    - ashly64@example.com
                password:
                  type: string
                  description: 'Must be at least 8 characters.'
                  examples:
                    - pBNvYg
              required:
                - tenant_name
                - name
                - email
                - password
      security: []
  /api/v1/auth/login:
    post:
      summary: Login
      operationId: login
      description: 'Authenticate with email and password. Returns an API token.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
                    examples:
                      - 2|xyz789...
                  user:
                    type: object
                    properties:
                      id:
                        type: string
                        examples:
                          - uuid
                      name:
                        type: string
                        examples:
                          - 'Jane Doe'
                      email:
                        type: string
                        examples:
                          - jane@example.com
                      role:
                        type: string
                        examples:
                          - owner
                examples:
                  -
                    token: 2|xyz789...
                    user:
                      id: uuid
                      name: 'Jane Doe'
                      email: jane@example.com
                      role: owner
        422:
          description: 'Invalid credentials'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - 'The provided credentials are incorrect.'
                  errors:
                    type: object
                    properties:
                      email:
                        type: array
                        items:
                          type: string
                        examples:
                          -
                            - 'The provided credentials are incorrect.'
                examples:
                  -
                    message: 'The provided credentials are incorrect.'
                    errors:
                      email:
                        - 'The provided credentials are incorrect.'
      tags:
        - Authentication
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  examples:
                    - gbailey@example.net
                password:
                  type: string
                  description: ''
                  examples:
                    - '|]|{+-'
              required:
                - email
                - password
      security: []
  /api/v1/auth/logout:
    post:
      summary: Logout
      operationId: logout
      description: 'Revoke the current API token.'
      parameters: []
      responses:
        200:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - 'Logged out successfully.'
                examples:
                  -
                    message: 'Logged out successfully.'
      tags:
        - Authentication
  /api/v1/tenant:
    get:
      summary: 'Get tenant'
      operationId: getTenant
      description: 'Returns the tenant associated with the current API token.'
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Tenant
    put:
      summary: 'Update tenant'
      operationId: updateTenant
      description: "Update the tenant's name or settings."
      parameters: []
      responses: {  }
      tags:
        - Tenant
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                settings:
                  type: object
                  description: ''
                  properties: {  }
                  examples:
                    - null
  /api/v1/users:
    get:
      summary: ''
      operationId: getApiV1Users
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Users
    post:
      summary: ''
      operationId: postApiV1Users
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Users
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                email:
                  type: string
                  description: 'Must be a valid email address.'
                  examples:
                    - zbailey@example.net
                password:
                  type: string
                  description: 'Must be at least 8 characters.'
                  examples:
                    - '-0pBNvYgxw'
                role:
                  type:
                    - string
                    - 'null'
                  description: ''
                  enum:
                    - owner
                    - admin
                    - member
                    - viewer
                  examples:
                    - admin
              required:
                - name
                - email
                - password
  '/api/v1/users/{user_id}':
    get:
      summary: ''
      operationId: getApiV1UsersUser_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Users
    put:
      summary: ''
      operationId: putApiV1UsersUser_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Users
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                role:
                  type: string
                  description: ''
                  enum:
                    - owner
                    - admin
                    - member
                    - viewer
                  examples:
                    - owner
                avatar_url:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid URL.'
                  examples:
                    - 'http://bailey.com/'
    parameters:
      -
        in: path
        name: user_id
        description: 'The ID of the user.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2295-71e3-ad7a-dac3e7c8d7f8
  /api/v1/workflows:
    get:
      summary: ''
      operationId: getApiV1Workflows
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Workflows
    post:
      summary: ''
      operationId: postApiV1Workflows
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Workflows
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                is_default:
                  type:
                    - boolean
                    - 'null'
                  description: ''
                  examples:
                    - true
                states:
                  type: array
                  description: ''
                  items:
                    type:
                      - object
                      - 'null'
                    properties:
                      label:
                        type: string
                        description: 'This field is required when <code>states</code> is present. Must not be greater than 100 characters.'
                        examples:
                          - 'n'
                      key:
                        type: string
                        description: 'This field is required when <code>states</code> is present. Must not be greater than 50 characters.'
                        examples:
                          - g
                      category:
                        type: string
                        description: 'This field is required when <code>states</code> is present.'
                        enum:
                          - initial
                          - todo
                          - active
                          - blocked
                          - closed
                          - cancelled
                        examples:
                          - todo
                      position:
                        type:
                          - integer
                          - 'null'
                        description: ''
                        examples:
                          - 16
                      wip_limit:
                        type:
                          - integer
                          - 'null'
                        description: 'Must be at least 1.'
                        examples:
                          - 22
                      sla_hours:
                        type:
                          - integer
                          - 'null'
                        description: 'Must be at least 1.'
                        examples:
                          - 67
                  examples:
                    - null
              required:
                - name
  '/api/v1/workflows/{workflow_id}':
    get:
      summary: ''
      operationId: getApiV1WorkflowsWorkflow_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Workflows
    put:
      summary: ''
      operationId: putApiV1WorkflowsWorkflow_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Workflows
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                is_default:
                  type: boolean
                  description: ''
                  examples:
                    - true
    parameters:
      -
        in: path
        name: workflow_id
        description: 'The ID of the workflow.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2406-712d-b796-5c39f5c2dd6a
  '/api/v1/workflows/{workflow_id}/states':
    get:
      summary: 'List workflow states'
      operationId: listWorkflowStates
      description: 'Returns the ordered list of states for a workflow, including category, WIP limit, and SLA configuration.'
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Workflows
    parameters:
      -
        in: path
        name: workflow_id
        description: 'The ID of the workflow.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2406-712d-b796-5c39f5c2dd6a
  /api/v1/projects:
    get:
      summary: ''
      operationId: getApiV1Projects
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Projects
    post:
      summary: ''
      operationId: postApiV1Projects
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                key:
                  type: string
                  description: 'Must contain only letters and numbers. Must not be greater than 20 characters.'
                  examples:
                    - ngzmiyvdljnikhwa
                description:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - 'Eius et animi quos velit et.'
                workflow_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the workflows table.'
                  examples:
                    - 21c4122b-d554-3723-966c-6d723ea5293f
                settings:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
              required:
                - name
                - key
  '/api/v1/projects/{project_id}':
    get:
      summary: ''
      operationId: getApiV1ProjectsProject_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Projects
    put:
      summary: ''
      operationId: putApiV1ProjectsProject_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Projects
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                description:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - 'Eius et animi quos velit et.'
                workflow_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the workflows table.'
                  examples:
                    - 21c4122b-d554-3723-966c-6d723ea5293f
                status:
                  type: string
                  description: ''
                  enum:
                    - active
                    - archived
                    - closed
                  examples:
                    - active
                settings:
                  type: object
                  description: ''
                  properties: {  }
                  examples:
                    - null
    delete:
      summary: ''
      operationId: deleteApiV1ProjectsProject_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Projects
    parameters:
      -
        in: path
        name: project_id
        description: 'The ID of the project.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2444-702d-b8b0-46ed2acf570a
  '/api/v1/projects/{project_id}/work-items':
    get:
      summary: ''
      operationId: getApiV1ProjectsProject_idWorkItems
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Work Items'
    post:
      summary: ''
      operationId: postApiV1ProjectsProject_idWorkItems
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Work Items'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                description:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - 'Eius et animi quos velit et.'
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  examples:
                    - v
                parent_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the work_items table.'
                  examples:
                    - 5707ca55-f609-3528-be8b-1baeaee1567e
                workflow_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the workflows table.'
                  examples:
                    - 947170af-7488-3f30-a16d-723355a9502f
                status:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 50 characters.'
                  examples:
                    - i
                estimated_hours:
                  type:
                    - number
                    - 'null'
                  description: 'Must be at least 0.'
                  examples:
                    - 75
                start_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                due_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                position:
                  type:
                    - integer
                    - 'null'
                  description: 'Must be at least 0.'
                  examples:
                    - 7
                custom_fields:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
              required:
                - title
                - type
    parameters:
      -
        in: path
        name: project_id
        description: 'The ID of the project.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2444-702d-b8b0-46ed2acf570a
  '/api/v1/work-items/{workItem_id}':
    get:
      summary: 'Get work item'
      operationId: getWorkItem
      description: 'Returns a single work item with its project, workflow, parent, children, and assignments.'
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Work Items'
    put:
      summary: ''
      operationId: putApiV1WorkItemsWorkItem_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Work Items'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                description:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - 'Eius et animi quos velit et.'
                type:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  examples:
                    - v
                workflow_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the workflows table.'
                  examples:
                    - 5707ca55-f609-3528-be8b-1baeaee1567e
                status:
                  type: string
                  description: 'Must not be greater than 50 characters.'
                  examples:
                    - j
                estimated_hours:
                  type:
                    - number
                    - 'null'
                  description: 'Must be at least 0.'
                  examples:
                    - 52
                start_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                due_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                completed_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                custom_fields:
                  type: object
                  description: ''
                  properties: {  }
                  examples:
                    - null
    delete:
      summary: ''
      operationId: deleteApiV1WorkItemsWorkItem_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Work Items'
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/work-items/{workItem_id}/children':
    get:
      summary: ''
      operationId: getApiV1WorkItemsWorkItem_idChildren
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Work Items'
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/work-items/{workItem_id}/available-transitions':
    get:
      summary: 'List available transitions'
      operationId: listAvailableTransitions
      description: "Returns the transitions the authenticated user can trigger on this work item right now.\nFiltered by current state, the user's role, and WIP headroom on target states.\nUse this to drive UI affordances — only show buttons for what is actually possible."
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Work Items'
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/work-items/{workItem_id}/transition':
    put:
      summary: 'Transition work item'
      operationId: transitionWorkItem
      description: "Move a work item to a new workflow state. Enforces guard conditions: role requirements, WIP limits,\nand any custom guards defined on the transition. Returns the updated work item or a structured error.\n\nThis is a command endpoint — not a field update. Use it instead of `PUT /work-items/{id}` for state changes."
      parameters: []
      responses:
        422:
          description: ''
          content:
            application/json:
              schema:
                oneOf:
                  -
                    description: 'WIP limit reached'
                    type: object
                    properties:
                      message:
                        type: string
                        examples:
                          - 'Transition denied'
                      errors:
                        type: object
                        properties:
                          transition:
                            type: array
                            items:
                              type: string
                            examples:
                              -
                                - "WIP limit of 5 reached for 'in_progress' state"
                    examples:
                      -
                        message: 'Transition denied'
                        errors:
                          transition:
                            - "WIP limit of 5 reached for 'in_progress' state"
                  -
                    description: 'Role not permitted'
                    type: object
                    properties:
                      message:
                        type: string
                        examples:
                          - 'Transition denied'
                      errors:
                        type: object
                        properties:
                          transition:
                            type: array
                            items:
                              type: string
                            examples:
                              -
                                - "You do not have the required role 'reviewer' for this transition"
                    examples:
                      -
                        message: 'Transition denied'
                        errors:
                          transition:
                            - "You do not have the required role 'reviewer' for this transition"
      tags:
        - 'Work Items'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                transition_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the workflow_transitions table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
              required:
                - transition_id
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/work-items/{workItem_id}/move':
    put:
      summary: ''
      operationId: putApiV1WorkItemsWorkItem_idMove
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Work Items'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                parent_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the work_items table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                project_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the projects table.'
                  examples:
                    - 6b72fe4a-5b40-307c-bc24-f79acf9a1bb9
                position:
                  type:
                    - integer
                    - 'null'
                  description: 'Must be at least 0.'
                  examples:
                    - 77
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/work-items/{workItem_id}/relations':
    get:
      summary: ''
      operationId: getApiV1WorkItemsWorkItem_idRelations
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Relations
    post:
      summary: 'Create relation'
      operationId: createRelation
      description: "Create a relation between two work items. For `blocks` relations, cycle detection runs automatically —\nif the relation would create a circular dependency, the request is rejected with a 422."
      parameters: []
      responses:
        422:
          description: 'Cyclic dependency'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - 'Cyclic dependency detected'
                  errors:
                    type: object
                    properties:
                      target_id:
                        type: array
                        items:
                          type: string
                        examples:
                          -
                            - 'This relation would create a circular dependency'
                examples:
                  -
                    message: 'Cyclic dependency detected'
                    errors:
                      target_id:
                        - 'This relation would create a circular dependency'
      tags:
        - Relations
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                target_id:
                  type: string
                  description: 'The value and <code>source_id</code> must be different. Must be a valid UUID. The <code>id</code> of an existing record in the work_items table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                type:
                  type: string
                  description: ''
                  enum:
                    - blocks
                    - depends_on
                    - relates_to
                    - duplicates
                    - is_duplicated_by
                    - parent_of
                    - child_of
                  examples:
                    - blocks
              required:
                - target_id
                - type
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/relations/{relation_id}':
    delete:
      summary: ''
      operationId: deleteApiV1RelationsRelation_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Relations
    parameters:
      -
        in: path
        name: relation_id
        description: 'The ID of the relation.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a43-a34c-7285-90da-e92c6bf35dc7
  '/api/v1/work-items/{workItem_id}/assignments':
    get:
      summary: ''
      operationId: getApiV1WorkItemsWorkItem_idAssignments
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Assignments
    post:
      summary: ''
      operationId: postApiV1WorkItemsWorkItem_idAssignments
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Assignments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                user_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the users table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                role:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 50 characters.'
                  examples:
                    - g
              required:
                - user_id
    parameters:
      -
        in: path
        name: workItem_id
        description: 'The ID of the workItem.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
  '/api/v1/assignments/{assignment_id}':
    delete:
      summary: ''
      operationId: deleteApiV1AssignmentsAssignment_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Assignments
    parameters:
      -
        in: path
        name: assignment_id
        description: 'The ID of the assignment.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3e-4d31-70f7-9eeb-c14b3dc3b723
  '/api/v1/projects/{project_id}/custom-fields':
    get:
      summary: ''
      operationId: getApiV1ProjectsProject_idCustomFields
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Custom Fields'
    post:
      summary: ''
      operationId: postApiV1ProjectsProject_idCustomFields
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Custom Fields'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                key:
                  type: string
                  description: 'Must contain only letters, numbers, dashes and underscores. Must not be greater than 100 characters.'
                  examples:
                    - 'n'
                field_type:
                  type: string
                  description: ''
                  enum:
                    - text
                    - number
                    - date
                    - boolean
                    - single_select
                    - multi_select
                    - url
                    - user
                    - currency
                    - relation
                  examples:
                    - user
                options:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
                default_value:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - null
                validation_rules:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
                is_required:
                  type:
                    - boolean
                    - 'null'
                  description: ''
                  examples:
                    - true
                position:
                  type:
                    - integer
                    - 'null'
                  description: 'Must be at least 0.'
                  examples:
                    - 84
              required:
                - label
                - key
                - field_type
    parameters:
      -
        in: path
        name: project_id
        description: 'The ID of the project.'
        required: true
        schema:
          type: string
          examples:
            - 019d4a3d-2444-702d-b8b0-46ed2acf570a
  '/api/v1/custom-fields/{customFieldDefinition_id}':
    put:
      summary: ''
      operationId: putApiV1CustomFieldsCustomFieldDefinition_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Custom Fields'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                options:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
                default_value:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - null
                validation_rules:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
                is_required:
                  type: boolean
                  description: ''
                  examples:
                    - true
                position:
                  type: integer
                  description: 'Must be at least 0.'
                  examples:
                    - 39
    delete:
      summary: ''
      operationId: deleteApiV1CustomFieldsCustomFieldDefinition_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Custom Fields'
    parameters:
      -
        in: path
        name: customFieldDefinition_id
        description: 'The ID of the customFieldDefinition.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/mappings':
    get:
      summary: ''
      operationId: getApiV1ConnectionsConnection_idMappings
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Connection Mappings'
    post:
      summary: ''
      operationId: postApiV1ConnectionsConnection_idMappings
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Connection Mappings'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                project_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the projects table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                external_project_id:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - g
                external_project_name:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - z
                sync_direction:
                  type:
                    - string
                    - 'null'
                  description: ''
                  enum:
                    - inbound
                    - outbound
                    - bidirectional
                  examples:
                    - outbound
              required:
                - project_id
                - external_project_id
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/mappings/{map_id}':
    put:
      summary: ''
      operationId: putApiV1ConnectionsConnection_idMappingsMap_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Connection Mappings'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                project_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the projects table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                external_project_id:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - g
                external_project_name:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - z
                sync_direction:
                  type:
                    - string
                    - 'null'
                  description: ''
                  enum:
                    - inbound
                    - outbound
                    - bidirectional
                  examples:
                    - bidirectional
              required:
                - project_id
                - external_project_id
    delete:
      summary: ''
      operationId: deleteApiV1ConnectionsConnection_idMappingsMap_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Connection Mappings'
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: map_id
        description: 'The ID of the map.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/mappings/{map_id}/fields':
    get:
      summary: ''
      operationId: getApiV1ConnectionsConnection_idMappingsMap_idFields
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Connection Mappings'
    post:
      summary: ''
      operationId: postApiV1ConnectionsConnection_idMappingsMap_idFields
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Connection Mappings'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                external_field_key:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - b
                external_field_label:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - 'n'
                internal_field:
                  type: string
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - g
                transform_rule:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
              required:
                - external_field_key
                - internal_field
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: map_id
        description: 'The ID of the map.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/mappings/{map_id}/fields/{fieldMapping_id}':
    delete:
      summary: ''
      operationId: deleteApiV1ConnectionsConnection_idMappingsMap_idFieldsFieldMapping_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Connection Mappings'
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: map_id
        description: 'The ID of the map.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: fieldMapping_id
        description: 'The ID of the fieldMapping.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  /api/v1/connections:
    get:
      summary: ''
      operationId: getApiV1Connections
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Connections
    post:
      summary: ''
      operationId: postApiV1Connections
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Connections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                platform:
                  type: string
                  description: ''
                  enum:
                    - jira
                    - trello
                  examples:
                    - jira
                access_token:
                  type: string
                  description: ''
                  examples:
                    - architecto
                refresh_token:
                  type:
                    - string
                    - 'null'
                  description: ''
                  examples:
                    - architecto
                token_expires_at:
                  type:
                    - string
                    - 'null'
                  description: 'Must be a valid date.'
                  examples:
                    - '2026-04-02T11:19:49'
                external_account_id:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 255 characters.'
                  examples:
                    - 'n'
                metadata:
                  type:
                    - object
                    - 'null'
                  description: ''
                  properties: {  }
                  examples:
                    - null
              required:
                - platform
                - access_token
  '/api/v1/connections/{connection_id}':
    get:
      summary: ''
      operationId: getApiV1ConnectionsConnection_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Connections
    delete:
      summary: ''
      operationId: deleteApiV1ConnectionsConnection_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Connections
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/projects':
    get:
      summary: 'List all importable projects from the external platform.'
      operationId: listAllImportableProjectsFromTheExternalPlatform
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Connections
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/fields/{externalProjectId}':
    get:
      summary: 'List all available fields for a specific external project.'
      operationId: listAllAvailableFieldsForASpecificExternalProject
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Connections
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: externalProjectId
        description: ''
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{platform}/auth':
    post:
      summary: 'Generate an OAuth redirect URL for the given platform.'
      operationId: generateAnOAuthRedirectURLForTheGivenPlatform
      description: "POST /api/v1/connections/{platform}/auth\n\nReturns:\n  { \"redirect_url\": \"https://...\" }"
      parameters: []
      responses: {  }
      tags:
        - Endpoints
    parameters:
      -
        in: path
        name: platform
        description: ''
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{platform}/callback':
    get:
      summary: 'Handle the OAuth callback and persist the connection.'
      operationId: handleTheOAuthCallbackAndPersistTheConnection
      description: "GET /api/v1/connections/{platform}/callback\n\nReturns a ConnectionResource on success."
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Endpoints
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                code:
                  type: string
                  description: ''
                  examples:
                    - architecto
                state:
                  type: string
                  description: ''
                  examples:
                    - architecto
              required:
                - code
                - state
    parameters:
      -
        in: path
        name: platform
        description: ''
        required: true
        schema:
          type: string
          examples:
            - architecto
  /api/v1/inbound/jira:
    post:
      summary: ''
      operationId: postApiV1InboundJira
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Endpoints
  /api/v1/events:
    get:
      summary: 'List events'
      operationId: listEvents
      description: "Returns a paginated audit log scoped to the authenticated tenant.\nFilter by subject type, subject ID, causer, event type, or date range."
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Events
  /api/v1/import/bulk:
    post:
      summary: 'Bulk-import work items from a JSON payload (synchronous, up to 500 items).'
      operationId: bulkImportWorkItemsFromAJSONPayloadsynchronousUpTo500Items
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Import
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                project_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the projects table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                items:
                  type: array
                  description: 'Must have at least 1 items. Must not have more than 500 items.'
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                        description: 'Must not be greater than 500 characters.'
                        examples:
                          - b
                      type:
                        type:
                          - string
                          - 'null'
                        description: ''
                        enum:
                          - task
                          - bug
                          - story
                          - epic
                        examples:
                          - story
                      description:
                        type:
                          - string
                          - 'null'
                        description: ''
                        examples:
                          - 'Eius et animi quos velit et.'
                      status:
                        type:
                          - string
                          - 'null'
                        description: ''
                        examples:
                          - architecto
                      assignee_email:
                        type:
                          - string
                          - 'null'
                        description: 'Must be a valid email address.'
                        examples:
                          - zbailey@example.net
                      due_at:
                        type:
                          - string
                          - 'null'
                        description: 'Must be a valid date.'
                        examples:
                          - '2026-04-02T11:19:49'
                      estimated_hours:
                        type:
                          - number
                          - 'null'
                        description: 'Must be at least 0.'
                        examples:
                          - 8
                      custom_fields:
                        type:
                          - object
                          - 'null'
                        description: ''
                        properties: {  }
                        examples:
                          - null
                      origin_id:
                        type:
                          - string
                          - 'null'
                        description: ''
                        examples:
                          - architecto
                      parent_index:
                        type:
                          - integer
                          - 'null'
                        description: ''
                        examples:
                          - 16
                    required:
                      - title
                  examples:
                    -
                      - []
              required:
                - project_id
                - items
  /api/v1/import/file:
    post:
      summary: 'Upload a CSV or JSON file and start a background import job.'
      operationId: uploadACSVOrJSONFileAndStartABackgroundImportJob
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Import
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: 'Must be a file. Must not be greater than 10240 kilobytes.'
                project_id:
                  type: string
                  description: 'Must be a valid UUID. The <code>id</code> of an existing record in the projects table.'
                  examples:
                    - 6ff8f7f6-1eb3-3525-be4a-3932c805afed
                column_mapping:
                  type: object
                  description: ''
                  properties: {  }
                  examples:
                    - []
                origin_system:
                  type:
                    - string
                    - 'null'
                  description: 'Must not be greater than 30 characters.'
                  examples:
                    - b
              required:
                - file
                - project_id
                - column_mapping
  /api/v1/sync-jobs:
    get:
      summary: ''
      operationId: getApiV1SyncJobs
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Sync Jobs'
  '/api/v1/sync-jobs/{syncJob_id}':
    get:
      summary: ''
      operationId: getApiV1SyncJobsSyncJob_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - 'Sync Jobs'
    parameters:
      -
        in: path
        name: syncJob_id
        description: 'The ID of the syncJob.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  '/api/v1/connections/{connection_id}/mappings/{map_id}/sync':
    post:
      summary: 'Trigger a new full-import sync for a connection–project mapping.'
      operationId: triggerANewFullImportSyncForAConnectionprojectMapping
      description: ''
      parameters: []
      responses: {  }
      tags:
        - 'Sync Jobs'
    parameters:
      -
        in: path
        name: connection_id
        description: 'The ID of the connection.'
        required: true
        schema:
          type: string
          examples:
            - architecto
      -
        in: path
        name: map_id
        description: 'The ID of the map.'
        required: true
        schema:
          type: string
          examples:
            - architecto
  /api/v1/webhooks:
    get:
      summary: ''
      operationId: getApiV1Webhooks
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Webhooks
    post:
      summary: ''
      operationId: postApiV1Webhooks
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Webhooks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
                  description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                  examples:
                    - 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
                events:
                  type: array
                  description: ''
                  items:
                    type: string
                    enum:
                      - work_item.created
                      - work_item.updated
                      - work_item.transitioned
                      - work_item.deleted
                      - project.created
                      - project.updated
                  examples:
                    -
                      - work_item.transitioned
                is_active:
                  type: boolean
                  description: ''
                  examples:
                    - false
              required:
                - url
  '/api/v1/webhooks/{webhook_id}':
    get:
      summary: ''
      operationId: getApiV1WebhooksWebhook_id
      description: ''
      parameters: []
      responses:
        401:
          description: ''
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    examples:
                      - Unauthenticated.
                examples:
                  -
                    message: Unauthenticated.
      tags:
        - Webhooks
    put:
      summary: ''
      operationId: putApiV1WebhooksWebhook_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Webhooks
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                url:
                  type: string
                  description: 'Must be a valid URL. Must not be greater than 2048 characters.'
                  examples:
                    - 'http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html'
                events:
                  type: array
                  description: ''
                  items:
                    type: string
                    enum:
                      - work_item.created
                      - work_item.updated
                      - work_item.transitioned
                      - work_item.deleted
                      - project.created
                      - project.updated
                  examples:
                    -
                      - project.updated
                is_active:
                  type: boolean
                  description: ''
                  examples:
                    - true
    delete:
      summary: ''
      operationId: deleteApiV1WebhooksWebhook_id
      description: ''
      parameters: []
      responses: {  }
      tags:
        - Webhooks
    parameters:
      -
        in: path
        name: webhook_id
        description: 'The ID of the webhook.'
        required: true
        schema:
          type: string
          examples:
            - architecto
