{
  "openapi": "3.1.0",
  "info": {
    "title": "Kanbert",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.kanbert.com/api/v1"
    }
  ],
  "tags": [
    {
      "name": "Users"
    },
    {
      "name": "Clients"
    },
    {
      "name": "Projects"
    },
    {
      "name": "Portfolios & Project Groups"
    },
    {
      "name": "Tasks"
    },
    {
      "name": "Task Comments"
    },
    {
      "name": "Efforts"
    },
    {
      "name": "Contacts"
    },
    {
      "name": "Companies"
    },
    {
      "name": "Offers"
    },
    {
      "name": "Outgoing Invoices"
    },
    {
      "name": "Incoming Invoices"
    },
    {
      "name": "Chart of Accounts"
    },
    {
      "name": "Payments"
    },
    {
      "name": "Usergroups & Teams"
    },
    {
      "name": "Suppliers"
    },
    {
      "name": "Settings"
    },
    {
      "name": "Integration"
    },
    {
      "name": "Files"
    },
    {
      "name": "Custom Fields"
    },
    {
      "name": "Webhook Management"
    }
  ],
  "security": [
    {
      "http": []
    },
    {
      "oauth2": []
    }
  ],
  "paths": {
    "/whoami": {
      "get": {
        "operationId": "users.whoami",
        "description": "**No specific scope required.**",
        "summary": "Retrieve current user's information",
        "tags": [
          "Users"
        ],
        "responses": {
          "200": {
            "description": "`UserData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/users": {
      "get": {
        "operationId": "users.index",
        "description": "**No specific scope required.**",
        "summary": "List all users (basic)",
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `first_name`, `last_name`, `email`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `first_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `last_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<UserType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `DWI.Http.Data.Api.V1.UserData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/UserData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/users/full": {
      "get": {
        "operationId": "users.fullIndex",
        "description": "**Required scopes:** `user:read`",
        "summary": "Get all users (full)",
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `first_name`, `last_name`, `email`, `created_at`, `custom_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `user_groups`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `first_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `last_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `plan` | `enum<UserPlan>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `type` | `enum<UserType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `is_owner` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `custom_fields.*` — see Custom fields below | `custom` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.\n\nCustom fields: when enabled, you can filter by `custom_fields.<slug>`. Example: `custom_fields.my_flag eq 'yes'` or `custom_fields.score gte 10`. Supported ops depend on the custom field type (eq, ne, in, nin, contains, startswith, endswith, isnull, isnotnull, and comparisons for numeric/date types).",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `UserFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/UserFullData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/users/{id}": {
      "get": {
        "operationId": "users.show",
        "description": "**No specific scope required.**\n\nReturns `UserFullData` if app has any `user:*` scope or `user-profile:*` if current user",
        "summary": "Retrieve a user",
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `user_groups`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`UserData`\n\n`UserFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/UserData"
                    },
                    {
                      "$ref": "#/components/schemas/UserFullData"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/clients": {
      "get": {
        "operationId": "clients.index",
        "description": "**No specific scope required.**",
        "summary": "List all clients (basic)",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`, `shortcode`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `primary_contact.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `origin_space.id` | `id<SpaceData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ClientData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ClientData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "clients.store",
        "description": "**Required scopes:** `client:write`",
        "summary": "Create a client",
        "tags": [
          "Clients"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "shortcode": {
                    "type": "string",
                    "description": "If not provided, the shortcode will be generated, Shortcode must be unique",
                    "maxLength": 255
                  },
                  "segment": {
                    "type": "string",
                    "enum": [
                      "A",
                      "B",
                      "C"
                    ],
                    "default": "B"
                  },
                  "primary_contact_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "User ID of the primary contact"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ClientFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientFullData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/clients/full": {
      "get": {
        "operationId": "clients.fullIndex",
        "description": "**Required scopes:** `client:read`",
        "summary": "List all clients (full)",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`, `shortcode`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `projects`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `archived` | `enum: with, only, without` | eq |\n| `segment` | `enum<ClientSegment>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `primary_contact.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `projects` | `Relation`<br /> - shortcode (string)<br /> - name (string)<br /> - is_acquisition (boolean)<br /> - status (enum) | any, none, count, all |\n| `origin_space.id` | `id<SpaceData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ClientFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ClientFullData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/clients/{id}": {
      "get": {
        "operationId": "clients.show",
        "description": "**No specific scope required.**\n\nReturns `ClientFullData` if app has any `client:*` scope",
        "summary": "Retrieve a client",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `projects`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ClientData`\n\n`ClientFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ClientData"
                    },
                    {
                      "$ref": "#/components/schemas/ClientFullData"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "patch": {
        "operationId": "clients.update",
        "description": "**Required scopes:** `client:write`\n\nTo update `external_id` jump to [Endpoint](#operation/clients.updateExternalId) `/clients/{id}/external-identifier`\n To update `shortcode` jump to [Endpoint](#operation/clients.updateShortcode) `/clients/{id}/shortcode`",
        "summary": "Update a client",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "segment": {
                    "type": "string",
                    "enum": [
                      "A",
                      "B",
                      "C"
                    ],
                    "default": "B"
                  },
                  "primary_contact_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "User ID of the account manager"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ClientData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "clients.destroy",
        "description": "**Required scopes:** `client:write`",
        "summary": "Archive a client",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "Client deleted successfully"
                      ]
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/clients/{id}/external-identifier": {
      "put": {
        "operationId": "clients.updateExternalId",
        "description": "**Required scopes:** `client:write`",
        "summary": "Update a client's external identifier",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier to the client from an external system, must be unique within integration (integration slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ClientData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/clients/{id}/shortcode": {
      "put": {
        "operationId": "clients.updateShortcode",
        "description": "**Required scopes:** `client:write`",
        "summary": "Update a client's shortcode",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "shortcode": {
                    "type": "string",
                    "maxLength": 255
                  }
                },
                "required": [
                  "shortcode"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ClientData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/clients/{id}/restore": {
      "post": {
        "operationId": "clients.restore",
        "description": "**Required scopes:** `client:write`",
        "summary": "Restore a client",
        "tags": [
          "Clients"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ClientFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientFullData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "409": {
            "description": "An error\n\nAn error",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Contact not archived"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview."
                        }
                      },
                      "required": [
                        "message"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/portfolios": {
      "get": {
        "operationId": "projectPortfolios.index",
        "description": "**No specific scope required.**",
        "summary": "List all portfolios",
        "tags": [
          "Portfolios & Project Groups"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `updated_at`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `projects_assigned`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ProjectPortfolioData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ProjectPortfolioData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/project-groups": {
      "get": {
        "operationId": "projectPortfolios.projectGroups",
        "description": "**No specific scope required.**",
        "summary": "List all project groups",
        "tags": [
          "Portfolios & Project Groups"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `updated_at`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ProjectGroupData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ProjectGroupData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/projects": {
      "get": {
        "operationId": "projects.index",
        "description": "**No specific scope required.**",
        "summary": "List all projects",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `shortcode`, `title`, `updated_at`, `created_at`, `computed_fields.<alias>`, `custom_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `team`, `guests`, `tags`, `portfolios`, `client`, `client.primary_contact`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `status` | `enum:running, closed` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `is_acquisition` | `boolean` | eq, ne, neq |\n| `client.id` | `id<ClientFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.primary_contact_id` | `id<UserFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project_type.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project_type.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project_group.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project_group.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `portfolios.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `portfolios.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_by` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `start_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `end_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `tags` | `Relation`<br /> - title (string) | any, none, count, all |\n| `team` | `Relation`<br /> - id (id)<br /> - email (string)<br /> - space.id (id)<br /> - space.name (string)<br /> - added_at (datetime) | any, none, count, all |\n| `guests` | `Relation`<br /> - id (id)<br /> - email (string)<br /> - added_at (datetime) | any, none, count, all |\n| `tasks` | `Relation`<br /> - uri (string)<br /> - title (string)<br /> - parent_task.id (id)<br /> - assignee.id (id)<br /> - assignee.email (string)<br /> - status (enum) | any, none, count, all |\n| `custom_fields.*` — see Custom fields below | `custom` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.\n\nCustom fields: when enabled, you can filter by `custom_fields.<slug>`. Example: `custom_fields.my_flag eq 'yes'` or `custom_fields.score gte 10`. Supported ops depend on the custom field type (eq, ne, in, nin, contains, startswith, endswith, isnull, isnotnull, and comparisons for numeric/date types).",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- tasks (→ effort_sum): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ProjectData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ProjectData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/projects/{id}": {
      "get": {
        "operationId": "projects.show",
        "description": "**No specific scope required.**",
        "summary": "Retrieve a project",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `portfolios`, `client`, `client.primaryContact`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ProjectData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProjectData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/team": {
      "get": {
        "operationId": "projects.team",
        "description": "**No specific scope required.**",
        "summary": "List all project team members",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `space.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `space.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `added_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `TeamMemberData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/TeamMemberData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/guests": {
      "get": {
        "operationId": "projects.guests",
        "description": "**No specific scope required.**",
        "summary": "List all project guests",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `added_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `TeamMemberData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/TeamMemberData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/phases": {
      "get": {
        "operationId": "projects.phases",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all project phases",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `start_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `end_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `group.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `group.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `type.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `tasks` | `Relation`<br /> - uri (string)<br /> - title (string)<br /> - assignee.id (id)<br /> - assignee.email (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- tasks (→ effort_sum): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `PhaseData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/PhaseData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/milestones": {
      "get": {
        "operationId": "projects.milestones",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all project milestones",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `group.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `group.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `tasks` | `Relation`<br /> - uri (string)<br /> - title (string)<br /> - assignee.id (id)<br /> - assignee.email (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- tasks (→ effort_sum): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `MilestoneData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/MilestoneData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/epics": {
      "get": {
        "operationId": "projects.epics",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all project epics",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `tasks` | `Relation`<br /> - uri (string)<br /> - title (string)<br /> - assignee.id (id)<br /> - assignee.email (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- tasks (→ effort_sum): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `po_number`, `created_at`, `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `EpicData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/EpicData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/projects/{id}/tasks": {
      "get": {
        "operationId": "projects.tasks",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all project tasks",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `uri` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sub_tasks_in_list` | `enum:with, only, without` | eq |\n| `due_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `status` | `enum<TaskStatus>` | eq, ne, neq, in, nin, notin |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.status` | `enum:running, closed` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `assignee.id` | `id<UserFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `assignee.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `assignee.type` | `enum<UserType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `epic.id` | `id<EpicData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `epic.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.id` | `id<PhaseData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.start_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.end_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.id` | `id<MilestoneData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `parent_task.id` | `id<TaskData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `parent_task.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `parent_task.uri` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `parent_task.status` | `enum<TaskStatus>` | eq, ne, neq, in, nin, notin |\n| `sub_tasks` | `Relation`<br /> - title (string)<br /> - uri (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/TaskData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks": {
      "get": {
        "operationId": "tasks.index",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all tasks",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `uri`, `status`, `updated_at`, `created_at`, `due_date`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `project`, `watchers`, `client`, `parent_task`, `sub_tasks`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `uri` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sub_tasks_in_list` | `enum:with, only, without` | eq |\n| `due_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `status` | `enum<TaskStatus>` | eq, ne, neq, in, nin, notin |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.status` | `enum:running, closed` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `assignee.id` | `id<UserFullData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `assignee.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `assignee.type` | `enum<UserType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `epic.id` | `id<EpicData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `epic.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.id` | `id<PhaseData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.start_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.end_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.id` | `id<MilestoneData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `parent_task.id` | `id<TaskData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `parent_task.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `parent_task.uri` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `parent_task.status` | `enum<TaskStatus>` | eq, ne, neq, in, nin, notin |\n| `sub_tasks` | `Relation`<br /> - title (string)<br /> - uri (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/TaskData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "tasks.store",
        "description": "**Required scopes:** `task-management:write`",
        "summary": "Create a task",
        "tags": [
          "Tasks"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration's slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "title": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "description": {
                    "type": "string",
                    "description": "In HTML",
                    "maxLength": 65535
                  },
                  "estimated_hours": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "due_date": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "is_public": {
                    "type": "boolean"
                  },
                  "watchers": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "status": {
                    "$ref": "#/components/schemas/TaskStatus"
                  },
                  "project_id": {
                    "type": "string"
                  },
                  "insert_before": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "insert_after": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "parent_task_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "assignee_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "epic_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "phase_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "milestone_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "title",
                  "project_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/TaskData"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/{id}": {
      "get": {
        "operationId": "tasks.show",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "Retrieve a task",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "tasks.delete",
        "description": "**Required scopes:** `task-management:write`",
        "summary": "Archive a task",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/{task}": {
      "patch": {
        "operationId": "tasks.update",
        "description": "**Required scopes:** `task-management:write`",
        "summary": "Update a task",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "task",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "description": {
                    "type": "string",
                    "description": "In HTML\nuse `<mention data-id=\"<UserID>\" />` to mention user",
                    "maxLength": 65535
                  },
                  "estimated_hours": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "due_date": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "is_public": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "watchers": {
                    "type": "array",
                    "description": "If present - overwrites the watch list",
                    "items": {
                      "type": "string"
                    }
                  },
                  "add_watchers": {
                    "type": "array",
                    "description": "Adds user to watchlist",
                    "items": {
                      "type": "string"
                    }
                  },
                  "status": {
                    "$ref": "#/components/schemas/TaskStatus"
                  },
                  "parent_task_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "assignee_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "epic_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "phase_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "milestone_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/TaskData"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/{id}/external-identifier": {
      "put": {
        "operationId": "tasks.updateExternalId",
        "description": "**Required scopes:** `client:write`",
        "summary": "Update a tasks's external identifier",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier to the client from an external system, must be unique within integration (integration slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`TaskData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/{id}/upload": {
      "post": {
        "operationId": "tasks.upload",
        "description": "**Required scopes:** `task-management:write`",
        "summary": "Upload file to a task",
        "tags": [
          "Tasks"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "File to upload - Max: 15MB"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`FileData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/comments": {
      "post": {
        "operationId": "taskComments.store",
        "description": "**Required scopes:** `task-management:write`",
        "summary": "Create a new comment for a task",
        "tags": [
          "Task Comments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration's slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "task_id": {
                    "type": "string"
                  },
                  "parent_comment_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "comment": {
                    "type": "string",
                    "description": "In HTML\nuse `<mention data-id=\"<UserID>\" />` to mention user",
                    "maxLength": 65535
                  },
                  "is_public": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "task_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`CommentData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/CommentData"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/comments/{id}": {
      "patch": {
        "operationId": "taskComments.update",
        "description": "**Required scopes:** `task-management:write`\n\nComments can only be updated by the author of the comment",
        "summary": "Update a tasks comment's content",
        "tags": [
          "Task Comments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "comment": {
                    "type": "string",
                    "description": "In HTML\nuse `<mention data-id=\"<UserID>\" />` to mention user",
                    "maxLength": 65535
                  },
                  "is_public": {
                    "type": "boolean"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`CommentData`",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/CommentData"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "403": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "You are not allowed to edit this comment"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "get": {
        "operationId": "taskComments.show",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "Retrieve a tasks comment",
        "tags": [
          "Task Comments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`CommentData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "taskComments.destroy",
        "description": "**Required scopes:** `task-management:write`\n\nComments can only be deleted by the author of the comment",
        "summary": "Delete a tasks comment",
        "tags": [
          "Task Comments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "403": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "You are not allowed to delete this comment"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/comments/{id}/upload": {
      "post": {
        "operationId": "taskComments.upload",
        "description": "**Required scopes:** `task-management:write`\n\nFiles can only be uploaded by the author of the comment",
        "summary": "Upload file to a task comment",
        "tags": [
          "Task Comments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "File to upload - Max: 15MB"
                  }
                },
                "required": [
                  "file"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`FileData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "403": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "You are not allowed to upload files to this comment"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/tasks/{id}/comments": {
      "get": {
        "operationId": "taskComments.comments",
        "description": "**Required scopes:** `task-management:read`",
        "summary": "List all comments for a task",
        "tags": [
          "Task Comments"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "uri",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id`  by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `created_at`, `updated_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `parent_comment`, `sub_comments`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `sub_comments_in_list` | `enum:with, only, without` | eq |\n| `is_public` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n| `author.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `author.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `author.type` | `enum<UserType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `parent_comment.id` | `id<CommentData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `sub_comments` | `Relation`<br /> - title (string)<br /> - uri (string)<br /> - status (enum) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `DWI.Http.Data.Api.V1.CommentData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/CommentData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/efforts": {
      "get": {
        "operationId": "efforts.index",
        "description": "**Required scopes:** `efforts:read`\n\nIf additional scope `efforts:extended:read` is granted efforts with type `admin` will be included.",
        "summary": "List all efforts",
        "tags": [
          "Efforts"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `date`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `type` | `enum:admin, project` | eq, ne, neq, in, nin, notin |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `user.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `user.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `epic.id` | `id<EpicData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `epic.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.id` | `id<PhaseData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phase.start_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `phase.end_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.id` | `id<MilestoneData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `milestone.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.po_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `milestone.date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `task.id` | `id<TaskData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `task.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `task.uri` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `task.status` | `enum<TaskStatus>` | eq, ne, neq, in, nin, notin |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "Computed fields are auto-attached by FilterService's apply() wrapper during pagination/fetch.\n\n\n\nThe cursor paginated collection of `EffortData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/EffortData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/contacts": {
      "get": {
        "operationId": "contacts.index",
        "description": "**Required scopes:** `contact-data:read`",
        "summary": "List all contacts",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `first_name`, `last_name`, `created_at`, `custom_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `companies`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `first_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `last_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `birthday` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `email_private` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `mobile` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `mobile_private` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `telephone` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `telephone_private` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `fax` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_street` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_street2` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_house` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_zip` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_state` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_town` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_country.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `owner.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `owner.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `owner.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `owner.external_origin` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_origin` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `updated_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `external_origin` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `companies` | `Relation`<br /> - id (id)<br /> - external_id (string)<br /> - company_name (string)<br /> - external_origin (string)<br /> - tax_uid (string)<br /> - iban (string)<br /> - bic (string)<br /> - phone (string)<br /> - fax (string)<br /> - email (string)<br /> - email_general (string)<br /> - homepage (string) | any, none, count, all |\n| `custom_fields.*` — see Custom fields below | `custom` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.\n\nCustom fields: when enabled, you can filter by `custom_fields.<slug>`. Example: `custom_fields.my_flag eq 'yes'` or `custom_fields.score gte 10`. Supported ops depend on the custom field type (eq, ne, in, nin, contains, startswith, endswith, isnull, isnotnull, and comparisons for numeric/date types).",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ContactData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "contacts.store",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Create a contact",
        "tags": [
          "Contacts"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration's slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "gender": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "f",
                      "m",
                      "x"
                    ]
                  },
                  "first_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "last_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "birthday": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "title_suffix": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "position": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "locale": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "telephone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "telephone_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "mobile": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "mobile_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "email_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "address_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if address_country_id is set."
                  },
                  "address_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "ClientData"
                  },
                  "owner_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "UserData"
                  },
                  "custom_fields": {
                    "type": "array",
                    "format": "array",
                    "example": "{<slug>: <value>}",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/contacts/{id}": {
      "get": {
        "operationId": "contacts.show",
        "description": "**Required scopes:** `contact-data:read`",
        "summary": "Retrieve a contact",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `companies`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "patch": {
        "operationId": "contacts.update",
        "description": "**Required scopes:** `contact-data:write`\n\nTo update `external_id` jump to [Endpoint](#operation/ontacts.updateExternalId) `/contacts/{id}/external-identifier`",
        "summary": "Update a contact",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "gender": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "enum": [
                      "f",
                      "m",
                      "x"
                    ]
                  },
                  "first_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "last_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "birthday": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "title_suffix": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "position": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "locale": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "telephone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "telephone_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "mobile": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "mobile_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "email_private": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "address_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if address_country_id is set."
                  },
                  "address_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "ClientData"
                  },
                  "owner_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "UserData"
                  },
                  "custom_fields": {
                    "type": "array",
                    "format": "array",
                    "example": "{<slug>: <value>}",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "contacts.destroy",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Archive a contact",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "Contact deleted successfully"
                      ]
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/contacts/{id}/external-identifier": {
      "put": {
        "operationId": "contacts.updateExternalId",
        "description": "**Required scopes:** `contact-data:write`\n\nCan be used to force overwrite `external_id`",
        "summary": "Update a contacts external identifier",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier to the client from an external system, must be unique within integration (integration slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/contacts/{id}/company/attach": {
      "put": {
        "operationId": "contacts.associateCompany",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Attach a contact to a company",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "company_id": {
                    "type": "string",
                    "format": "CompanyData"
                  },
                  "position": {
                    "type": "string",
                    "description": "Position the contact holds in the company"
                  }
                },
                "required": [
                  "company_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "Contact successfully associated with company"
                      ]
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/contacts/{id}/company/detach": {
      "put": {
        "operationId": "contacts.unassociateCompany",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Detach a contact from a company",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "company_id": {
                    "type": "string",
                    "format": "CompanyData"
                  }
                },
                "required": [
                  "company_id"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "Contact successfully detached from company"
                      ]
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/contacts/{id}/restore": {
      "post": {
        "operationId": "contacts.restore",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Restore a contact",
        "tags": [
          "Contacts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ContactData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "409": {
            "description": "An error\n\nAn error",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Contact not archived"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview."
                        }
                      },
                      "required": [
                        "message"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/companies": {
      "get": {
        "operationId": "companies.index",
        "description": "**Required scopes:** `contact-data:read`",
        "summary": "List all companies",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `company_name`, `updated_at`, `created_at`, `custom_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `contacts`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `company_name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `tax_uid` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `iban` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `bic` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `phone` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `fax` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `email_general` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `homepage` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `invoices_by_post` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n| `invoices_by_email` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n| `business_field.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `business_field.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `person_attention_to` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_street` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_street2` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_house` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_zip` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_state` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_town` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_country.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_invoice_is_delivery` | `bool` | eq, ne, neq, isnull, isnotnull, notnull |\n| `delivery_person_attention_to` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_street` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_street2` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_house` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_zip` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_state` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_town` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `address_delivery_country.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_origin` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `updated_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `contacts` | `Relation`<br /> - id (id)<br /> - external_id (string)<br /> - external_origin (string)<br /> - first_name (string)<br /> - last_name (string)<br /> - birthday (date)<br /> - email (string)<br /> - email_private (string)<br /> - mobile (string)<br /> - mobile_private (string)<br /> - telephone (string)<br /> - telephone_private (string) | any, none, count, all |\n| `tags` | `Relation`<br /> - id (id)<br /> - title (string) | any, none, count, all |\n| `custom_fields.*` — see Custom fields below | `custom` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.\n\nCustom fields: when enabled, you can filter by `custom_fields.<slug>`. Example: `custom_fields.my_flag eq 'yes'` or `custom_fields.score gte 10`. Supported ops depend on the custom field type (eq, ne, in, nin, contains, startswith, endswith, isnull, isnotnull, and comparisons for numeric/date types).",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/CompanyData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "companies.store",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Create a company",
        "tags": [
          "Companies"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration's slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "vendor_identifier": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "company_name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "locale": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "tax_uid": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "taxation": {
                    "type": "boolean"
                  },
                  "iban": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "bic": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "phone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "homepage": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be comma separated list of emails",
                    "maxLength": 255
                  },
                  "email_general": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "invoice_by_post": {
                    "type": "boolean"
                  },
                  "invoices_by_email": {
                    "type": "boolean"
                  },
                  "person_attention_to": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_is_delivery": {
                    "type": "boolean"
                  },
                  "address_invoice_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if `address_invoice_country_id` is set."
                  },
                  "address_invoice_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "delivery_person_attention_to": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if `address_delivery_country_id` is set."
                  },
                  "address_delivery_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "ClientData"
                  },
                  "business_field": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "If field not exists, a new one will be created"
                  },
                  "company_size": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "company_revenue": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tags": {
                    "type": "array",
                    "format": "string[]",
                    "items": {
                      "type": "string"
                    }
                  },
                  "custom_fields": {
                    "type": "array",
                    "format": "array",
                    "example": "{<slug>: <value>}",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "company_name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/companies/{id}": {
      "get": {
        "operationId": "companies.show",
        "description": "**Required scopes:** `contact-data:read`",
        "summary": "Retrieve a company",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `contacts`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "patch": {
        "operationId": "companies.update",
        "description": "**Required scopes:** `contact-data:write`\n\nTo update `external_id` jump to [Endpoint](#operation/companies.updateExternalId) `/companies/{id}/external-identifier`",
        "summary": "Update a company",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "vendor_identifier": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "company_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "locale": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "tax_uid": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "taxation": {
                    "type": "boolean"
                  },
                  "iban": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "bic": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "phone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "homepage": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be comma separated list of emails",
                    "maxLength": 255
                  },
                  "email_general": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "invoice_by_post": {
                    "type": "boolean"
                  },
                  "invoices_by_email": {
                    "type": "boolean"
                  },
                  "person_attention_to": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_invoice_is_delivery": {
                    "type": "boolean"
                  },
                  "address_invoice_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if `address_invoice_country_id` is set."
                  },
                  "address_invoice_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "delivery_person_attention_to": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_house": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_delivery_country": {
                    "type": "string",
                    "description": "Format: `ISO 3166-1 alpha-2 / ISO 3166-1 alpha-3 / ISO-3166-1 numeric / Name` <br/><br/>You can use this field to associate a contact with a specific country.\nWe try to find the corresponding country based on the provided value.\nIf country code/name is valid but not created yet, it will be created.\nIf country is not valid, the space's default country will be used.\n\nWill be ignored if `address_delivery_country_id` is set."
                  },
                  "address_delivery_country_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "CountryData",
                    "description": "You can use this field to associate a contact with a specific country already present in the system."
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "ClientData"
                  },
                  "business_field": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "If field not exists, a new one will be created"
                  },
                  "company_size": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "company_revenue": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "tags": {
                    "type": "array",
                    "format": "string[]",
                    "items": {
                      "type": "string"
                    }
                  },
                  "custom_fields": {
                    "type": "array",
                    "format": "array",
                    "example": "{<slug>: <value>}",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "companies.destroy",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Archive a company",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "enum": [
                        "Company deleted successfully"
                      ]
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/companies/{id}/external-identifier": {
      "put": {
        "operationId": "companies.updateExternalId",
        "description": "**Required scopes:** `contact-data:write`\n\nCan be used to force overwrite `external_id`",
        "summary": "Update a companys external identifier",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/companies/{id}/restore": {
      "post": {
        "operationId": "companies.restore",
        "description": "**Required scopes:** `contact-data:write`",
        "summary": "Restore a company",
        "tags": [
          "Companies"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`CompanyData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "409": {
            "description": "An error\n\nAn error",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Company not archived"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview."
                        }
                      },
                      "required": [
                        "message"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/offers": {
      "get": {
        "operationId": "offers.index",
        "description": "**Required scopes:** `offer:read`",
        "summary": "List all offers",
        "tags": [
          "Offers"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `offer_number`, `title`, `date_of_offer`, `sum_net`, `sum_tax`, `sum_external_costs`, `sum_gross`, `created_at`, `updated_at`, `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `external_costs`, `line_items`, `discounts`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `offer_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `date_of_offer` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `date_of_expiry` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `sum_net` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_tax` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_gross` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `editor.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `company.id` | `id<CompanyData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `company.company_name:string` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `line_items` | `Relation`<br /> - title (string)<br /> - price (currency)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - total_net (currency)<br /> - total_net_base (currency)<br /> - total_gross (currency)<br /> - total_gross_base (currency)<br /> - purchase_total (currency)<br /> - type (enum) | any, none, count, all |\n| `external_costs` | `Relation`<br /> - title (string)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - supplier.id (id)<br /> - supplier.name (string)<br /> - price (currency)<br /> - total (currency) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- line_items (→ lineItems): aggregates: count, sum, avg, min, max; coalesce default: 0\n- external_costs (→ internalCosts): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `OfferData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/OfferData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/offers/{id}": {
      "get": {
        "operationId": "offers.show",
        "description": "**Required scopes:** `offer:read`",
        "summary": "Retrieve an offer",
        "tags": [
          "Offers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`OfferData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/offers/{id}/line-items": {
      "get": {
        "operationId": "offers.lineItems",
        "description": "**Required scopes:** `offer:read`",
        "summary": "List all offer lineItems",
        "tags": [
          "Offers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `price`, `total`, `purchase_price`, `purchase_total`, `created_at`, `updated_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `price` | `float` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `amount` | `float` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `purchase_price` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `purchase_total` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<AccountingLineItemType>` | eq, ne, neq, in, nin, notin |\n| `metric.id` | `id<MetricData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `metric.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `OfferLineItemData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/OfferLineItemData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/offers/{id}/pdf": {
      "get": {
        "operationId": "offers.pdf",
        "description": "**Required scopes:** `offer:read`",
        "summary": "Download offer PDF",
        "tags": [
          "Offers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The ID of the offer to be downloaded.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Disposition": {
                "required": true,
                "schema": {
                  "type": "string"
                },
                "example": "attachment"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/outgoing-invoices": {
      "get": {
        "operationId": "outgoingInvoices.index",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "List all invoices",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `invoice_number`, `title`, `date_of_invoice`, `sum_net`, `sum_tax`, `sum_external_costs`, `sum_gross`, `created_at`, `updated_at`, `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `external_costs`, `line_items`, `discounts`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `status` | `enum<OutgoingInvoiceStatus>` | eq, ne, neq, in, nin, notin |\n| `payment_status` | `enum<OutgoingInvoicePaymentStatus>` | eq, ne, neq, in, nin, notin |\n| `invoice_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `is_credit` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n| `date_of_invoice` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `payment_due_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `sum_net` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_tax` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_gross` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `editor.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `company.id` | `id<CompanyData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `company.company_name:string` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `line_items` | `Relation`<br /> - title (string)<br /> - price (currency)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - total_net (currency)<br /> - total_net_base (currency)<br /> - total_net_without_discount (currency)<br /> - total_gross (currency)<br /> - total_gross_base (currency)<br /> - total_gross_without_discount (currency)<br /> - purchase_total (currency)<br /> - purchase_total_base (currency)<br /> - type (enum) | any, none, count, all |\n| `external_costs` | `Relation`<br /> - title (string)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - supplier.id (id)<br /> - supplier.name (string)<br /> - price (currency)<br /> - total (currency) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- line_items (→ lineItems): aggregates: count, sum, avg, min, max; coalesce default: 0\n- external_costs (→ internalCosts): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `OutgoingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/OutgoingInvoiceData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/outgoing-invoices/master": {
      "get": {
        "operationId": "outgoingInvoices.masterPlans",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "List all invoice master plans",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `performance_range_start`, `performance_range_end`, `sum_net`, `sum_tax`, `sum_external_costs`, `sum_gross`, `created_at`, `updated_at`, `computed_fields.<alias>`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `external_costs`, `line_items`, `discounts`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_net` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_tax` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_gross` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `editor.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `editor.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.id` | `id<ClientData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `client.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `company.id` | `id<CompanyData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `company.company_name:string` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `line_items` | `Relation`<br /> - title (string)<br /> - price (currency)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - total_net (currency)<br /> - total_net_base (currency)<br /> - total_net_without_discount (currency)<br /> - total_gross (currency)<br /> - total_gross_base (currency)<br /> - total_gross_without_discount (currency)<br /> - purchase_total (currency)<br /> - purchase_total_base (currency)<br /> - type (enum) | any, none, count, all |\n| `external_costs` | `Relation`<br /> - title (string)<br /> - amount (float)<br /> - project.id (id)<br /> - project.title (string)<br /> - project.external_id (string)<br /> - project.shortcode (string)<br /> - supplier.id (id)<br /> - supplier.name (string)<br /> - price (currency)<br /> - total (currency) | any, none, count, all |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "computed_fields[alias]",
            "in": "query",
            "description": "Dynamic computed relation fields (computed_fields[alias])\n\nDeclare ad-hoc aggregates per request using: `computed_fields[<alias>] = relation.aggregate(args)`\n\nSyntax:\n- Count: `relation.count()` or `relation.count(<where>)`\n- Sum/Avg/Min/Max: `relation.sum(<column>)` or `relation.sum(<column>, <where>)`\n\nWhere is written using the same Filter DSL and is validated against the relation's allowed fields.\n\nUse the prefix `computed_fields.` when referencing these aliases in `filter` or `sort`, e.g., `filter=computed_fields.tasks_done gte 1` or `sort=-computed_fields.tasks_done`. Bare aliases are accepted for backward compatibility but deprecated.\n\nAllowed relations for computed_fields (deny-all by default):\n- line_items (→ lineItems): aggregates: count, sum, avg, min, max; coalesce default: 0\n- external_costs (→ internalCosts): aggregates: count, sum, avg, min, max; coalesce default: 0\n\nExample: `?computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)&filter=computed_fields.tasks_done%20gt%200`\n",
            "schema": {
              "type": "string"
            },
            "example": "computed_fields[tasks_done]=tasks.count(status%20eq%20%22Completed%22)"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `OutgoingInvoiceMasterData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/OutgoingInvoiceMasterData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/outgoing-invoices/master/{id}": {
      "get": {
        "operationId": "outgoingInvoices.showMaster",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "Retrieve an invoice master plan",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`OutgoingInvoiceMasterData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutgoingInvoiceMasterData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/outgoing-invoices/{id}": {
      "get": {
        "operationId": "outgoingInvoices.show",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "Retrieve an invoice",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`OutgoingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutgoingInvoiceData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/outgoing-invoices/{id}/line-items": {
      "get": {
        "operationId": "outgoingInvoices.lineItems",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "List all invoice lineItems",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `price`, `total_net_base`, `total_net_without_discount`, `total_net`, `total_gross_base`, `total_gross_without_discount`, `total_gross`, `purchase_total`, `purchase_total_base`, `purchase_price`, `created_at`, `updated_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `price` | `float` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `amount` | `float` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `tax_factor` | `float` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `project.id` | `id<ProjectData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `project.shortcode` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_net_base` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_net_without_discount` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_net` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_gross_base` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_gross_without_discount` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `total_gross` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `purchase_price` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `purchase_total_base` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `purchase_total` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<AccountingLineItemType>` | eq, ne, neq, in, nin, notin |\n| `metric.id` | `id<MetricData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `metric.title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `OutgoingInvoiceLineItemData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/OutgoingInvoiceLineItemData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/outgoing-invoices/external": {
      "post": {
        "operationId": "outgoingInvoices.createExternal",
        "description": "**Required scopes:** `outgoing-invoice:upload`\n\nEndpoint can be used to upload outgoing invoices not created within Kanbert.\n<br/><br/>\n**Be careful:**\n<br/>Invoice Enumeration & consistency is in your responsibility.\n<br/>Make sure not to interfere with the invoice numbering of Kanbert.",
        "summary": "Upload a manual invoice",
        "tags": [
          "Outgoing Invoices"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration (integration's slug)",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "client_id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "description": "Allowed values: `booked`",
                    "enum": [
                      "booked"
                    ]
                  },
                  "invoice_number": {
                    "type": "string",
                    "description": "Required if status is `booked`.\n<br/>We do check whether an invoice with the same `invoice_number` exists already.\n<br/>We do not check if the invoice interferes with invoice number cycles in Kanbert."
                  },
                  "date_of_invoice": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "performance_range_start": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "performance_range_end": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "payment_due_date": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "booked_at": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "currency": {
                    "type": "string",
                    "description": "Allowed values: `EUR`",
                    "enum": [
                      "EUR"
                    ]
                  },
                  "sum_net": {
                    "type": "number"
                  },
                  "sum_tax": {
                    "type": "number",
                    "description": "Can be used to indicate reverse charge",
                    "default": 0
                  },
                  "taxation_enabled": {
                    "type": "boolean",
                    "description": "Can be used to indicate reverse charge",
                    "default": true
                  },
                  "is_credit": {
                    "type": "boolean"
                  },
                  "address": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string"
                  },
                  "po_number": {
                    "type": "string"
                  },
                  "project_id": {
                    "type": "string"
                  },
                  "company_id": {
                    "type": "string"
                  },
                  "editor_id": {
                    "type": "string"
                  },
                  "file_url": {
                    "type": "string",
                    "format": "uri",
                    "description": "A public url to download the invoice PDF from - either `file_url` or `file` are required"
                  },
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "PDF to upload - Max: 15MB - either `file_url` or `file` are required"
                  },
                  "vats": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "vat": {
                          "type": "number"
                        },
                        "value": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "vat",
                        "value"
                      ]
                    }
                  }
                },
                "required": [
                  "client_id",
                  "title",
                  "status",
                  "date_of_invoice",
                  "performance_range_start",
                  "performance_range_end",
                  "payment_due_date",
                  "currency",
                  "sum_net"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`OutgoingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OutgoingInvoiceData"
                }
              }
            }
          },
          "400": {
            "description": "An error\n\nAn error\n\nAn error",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Failed to download file from provided URL"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Downloaded file is not a valid PDF"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "message": {
                          "type": "string",
                          "description": "Error overview.",
                          "example": "Uploaded file is not a valid PDF"
                        }
                      },
                      "required": [
                        "message"
                      ]
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "409": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Invoice number already exists"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "413": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Downloaded file exceeds maximum size of 15MB"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/outgoing-invoices/{id}/pdf": {
      "get": {
        "operationId": "outgoingInvoices.pdf",
        "description": "**Required scopes:** `outgoing-invoice:read`",
        "summary": "Download invoice PDF",
        "tags": [
          "Outgoing Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The ID of the invoice to be downloaded.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Disposition": {
                "required": true,
                "schema": {
                  "type": "string"
                },
                "example": "attachment"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/incoming-invoices": {
      "get": {
        "operationId": "incomingInvoices.index",
        "description": "**Required scopes:** `incoming-invoice:read`\n\nReturns documents of type Invoice and Credit.",
        "summary": "List all incoming invoices",
        "tags": [
          "Incoming Invoices"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `date_of_invoice`, `due_date`, `sum_net`, `sum_tax`, `sum_gross`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `status` | `enum` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `payment_status` | `enum` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `invoice_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_net` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_tax` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `sum_gross` | `currency` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `supplier.id` | `id<SupplierData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `editor.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `date_of_invoice` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `due_date` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `IncomingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/IncomingInvoiceData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "incomingInvoices.store",
        "description": "**Required scopes:** `incoming-invoice:write`\n\nCreates a new incoming invoice document and optionally attaches an uploaded file.\nWhen a file is uploaded and `file_was_preprocessed` is not set (or false), the\nsystem will automatically run OCR to extract invoice data from the document.\nFields explicitly provided in the request always take precedence over OCR results.\nOptionally, cost-center bookings can be created inline.",
        "summary": "Upload an incoming invoice",
        "tags": [
          "Incoming Invoices"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "type": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Invoice or Credit",
                    "enum": [
                      "Invoice",
                      "Credit"
                    ],
                    "default": "Invoice"
                  },
                  "invoice_number": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "External invoice number",
                    "maxLength": 255
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Free-text notes / annotations",
                    "maxLength": 10000
                  },
                  "date_of_invoice": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "due_date": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "date_of_start": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "date_of_end": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "net_value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "vat_value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "supplier_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "editor_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "payment_account_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Obfuscated payment account ID"
                  },
                  "file_was_preprocessed": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "When true, the internal OCR workflow is skipped. Use this when the\ncalling system has already extracted invoice data from the document.",
                    "default": false
                  },
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "PDF or image file to upload - Max: 15MB"
                  },
                  "tags": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": "string",
                      "maxLength": 255
                    }
                  },
                  "vats": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "description": "VAT breakdown lines",
                    "items": {
                      "type": "object",
                      "properties": {
                        "vat": {
                          "type": "number",
                          "description": "VAT rate in percent",
                          "example": 20
                        },
                        "value": {
                          "type": "number",
                          "description": "Calculated VAT amount for this rate"
                        }
                      },
                      "required": [
                        "vat",
                        "value"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`IncomingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomingInvoiceData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/incoming-invoices/{id}": {
      "get": {
        "operationId": "incomingInvoices.show",
        "description": "**Required scopes:** `incoming-invoice:read`\n\nReturns a single document of type Invoice or Credit.",
        "summary": "Retrieve an incoming invoice",
        "tags": [
          "Incoming Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`IncomingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomingInvoiceData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          }
        }
      },
      "patch": {
        "operationId": "incomingInvoices.update",
        "description": "**Required scopes:** `incoming-invoice:write`\n\nUpdates the document fields of an incoming invoice. Bookings and payments are **not**\ntouched by this endpoint – use the dedicated booking endpoints instead.",
        "summary": "Update an incoming invoice",
        "tags": [
          "Incoming Invoices"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "type": {
                    "type": "string",
                    "description": "Invoice or Credit",
                    "enum": [
                      "Invoice",
                      "Credit"
                    ]
                  },
                  "invoice_number": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "External invoice number",
                    "maxLength": 255
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Free-text notes / annotations",
                    "maxLength": 10000
                  },
                  "status": {
                    "type": "string",
                    "description": "open, ready_for_accounting or booked",
                    "enum": [
                      "open",
                      "ready_for_accounting"
                    ]
                  },
                  "payment_status": {
                    "type": "string",
                    "description": "open, paid or partial",
                    "enum": [
                      "open",
                      "paid",
                      "partial"
                    ]
                  },
                  "date_of_invoice": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "due_date": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "date_of_start": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "date_of_end": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time"
                  },
                  "net_value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "vat_value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "supplier_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "editor_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "payment_account_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Obfuscated payment account ID"
                  },
                  "tags": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "items": {
                      "type": "string",
                      "maxLength": 255
                    }
                  },
                  "vats": {
                    "type": [
                      "array",
                      "null"
                    ],
                    "description": "VAT breakdown lines",
                    "items": {
                      "type": "object",
                      "properties": {
                        "vat": {
                          "type": "number",
                          "description": "VAT rate in percent",
                          "example": 20
                        },
                        "value": {
                          "type": "number",
                          "description": "Calculated VAT amount for this rate"
                        }
                      },
                      "required": [
                        "vat",
                        "value"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`IncomingInvoiceData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomingInvoiceData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/incoming-invoices/check-duplicate": {
      "post": {
        "operationId": "incomingInvoices.checkHash",
        "description": "**Required scopes:** `incoming-invoice:read`\n\nVerifies whether a file has already been uploaded by comparing its MD5 hash\nagainst existing document hashes. You may either upload the file directly\n(the server computes the hash) or provide a pre-computed MD5 hash string.",
        "summary": "Check for duplicate uploads",
        "tags": [
          "Incoming Invoices"
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "hash": {
                    "type": "string",
                    "description": "Pre-computed MD5 hash of the file – mutually exclusive with `file`",
                    "minLength": 32,
                    "maxLength": 32
                  },
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "PDF or image file to check – mutually exclusive with `hash`"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "hash": {
                      "type": "string"
                    },
                    "exists": {
                      "type": "boolean"
                    },
                    "duplicates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "invoice_number": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "supplier": {
                            "type": [
                              "object",
                              "null"
                            ],
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "name": {
                                "type": "string"
                              }
                            },
                            "required": [
                              "id",
                              "name"
                            ]
                          },
                          "status": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "string",
                                "enum": [
                                  "open"
                                ]
                              }
                            ]
                          },
                          "booked_at": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "title",
                          "invoice_number",
                          "supplier",
                          "status",
                          "booked_at"
                        ]
                      }
                    }
                  },
                  "required": [
                    "hash",
                    "exists",
                    "duplicates"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/incoming-invoices/{invoiceId}/bookings/{bookingId}": {
      "patch": {
        "operationId": "incomingInvoices.updateBooking",
        "description": "**Required scopes:** `incoming-invoice:write`, `chart-of-accounts:write`\n\nUpdates a single chart-of-account booking on the given incoming invoice.",
        "summary": "Update a booking",
        "tags": [
          "Incoming Invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bookingId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "value": {
                    "type": "number",
                    "description": "Booking amount"
                  },
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "type": {
                    "type": "string",
                    "description": "account, reference, account_staff or account_other",
                    "enum": [
                      "account",
                      "reference",
                      "account_staff",
                      "account_other"
                    ]
                  },
                  "chart_of_account_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "position_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "project_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`IncomingInvoiceBookingData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncomingInvoiceBookingData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      },
      "delete": {
        "operationId": "incomingInvoices.destroyBooking",
        "description": "**Required scopes:** `incoming-invoice:write`, `chart-of-accounts:write`\n\nRemoves a single chart-of-account booking from the given incoming invoice.",
        "summary": "Delete a booking",
        "tags": [
          "Incoming Invoices"
        ],
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bookingId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No content"
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/chart-of-accounts": {
      "get": {
        "operationId": "chartOfAccounts.index",
        "description": "**Required scopes:** `chart-of-accounts:read`",
        "summary": "List all chart of accounts",
        "tags": [
          "Chart of Accounts"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `code`, `title`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `positions`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `code` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<CostCenterType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `priority` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ChartOfAccountData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ChartOfAccountData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/chart-of-accounts/bookings": {
      "get": {
        "operationId": "chartOfAccounts.bookings",
        "description": "**Required scopes:** `chart-of-accounts:read`",
        "summary": "List bookings",
        "tags": [
          "Chart of Accounts"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `value`, `title`, `type`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `type` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `chart_of_account.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `chart_of_account.code` | — | — |\n| `chart_of_account.title` | — | — |\n| `chart_of_account.type` | `enum<CostCenterType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `position.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `position.title` | — | — |\n| `incoming_invoice.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `outgoing_invoice.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `client.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `project.id` | `id` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `ChartOfAccountsBookingData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/ChartOfAccountsBookingData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/chart-of-accounts/{id}": {
      "get": {
        "operationId": "chartOfAccounts.show",
        "description": "**Required scopes:** `chart-of-accounts:read`",
        "summary": "Retrieve a single chart of account",
        "tags": [
          "Chart of Accounts"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`ChartOfAccountData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChartOfAccountData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          }
        }
      }
    },
    "/payment-accounts": {
      "get": {
        "operationId": "payments.accounts",
        "description": "**Required scopes:** `payments:read`",
        "summary": "List all payment accounts",
        "tags": [
          "Payments"
        ],
        "parameters": [
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<PaymentAccountType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `organisation` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n| `owner.id` | `id<UserData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `owner.email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `title`, `type`, `organization`, `identifier`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `PaymentAccountData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/PaymentAccountData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/payments": {
      "get": {
        "operationId": "payments.payments",
        "description": "**Required scopes:** `payments:read`",
        "summary": "List all payments",
        "tags": [
          "Payments"
        ],
        "parameters": [
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `reference` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `iban` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `payment_account.id` | `id<PaymentAccountData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `payment_account.type` | `enum<PaymentAccountType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `payment_account.iban` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `outgoing_invoice.id` | `id<OutgoingInvoiceData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `incoming_invoice.id` | `id<IncomingInvoiceData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `date_of_payment` | `date` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `reference`, `iban`, `date_of_payment`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `PaymentData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/PaymentData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/payments/outgoing-invoice": {
      "post": {
        "operationId": "payments.createOutgoingInvoicePayment",
        "description": "**Required scopes:** `payments:write`",
        "summary": "Add payment for an outgoing invoice",
        "tags": [
          "Payments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "in",
                      "out"
                    ]
                  },
                  "payment_account_id": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "date_of_payment": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "customer_name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "iban": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "bic": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "bookings": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "outgoing_invoice_id": {
                          "type": "string",
                          "description": "Invoice needs to be booked"
                        },
                        "value": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "outgoing_invoice_id",
                        "value"
                      ]
                    }
                  }
                },
                "required": [
                  "type",
                  "payment_account_id",
                  "reference",
                  "date_of_payment",
                  "bookings"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`PaymentData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          },
          "500": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Payment could not be saved"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/payments/outgoing-invoice-credit": {
      "post": {
        "operationId": "payments.createOutgoingInvoiceReferenceBooking",
        "description": "**Required scopes:** `payments:write`",
        "summary": "Associate an outgoing invoice with an outgoing credit",
        "tags": [
          "Payments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reference": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "date_of_payment": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "outgoing_invoice_id": {
                    "type": "string",
                    "description": "Invoice needs to be booked & `is_credit = false`"
                  },
                  "outgoing_credit_id": {
                    "type": "string",
                    "description": "Invoice needs to be booked & `is_credit = true`"
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "reference",
                  "date_of_payment",
                  "outgoing_invoice_id",
                  "outgoing_credit_id",
                  "value"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The collection of `OutgoingInvoicePaymentBookingData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OutgoingInvoicePaymentBookingData"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/payments/incoming-invoice": {
      "post": {
        "operationId": "payments.createIncomingInvoicePayment",
        "description": "**Required scopes:** `payments:write`\n\nCreates a payment record and associates it with one or more incoming invoices (documents).",
        "summary": "Add payment for an incoming invoice",
        "tags": [
          "Payments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "enum": [
                      "in",
                      "out"
                    ]
                  },
                  "payment_account_id": {
                    "type": "string"
                  },
                  "reference": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "date_of_payment": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "supplier_name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "iban": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "bic": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "bookings": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "incoming_invoice_id": {
                          "type": "string",
                          "description": "Incoming invoice (document) must exist and not be deleted"
                        },
                        "value": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "incoming_invoice_id",
                        "value"
                      ]
                    }
                  }
                },
                "required": [
                  "type",
                  "payment_account_id",
                  "reference",
                  "date_of_payment",
                  "bookings"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`PaymentData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          },
          "500": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Payment could not be saved"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/payments/incoming-invoice-credit": {
      "post": {
        "operationId": "payments.createIncomingInvoiceReferenceBooking",
        "description": "**Required scopes:** `payments:write`\n\nCreates a reference booking between an incoming invoice (type Invoice) and\nan incoming credit (type Credit).",
        "summary": "Associate an incoming invoice with an incoming credit",
        "tags": [
          "Payments"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reference": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "date_of_payment": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "incoming_invoice_id": {
                    "type": "string",
                    "description": "Incoming invoice of type `Invoice`"
                  },
                  "incoming_credit_id": {
                    "type": "string",
                    "description": "Incoming invoice of type `Credit`"
                  },
                  "value": {
                    "type": "number"
                  }
                },
                "required": [
                  "reference",
                  "date_of_payment",
                  "incoming_invoice_id",
                  "incoming_credit_id",
                  "value"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The collection of `IncomingInvoicePaymentBookingData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IncomingInvoicePaymentBookingData"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/user-group": {
      "get": {
        "operationId": "usergroups.index",
        "description": "**Required scopes:** `user_group:read`",
        "summary": "List all usergroups",
        "tags": [
          "Usergroups & Teams"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`, `is_team`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `users`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `is_team` | `boolean` | eq, ne, neq, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `UsergroupData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/UsergroupData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/user-group/{id}": {
      "get": {
        "operationId": "usergroups.show",
        "description": "**Required scopes:** `user_group:read`",
        "summary": "Retrieve a usergroup",
        "tags": [
          "Usergroups & Teams"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "find_by",
            "in": "query",
            "description": "The field to search by",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "external_id",
                "shortcode"
              ],
              "default": "id"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "description": "Used if `find_by=external_id` by default it will use the integration slug",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "include",
            "in": "query",
            "description": "Available includes are `users`. You can include multiple options by separating them with a comma.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`UsergroupData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsergroupData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/suppliers": {
      "get": {
        "operationId": "suppliers.index",
        "description": "**Required scopes:** `incoming-invoice:read`",
        "summary": "List all suppliers",
        "tags": [
          "Suppliers"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`, `customer_number`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `customer_number` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `vendor_identifier` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `contact_email` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `external_id` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `category.id` | `id<SupplierCategoryData>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `SupplierFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/SupplierFullData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "suppliers.store",
        "description": "**Required scopes:** `incoming-invoice:write`",
        "summary": "Create a supplier",
        "tags": [
          "Suppliers"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "external_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Can be used to add an identifier from an external system, must be unique within integration",
                    "maxLength": 255
                  },
                  "external_origin": {
                    "type": "string",
                    "description": "If not set, integration's slug will be used as default",
                    "maxLength": 255
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "vendor_identifier": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "customer_number": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "contact_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "contact_phone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_phone2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_website": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_iban": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_bic_swift": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_tin": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_notes": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "category_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`SupplierFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierFullData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/suppliers/{id}": {
      "get": {
        "operationId": "suppliers.show",
        "description": "**Required scopes:** `incoming-invoice:read`",
        "summary": "Retrieve a supplier",
        "tags": [
          "Suppliers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`SupplierFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierFullData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "404": {
            "$ref": "#/components/responses/ModelNotFoundException"
          }
        }
      },
      "patch": {
        "operationId": "suppliers.update",
        "description": "**Required scopes:** `incoming-invoice:write`",
        "summary": "Update a supplier",
        "tags": [
          "Suppliers"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 255
                  },
                  "vendor_identifier": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "customer_number": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_street2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_zip": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_town": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "address_state": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "notes": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "contact_name": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_email": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "email",
                    "maxLength": 255
                  },
                  "contact_phone": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_phone2": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_fax": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "contact_website": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_iban": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_bic_swift": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_tin": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  },
                  "accounting_notes": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "category_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`SupplierFullData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SupplierFullData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/settings/countries": {
      "get": {
        "operationId": "settings.countries",
        "description": "**No specific scope required.**",
        "summary": "Retrieve all countries",
        "tags": [
          "Settings"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `name` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `code` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `CountryData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/CountryData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/integration": {
      "get": {
        "operationId": "integration.show",
        "description": "**No specific scope required.**",
        "summary": "Retrieve current integration's information",
        "tags": [
          "Integration"
        ],
        "responses": {
          "200": {
            "description": "`IntegrationData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrationData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "403": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Only integration users can access this endpoint"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/files/{id}": {
      "get": {
        "operationId": "file.show",
        "description": "**No specific scope required.**",
        "summary": "Retrieve a file's data",
        "tags": [
          "Files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The ID of the file to be retrieved.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "`FileData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/files/{id}/download": {
      "get": {
        "operationId": "file.download",
        "description": "**No specific scope required.**",
        "summary": "Download a file",
        "tags": [
          "Files"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The ID of the file to be downloaded.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            },
            "headers": {
              "Content-Disposition": {
                "required": true,
                "schema": {
                  "type": "string"
                },
                "example": "attachment"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/custom-fields": {
      "get": {
        "operationId": "customFields.index",
        "description": "**Required scopes:** `integration`",
        "summary": "List all custom fields",
        "tags": [
          "Custom Fields"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `name`, `slug`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `archived` | `enum: with, only, without` | eq |\n| `title` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `type` | `enum<CustomFieldType>` | eq, ne, neq, in, nin, notin, isnull, isnotnull, notnull |\n| `entity_type` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `CustomFieldData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/CustomFieldData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    },
    "/webhooks": {
      "get": {
        "operationId": "webhooks.index",
        "description": "**Required scopes:** `integration`",
        "summary": "List all registered webhooks",
        "tags": [
          "Webhook Management"
        ],
        "parameters": [
          {
            "name": "sort",
            "in": "query",
            "description": "Available sorts are `url`, `is_active`, `created_at`.<br/>You can sort by multiple options by separating them with a comma. To sort in descending order, use `-` sign in front of the sort, for example: `-title`.",
            "schema": {
              "type": "string"
            },
            "example": "sort=-created_at,title"
          },
          {
            "name": "page[size]",
            "in": "query",
            "description": "The number of results that will be returned per page.",
            "schema": {
              "type": "integer",
              "default": 30
            }
          },
          {
            "name": "page[cursor]",
            "in": "query",
            "description": "The cursor to start the pagination from.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "description": "Allowed filter fields (with allowed operators):\n\n| Field | Type | Operators |\n|------|------|-----------|\n| `url` | `string` | in, nin, notin, eq, ne, neq, contains, like, startswith, endswith, isnull, isnotnull, notnull |\n| `created_at` | `datetime` | eq, ne, neq, lt, lte, le, gt, gte, ge, in, nin, notin, isnull, isnotnull, notnull |\n\nFiltering expression. Accepts either JSON (array/tree of conditions) or a readable string DSL.\n\nYou can check the full syntax at Docs `Filtering` section.\n\nSpecial values:\n- me.id — current authenticated user id (usable on fields of type id). Example: `id eq me.id`\n- now — current date-time. Example: `dueOn lt now`\n- sow/eow — start/end of week. Examples: `dueOn gt sow`, `dueOn lt eow`\n- som/eom — start/end of month. Examples: `dueOn gt som`, `dueOn lt eom`\n- today — special date for today; with eq it expands to the whole day range. Example: `dueOn eq today`\n- today±Nd — relative day offset. Examples: `today-30d`, `today+5d`.",
            "schema": {
              "type": "string"
            },
            "example": "title contains \"Acme\" and (created_at >= \"2024-01-01\" or client.name contains \"Corp\")"
          }
        ],
        "responses": {
          "200": {
            "description": "The cursor paginated collection of `WebhookData`",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "description": "The list of items",
                      "items": {
                        "$ref": "#/components/schemas/WebhookData"
                      }
                    },
                    "links": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Base path for paginator generated URLs."
                        },
                        "per_page": {
                          "type": "integer",
                          "description": "Number of items shown per page."
                        },
                        "next_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "next_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "prev_cursor_url": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "required": [
                        "path",
                        "per_page",
                        "next_cursor",
                        "next_cursor_url",
                        "prev_cursor",
                        "prev_cursor_url"
                      ]
                    }
                  },
                  "required": [
                    "data",
                    "links",
                    "meta"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      },
      "post": {
        "operationId": "webhooks.store",
        "description": "**Required scopes:** `integration`\n\nReturns a `signature_secret_key` field, make sure to save it somewhere safe. It won't be returned again.",
        "summary": "Register a new webhook",
        "tags": [
          "Webhook Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Needs to be unique",
                    "maxLength": 180
                  },
                  "project_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Scope a webhook to a specific project to reduce the number of events sent\n<br/>`task:*` and `comment:*` events have to be project-scoped"
                  },
                  "client_id": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Scope a webhook to a specific client to reduce the number of events sent"
                  },
                  "event": {
                    "description": "Event to subscribe to type `WebhookEvent`",
                    "$ref": "#/components/schemas/WebhookEvent"
                  }
                },
                "required": [
                  "url",
                  "event"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "`WebhookCreateData`",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookCreateData"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          },
          "409": {
            "description": "An error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "description": "Error overview.",
                      "example": "Webhook already exists"
                    }
                  },
                  "required": [
                    "message"
                  ]
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationException"
          }
        }
      }
    },
    "/webhooks/{id}": {
      "delete": {
        "operationId": "webhooks.destroy",
        "description": "**Required scopes:** `integration`",
        "summary": "Delete a webhook",
        "tags": [
          "Webhook Management"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "$ref": "#/components/responses/AuthenticationException"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "http": {
        "type": "http",
        "scheme": "bearer"
      },
      "oauth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://api.kanbert.com/oauth/authorize",
            "tokenUrl": "https://api.kanbert.com/oauth/token",
            "scopes": {
              "integration": "Act as own user, with all permissions",
              "user:read": "Retrieve full user info of others",
              "client:read": "Retrieve full clients info",
              "client:write": "Create & update clients",
              "contact-data:read": "Retrieve contacts & companies",
              "contact-data:write": "Create & update contacts & companies",
              "task-management:read": "Read tasks, phases, milestones, epics",
              "task-management:write": "Create & update tasks, phases, milestones, epics",
              "efforts:read": "Retrieve project efforts",
              "efforts:extended:read": "Retrieve admin & project efforts",
              "user_group:read": "Retrieve user groups",
              "offer:read": "Retrieve offers",
              "outgoing-invoice:read": "Retrieve invoices",
              "outgoing-invoice:upload": "Upload external invoices",
              "payments:read": "Retrieve payment accounts & payments",
              "payments:write": "Create & update payment accounts & payments",
              "incoming-invoice:read": "Retrieve incoming invoices",
              "incoming-invoice:write": "Upload incoming invoices",
              "chart-of-accounts:read": "Retrieve chart of accounts (cost centers)",
              "chart-of-accounts:write": "Create & update chart of account bookings",
              "supplier:read": "Retrieve suppliers",
              "supplier:write": "Create & update suppliers"
            }
          }
        }
      }
    },
    "schemas": {
      "AccountingLineItemType": {
        "type": "string",
        "enum": [
          "unit",
          "category",
          "page_break"
        ],
        "title": "AccountingLineItemType"
      },
      "BusinessFieldData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "BusinessFieldData"
      },
      "ChartOfAccountData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CostCenterType"
              },
              {
                "type": "null"
              }
            ]
          },
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "priority": {
            "type": [
              "string",
              "null"
            ]
          },
          "budgets": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "number"
            }
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "positions": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PositionData"
                }
              },
              {
                "type": "object"
              }
            ]
          }
        },
        "required": [
          "id",
          "type",
          "code",
          "title",
          "description",
          "priority",
          "budgets",
          "start_date",
          "end_date",
          "created_at",
          "updated_at"
        ],
        "title": "ChartOfAccountData"
      },
      "ChartOfAccountsBookingData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "number"
          },
          "client": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientData"
              },
              {
                "type": "null"
              }
            ]
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "chart_of_account": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ChartOfAccountData"
              },
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          },
          "position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PositionData"
              },
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          },
          "incoming_invoice": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ChartOfAccountsBookingDocumentData"
              },
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ]
          },
          "outgoing_invoice": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutgoingInvoiceReferenceData"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "title",
          "value",
          "client",
          "project",
          "chart_of_account",
          "position",
          "outgoing_invoice",
          "created_at",
          "updated_at"
        ],
        "title": "ChartOfAccountsBookingData"
      },
      "ChartOfAccountsBookingDocumentData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "type": [
              "string",
              "null"
            ]
          },
          "invoice_number": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "title",
          "type",
          "invoice_number"
        ],
        "title": "ChartOfAccountsBookingDocumentData"
      },
      "ClientData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "name": {
            "type": "string"
          },
          "shortcode": {
            "type": [
              "string",
              "null"
            ]
          },
          "primary_contact": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "origin_space": {
            "anyOf": [
              {
                "description": "Shared space which the client is shared from, if `null` client is not shared",
                "$ref": "#/components/schemas/SpaceData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "name",
          "shortcode",
          "primary_contact",
          "origin_space"
        ],
        "title": "ClientData"
      },
      "ClientFullData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "name": {
            "type": "string"
          },
          "shortcode": {
            "type": [
              "string",
              "null"
            ]
          },
          "segment": {
            "default": "B",
            "$ref": "#/components/schemas/ClientSegment"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "primary_contact": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "projects": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectData"
            }
          },
          "origin_space": {
            "anyOf": [
              {
                "description": "Shared space which the client is shared from, if `null` client is not shared",
                "$ref": "#/components/schemas/SpaceData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "name",
          "shortcode",
          "segment",
          "updated_at",
          "created_at",
          "primary_contact",
          "origin_space"
        ],
        "title": "ClientFullData"
      },
      "ClientSegment": {
        "type": "string",
        "enum": [
          "A",
          "B",
          "C"
        ],
        "title": "ClientSegment"
      },
      "CommentData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "parent_comment_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "parent_comment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CommentData"
              },
              {
                "type": "null"
              }
            ]
          },
          "task": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskData"
              },
              {
                "type": "null"
              }
            ]
          },
          "sub_comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CommentData"
            }
          },
          "author": {
            "$ref": "#/components/schemas/UserData"
          },
          "comment": {
            "type": [
              "string",
              "null"
            ]
          },
          "attachements": {
            "type": "array",
            "default": [],
            "items": {
              "$ref": "#/components/schemas/FileData"
            }
          },
          "is_public": {
            "type": "boolean",
            "description": "If false, the task is only visible to the project team - not guest users"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "parent_comment_id",
          "sub_comments",
          "author",
          "comment",
          "attachements",
          "is_public",
          "created_at",
          "updated_at"
        ],
        "title": "CommentData"
      },
      "CompanyData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "vendor_identifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "company_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "type": [
              "string",
              "null"
            ]
          },
          "tax_uid": {
            "type": [
              "string",
              "null"
            ]
          },
          "taxation_enabled": {
            "type": "boolean",
            "description": "Can be used to indicate reverse charge ie"
          },
          "iban": {
            "type": [
              "string",
              "null"
            ]
          },
          "bic": {
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "type": [
              "string",
              "null"
            ]
          },
          "email_general": {
            "type": [
              "string",
              "null"
            ]
          },
          "phone": {
            "type": [
              "string",
              "null"
            ]
          },
          "fax": {
            "type": [
              "string",
              "null"
            ]
          },
          "homepage": {
            "type": [
              "string",
              "null"
            ]
          },
          "invoices_by_post": {
            "type": "boolean",
            "default": false
          },
          "invoices_by_email": {
            "type": "boolean",
            "default": false
          },
          "business_field": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BusinessFieldData"
              },
              {
                "type": "null"
              }
            ]
          },
          "company_size": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TagData"
              },
              {
                "type": "null"
              }
            ]
          },
          "company_revenue": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TagData"
              },
              {
                "type": "null"
              }
            ]
          },
          "person_attention_to": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_title": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_street": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_house": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_street2": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_town": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_invoice_country": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CountryData"
              },
              {
                "type": "null"
              }
            ]
          },
          "address_invoice_is_delivery": {
            "type": "boolean"
          },
          "delivery_person_attention_to": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_title": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_street": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_house": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_street2": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_town": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_delivery_country": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CountryData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientData"
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TagData"
            }
          },
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ContactData"
            }
          },
          "custom_fields": {
            "type": "object",
            "description": "The key is the field name for your custom field, value type depends on the field type",
            "examples": [
              "['custom_field_1' => 'value', 'custom_field_2' => true]"
            ],
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "contact_company": {
            "description": "Added included via relationship (contact -> companies or company -> contacts)",
            "$ref": "#/components/schemas/ContactCompanyPivotData"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "vendor_identifier",
          "company_name",
          "locale",
          "tax_uid",
          "taxation_enabled",
          "iban",
          "bic",
          "email",
          "email_general",
          "phone",
          "fax",
          "homepage",
          "invoices_by_post",
          "invoices_by_email",
          "business_field",
          "company_size",
          "company_revenue",
          "person_attention_to",
          "address_invoice_title",
          "address_invoice_street",
          "address_invoice_house",
          "address_invoice_street2",
          "address_invoice_zip",
          "address_invoice_state",
          "address_invoice_town",
          "address_invoice_country",
          "address_invoice_is_delivery",
          "delivery_person_attention_to",
          "address_delivery_title",
          "address_delivery_street",
          "address_delivery_house",
          "address_delivery_street2",
          "address_delivery_zip",
          "address_delivery_state",
          "address_delivery_town",
          "address_delivery_country",
          "client",
          "custom_fields",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "CompanyData"
      },
      "ContactCompanyPivotData": {
        "type": "object",
        "properties": {
          "position": {
            "type": "string"
          }
        },
        "required": [
          "position"
        ],
        "title": "ContactCompanyPivotData"
      },
      "ContactData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "gender": {
            "type": [
              "string",
              "null"
            ]
          },
          "first_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "last_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "title_suffix": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "type": [
              "string",
              "null"
            ]
          },
          "birthday": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "fax": {
            "type": [
              "string",
              "null"
            ]
          },
          "telephone": {
            "type": [
              "string",
              "null"
            ]
          },
          "telephone_private": {
            "type": [
              "string",
              "null"
            ]
          },
          "mobile": {
            "type": [
              "string",
              "null"
            ]
          },
          "mobile_private": {
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "type": [
              "string",
              "null"
            ],
            "format": "email"
          },
          "email_private": {
            "type": [
              "string",
              "null"
            ],
            "format": "email"
          },
          "address_street": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_house": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_street2": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_town": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_country": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CountryData"
              },
              {
                "type": "null"
              }
            ]
          },
          "owner": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientData"
              },
              {
                "type": "null"
              }
            ]
          },
          "companies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompanyData"
            }
          },
          "custom_fields": {
            "type": "object",
            "description": "The key is the field name for your custom field, value type depends on the field type",
            "examples": [
              "['custom_field_1' => 'value', 'custom_field_2' => true]"
            ],
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "contact_company": {
            "description": "Added included via relationship (contact -> companies or company -> contacts)",
            "$ref": "#/components/schemas/ContactCompanyPivotData"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "gender",
          "first_name",
          "last_name",
          "title",
          "title_suffix",
          "position",
          "locale",
          "birthday",
          "fax",
          "telephone",
          "telephone_private",
          "mobile",
          "mobile_private",
          "email",
          "email_private",
          "address_street",
          "address_house",
          "address_street2",
          "address_zip",
          "address_state",
          "address_town",
          "address_country",
          "owner",
          "client",
          "custom_fields",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "ContactData"
      },
      "CostCenterType": {
        "type": "string",
        "enum": [
          "accounts",
          "discount",
          "supplier_discount"
        ],
        "title": "CostCenterType"
      },
      "CountryData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "format": "ISO 3166-1 alpha-2"
          }
        },
        "required": [
          "id",
          "name",
          "code"
        ],
        "title": "CountryData"
      },
      "CustomFieldData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "field_name": {
            "type": "string",
            "description": "The field name/slug defined for your custom field"
          },
          "type": {
            "$ref": "#/components/schemas/CustomFieldType"
          },
          "entity_type": {
            "$ref": "#/components/schemas/CustomFieldEntityType"
          },
          "default_value": {
            "description": "Depending on the field type, this can be a string, int, bool or null",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_filterable": {
            "type": "boolean",
            "description": "If true, this field can be used for filtering in the UI"
          },
          "is_default": {
            "type": "boolean",
            "description": "If true, this field is automatically added to all projects"
          },
          "show_in_list": {
            "type": "boolean",
            "description": "If true, this field appears as a column in list views"
          },
          "is_searchable": {
            "type": "boolean",
            "description": "If true, this field's values are included in free-text search"
          },
          "show_on_dashboard": {
            "type": "boolean",
            "description": "If true, this field is shown on the project dashboard"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "title",
          "field_name",
          "type",
          "entity_type",
          "default_value",
          "is_filterable",
          "is_default",
          "show_in_list",
          "is_searchable",
          "show_on_dashboard",
          "created_at",
          "deleted_at"
        ],
        "title": "CustomFieldData"
      },
      "CustomFieldEntityType": {
        "type": "string",
        "enum": [
          "user",
          "contact",
          "company",
          "project"
        ],
        "title": "CustomFieldEntityType"
      },
      "CustomFieldType": {
        "type": "string",
        "enum": [
          "input",
          "number",
          "checkbox",
          "select",
          "date",
          "link",
          "textarea"
        ],
        "title": "CustomFieldType"
      },
      "DiscountData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "discount_factor": {
            "type": [
              "number",
              "null"
            ],
            "description": "Discount in percent"
          },
          "discount_absolute": {
            "type": [
              "number",
              "null"
            ],
            "description": "Is not calculated with invoices partial_factor in mind"
          },
          "from_parent": {
            "type": "boolean",
            "description": "If true, the discount was set in invoice master"
          },
          "is_payment_discount": {
            "type": "boolean",
            "description": "If true this discount was granted due to payment discount rules"
          },
          "order": {
            "type": "integer",
            "description": "The order how discounts are applied"
          }
        },
        "required": [
          "id",
          "title",
          "discount_factor",
          "discount_absolute",
          "from_parent",
          "is_payment_discount",
          "order"
        ],
        "title": "DiscountData"
      },
      "EffortAdminCategoryData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "EffortAdminCategoryData"
      },
      "EffortData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/UserData"
          },
          "comments": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "hours": {
            "type": "number"
          },
          "effort_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EffortTypeData"
              },
              {
                "type": "null"
              }
            ]
          },
          "task": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskData"
              },
              {
                "type": "null"
              }
            ]
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "epic": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EpicData"
              },
              {
                "type": "null"
              }
            ]
          },
          "phase": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PhaseData"
              },
              {
                "type": "null"
              }
            ]
          },
          "milestone": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MilestoneData"
              },
              {
                "type": "null"
              }
            ]
          },
          "admin_category": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EffortAdminCategoryData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "user",
          "comments",
          "type",
          "date",
          "hours",
          "effort_type",
          "task",
          "project",
          "epic",
          "phase",
          "milestone",
          "admin_category"
        ],
        "title": "EffortData"
      },
      "EffortTypeData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "EffortTypeData"
      },
      "EpicData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "po_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "title",
          "po_number"
        ],
        "title": "EpicData"
      },
      "ExternalCostData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "indent": {
            "type": "integer"
          },
          "order": {
            "type": "integer"
          },
          "is_credit": {
            "type": "boolean",
            "description": "if `true` this cost is a credit"
          },
          "is_optional": {
            "type": "boolean"
          },
          "price": {
            "type": "number"
          },
          "amount": {
            "type": "number"
          },
          "total": {
            "type": "number"
          },
          "supplier": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SupplierData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientData"
              },
              {
                "type": "null"
              }
            ]
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "payment_partial_type": {
            "$ref": "#/components/schemas/OfferUnitIntervalType"
          },
          "payment_partial_interval": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Interval if payment partial type is `monthly` or `yearly\n| Type | Interval | Description |\n| ---- | -------- | ----------- |\n| `once` | `any` | Once per offer |\n| `monthly` | `1` | Every month in performance range |\n| `monthly` | `3` | Every 3 months in performance range |\n| `monthly` | `6` | Every 6 monthsin performance range  |\n| `yearly` | `1` | Every year in performance range  |\n| `yearly` | `3` | Every 3 years in performance range |\n| `yearly` | `6` | Every 6 years in performance range |"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "title",
          "type",
          "indent",
          "order",
          "is_credit",
          "is_optional",
          "price",
          "amount",
          "total",
          "supplier",
          "client",
          "project",
          "status",
          "payment_partial_type",
          "payment_partial_interval",
          "created_at",
          "updated_at"
        ],
        "title": "ExternalCostData"
      },
      "FileData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          },
          "mime_type": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "description": "File size in bytes"
          },
          "entity_id": {
            "type": "string",
            "description": "ID of the entity that the file belongs to"
          },
          "entity_type": {
            "type": "string",
            "description": "Type of the entity that the file belongs to"
          },
          "created_at": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "file_name",
          "mime_type",
          "size",
          "entity_id",
          "entity_type",
          "created_at"
        ],
        "title": "FileData"
      },
      "IncomingInvoiceBookingData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "number"
          },
          "chart_of_account_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "position_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "project_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "client_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "chart_of_account": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ChartOfAccountData"
              },
              {
                "type": "null"
              }
            ]
          },
          "outgoing_invoice": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OutgoingInvoiceReferenceData"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "title",
          "value",
          "chart_of_account_id",
          "position_id",
          "project_id",
          "client_id",
          "chart_of_account",
          "outgoing_invoice",
          "created_at",
          "updated_at"
        ],
        "title": "IncomingInvoiceBookingData"
      },
      "IncomingInvoiceData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/IncomingInvoiceType"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "payment_status": {
            "type": "string"
          },
          "invoice_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "sum_net": {
            "type": "number"
          },
          "sum_tax": {
            "type": "number"
          },
          "sum_gross": {
            "type": "number"
          },
          "vats": {
            "type": "array",
            "description": "VAT breakdown",
            "items": {
              "$ref": "#/components/schemas/IncomingInvoiceVatData"
            }
          },
          "supplier": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SupplierData"
              },
              {
                "type": "null"
              }
            ]
          },
          "payment_account": {
            "anyOf": [
              {
                "description": "Assigned payment account",
                "$ref": "#/components/schemas/IncomingInvoicePaymentAccountData"
              },
              {
                "type": "null"
              }
            ]
          },
          "date_of_invoice": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "date_of_start": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "date_of_end": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "editor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "bookings": {
            "type": "array",
            "description": "Chart of account bookings",
            "items": {
              "$ref": "#/components/schemas/IncomingInvoiceBookingData"
            }
          },
          "payments": {
            "type": "array",
            "description": "Payments",
            "items": {
              "$ref": "#/components/schemas/IncomingInvoicePaymentData"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "type",
          "title",
          "status",
          "payment_status",
          "invoice_number",
          "notes",
          "sum_net",
          "sum_tax",
          "sum_gross",
          "vats",
          "supplier",
          "payment_account",
          "date_of_invoice",
          "due_date",
          "date_of_start",
          "date_of_end",
          "editor",
          "created_at",
          "updated_at"
        ],
        "title": "IncomingInvoiceData"
      },
      "IncomingInvoicePaymentAccountData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "IncomingInvoicePaymentAccountData"
      },
      "IncomingInvoicePaymentBookingData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "payment_type": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "number"
          },
          "incoming_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "reference_incoming_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "payment_type",
          "title",
          "value",
          "incoming_invoice_id",
          "reference_incoming_invoice_id",
          "updated_at",
          "created_at",
          "deleted_at"
        ],
        "title": "IncomingInvoicePaymentBookingData"
      },
      "IncomingInvoicePaymentData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "payment_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "number"
          },
          "payment_account_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "account": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IncomingInvoicePaymentAccountData"
              },
              {
                "type": "null"
              }
            ]
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "payment_type",
          "title",
          "value",
          "payment_account_id",
          "account",
          "date",
          "created_at",
          "updated_at"
        ],
        "title": "IncomingInvoicePaymentData"
      },
      "IncomingInvoiceType": {
        "type": "string",
        "description": "| |\n|---|\n| `Invoice` <br/> Standard incoming invoice |\n| `Credit` <br/> Credit note |",
        "enum": [
          "Invoice",
          "Credit"
        ],
        "title": "IncomingInvoiceType"
      },
      "IncomingInvoiceVatData": {
        "type": "object",
        "properties": {
          "vat": {
            "type": "number",
            "description": "VAT rate in percent",
            "examples": [
              20
            ]
          },
          "value": {
            "type": "number",
            "description": "Calculated VAT amount"
          }
        },
        "required": [
          "vat",
          "value"
        ],
        "title": "IncomingInvoiceVatData"
      },
      "IntegrationData": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "granted_scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "slug",
          "granted_scopes"
        ],
        "title": "IntegrationData"
      },
      "MetricData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "title_plural": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "title_plural"
        ],
        "title": "MetricData"
      },
      "MilestoneData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "po_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "group": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PhaseGroupData"
              },
              {
                "type": "null"
              }
            ]
          },
          "dependency_phase_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "dependency_milestone_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "title",
          "po_number",
          "group",
          "dependency_phase_id",
          "dependency_milestone_id",
          "date",
          "created_at"
        ],
        "title": "MilestoneData"
      },
      "OfferData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "offer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/OfferStatus"
          },
          "approvals_needed": {
            "type": [
              "integer",
              "null"
            ]
          },
          "is_direct_approved": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Offer skipped internal approval process - can also be true if offer is still `open`, due to reopening"
          },
          "date_of_offer": {
            "type": "string",
            "format": "date-time"
          },
          "date_of_expiry": {
            "type": "string",
            "format": "date-time"
          },
          "performance_range_start": {
            "type": "string",
            "format": "date-time"
          },
          "performance_range_end": {
            "type": "string",
            "format": "date-time"
          },
          "locale": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "address_changed": {
            "type": "boolean",
            "description": "If `true` the user manually overwrote the companies address"
          },
          "company": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompanyData"
              },
              {
                "type": "null"
              }
            ]
          },
          "editor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "$ref": "#/components/schemas/ClientData"
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "taxation_enabled": {
            "type": "boolean",
            "description": "Can be used to indicate reverse charge ie"
          },
          "sum_net": {
            "type": "number"
          },
          "sum_tax": {
            "type": "number"
          },
          "sum_gross": {
            "type": "number"
          },
          "sum_external_costs": {
            "type": "number"
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfferLineItemData"
            }
          },
          "external_costs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExternalCostData"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "offer_number",
          "title",
          "status",
          "approvals_needed",
          "is_direct_approved",
          "date_of_offer",
          "date_of_expiry",
          "performance_range_start",
          "performance_range_end",
          "locale",
          "currency",
          "address",
          "address_changed",
          "company",
          "editor",
          "client",
          "project",
          "taxation_enabled",
          "sum_net",
          "sum_tax",
          "sum_gross",
          "sum_external_costs",
          "line_items",
          "external_costs",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "OfferData"
      },
      "OfferLineItemData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AccountingLineItemType"
          },
          "indent": {
            "type": "integer"
          },
          "order": {
            "type": "integer"
          },
          "is_optional": {
            "type": "boolean"
          },
          "price": {
            "type": "number"
          },
          "amount": {
            "type": "number"
          },
          "total_net_base": {
            "type": "number",
            "description": "Excluding all discounts\n<br/>Does not reflect total value over performance range"
          },
          "total_net": {
            "type": "number",
            "description": "Including unit discount (not offer discounts)\n<br/>Does not reflect total value over performance range"
          },
          "total_gross_base": {
            "type": "number",
            "description": "Excluding all discounts\n<br/>Does not reflect total value over performance range"
          },
          "tax_factor": {
            "type": "number"
          },
          "total_gross": {
            "type": "number",
            "description": "Including unit discount (not offer discounts)\n<br/>Does not reflect total value over performance range"
          },
          "metric": {
            "$ref": "#/components/schemas/MetricData"
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "exclude_from_discount": {
            "type": "boolean",
            "description": "If true, the unit will be excluded from offer-wide discounts",
            "default": false
          },
          "discount_factor": {
            "type": [
              "number",
              "null"
            ]
          },
          "discount_absolute": {
            "type": [
              "number",
              "null"
            ]
          },
          "discount_bound": {
            "type": "boolean",
            "description": "If true, the amount will multiply discount absolute",
            "default": false
          },
          "purchase_price": {
            "type": "number",
            "default": 0
          },
          "purchase_amount": {
            "type": "number",
            "default": 1
          },
          "purchase_total": {
            "type": "number",
            "default": 0
          },
          "purchase_price_bound": {
            "type": "boolean",
            "description": "If true, `purchase_amount` will be in sync with `amount`",
            "default": false
          },
          "description": {
            "type": "string"
          },
          "payment_partial_type": {
            "$ref": "#/components/schemas/OfferUnitIntervalType"
          },
          "payment_partial_interval": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Interval if payment partial type is `monthly` or `yearly\n| Type | Interval | Description |\n| ---- | -------- | ----------- |\n| `once` | `any` | Once per offer |\n| `monthly` | `1` | Every month in performance range |\n| `monthly` | `3` | Every 3 months in performance range |\n| `monthly` | `6` | Every 6 monthsin performance range  |\n| `yearly` | `1` | Every year in performance range  |\n| `yearly` | `3` | Every 3 years in performance range |\n| `yearly` | `6` | Every 6 years in performance range |"
          }
        },
        "required": [
          "id",
          "title",
          "type",
          "indent",
          "order",
          "is_optional",
          "price",
          "amount",
          "total_net_base",
          "total_net",
          "total_gross_base",
          "tax_factor",
          "total_gross",
          "metric",
          "project",
          "exclude_from_discount",
          "discount_factor",
          "discount_absolute",
          "discount_bound",
          "purchase_price",
          "purchase_amount",
          "purchase_total",
          "purchase_price_bound",
          "description",
          "payment_partial_type",
          "payment_partial_interval"
        ],
        "title": "OfferLineItemData"
      },
      "OfferStatus": {
        "type": "string",
        "description": "| |\n|---|\n| `open` <br/> Offer in draft |\n| `approval_pending` <br/> Offer was submitted for internal approval |\n| `approval_approved` <br/> Offer was internally approved |\n| `transformed` <br/> Customer approved offer |\n| `cancelled` <br/> Customer declined offer |",
        "enum": [
          "open",
          "approval_pending",
          "approval_approved",
          "transformed",
          "cancelled"
        ],
        "title": "OfferStatus"
      },
      "OfferUnitIntervalType": {
        "type": "string",
        "enum": [
          "once",
          "monthly",
          "yearly"
        ],
        "title": "OfferUnitIntervalType"
      },
      "OutgoingInvoiceData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ]
          },
          "master_invoice_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "OutgoingInvoiceMasterData",
            "description": "If invoice is part of a master invoice plan"
          },
          "invoice_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/OutgoingInvoiceStatus"
          },
          "payment_status": {
            "$ref": "#/components/schemas/OutgoingInvoicePaymentStatus"
          },
          "is_credit": {
            "type": "boolean",
            "default": false
          },
          "date_of_invoice": {
            "type": "string",
            "format": "date-time"
          },
          "payment_due_date": {
            "type": "string",
            "format": "date-time"
          },
          "payment_due_date_org": {
            "type": "string",
            "format": "date-time",
            "description": "Is the payment due date originally set"
          },
          "performance_range_start": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "performance_range_end": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "po_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "reference": {
            "type": [
              "string",
              "null"
            ]
          },
          "locale": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "address_changed": {
            "type": "boolean",
            "description": "If `true` the user manually overwrote the companies address"
          },
          "company": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompanyData"
              },
              {
                "type": "null"
              }
            ]
          },
          "editor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "$ref": "#/components/schemas/ClientData"
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "taxation_enabled": {
            "type": "boolean",
            "description": "Can be used to indicate reverse charge ie"
          },
          "sum_net": {
            "type": "number"
          },
          "sum_tax": {
            "type": "number"
          },
          "sum_gross": {
            "type": "number"
          },
          "sum_external_costs": {
            "type": "number"
          },
          "partial_indent": {
            "type": [
              "string",
              "null"
            ],
            "description": "Indicator for partial invoices\n`<currentInvoice>/<numberOfInvoices>`",
            "examples": [
              "1/2"
            ]
          },
          "partial_factor": {
            "type": [
              "number",
              "null"
            ],
            "description": "Factor in percentage for partial invoices"
          },
          "payment_discount_due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "payment_discount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Factor in percentage"
          },
          "discounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscountData"
            }
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OutgoingInvoiceLineItemData"
            }
          },
          "external_costs": {
            "type": "array",
            "description": "For partial invoices external costs will be empty - these are part of the invoice master plan",
            "items": {
              "$ref": "#/components/schemas/ExternalCostData"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "master_invoice_id",
          "invoice_number",
          "title",
          "status",
          "payment_status",
          "is_credit",
          "date_of_invoice",
          "payment_due_date",
          "payment_due_date_org",
          "performance_range_start",
          "performance_range_end",
          "po_number",
          "reference",
          "locale",
          "currency",
          "address",
          "address_changed",
          "company",
          "editor",
          "client",
          "project",
          "taxation_enabled",
          "sum_net",
          "sum_tax",
          "sum_gross",
          "sum_external_costs",
          "partial_indent",
          "partial_factor",
          "payment_discount_due_date",
          "payment_discount",
          "discounts",
          "line_items",
          "external_costs",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "OutgoingInvoiceData"
      },
      "OutgoingInvoiceLineItemData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/AccountingLineItemType"
          },
          "indent": {
            "type": "integer"
          },
          "order": {
            "type": "integer"
          },
          "price": {
            "type": "number",
            "description": "Is always the full price of the unit (without `partial_factor`)\nSee `partial_factor` if element is part of an partial invoice"
          },
          "amount": {
            "type": "number"
          },
          "total_net_base": {
            "type": "number",
            "description": "Excluding `partial_factor` and all discounts\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "total_net_without_discount": {
            "type": "number",
            "description": "Including `partial_factor`, excluding all discounts\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "total_net": {
            "type": "number",
            "description": "Including unit discount (not invoice discounts) and `partial_factor`\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "total_gross_base": {
            "type": "number",
            "description": "Excluding `partial_factor` and all discounts\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "total_gross_without_discount": {
            "type": "number",
            "description": "Including `partial_factor`, excluding all discounts\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "total_gross": {
            "type": "number",
            "description": "Including unit discount (not invoice discounts) and `partial_factor`\n<br/>See `partial_factor` if element is part of an partial invoice"
          },
          "tax_factor": {
            "type": "number"
          },
          "metric": {
            "$ref": "#/components/schemas/MetricData"
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "partial_factor": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Value in percent. Describes the part of the unit that is included in the invoice"
          },
          "exclude_from_discount": {
            "type": "boolean",
            "description": "If true, the unit will be excluded from offer-wide discounts",
            "default": false
          },
          "discount_factor": {
            "type": [
              "number",
              "null"
            ]
          },
          "discount_absolute": {
            "type": [
              "number",
              "null"
            ]
          },
          "discount_bound": {
            "type": "boolean",
            "description": "If true, the amount will multiply discount absolute",
            "default": false
          },
          "purchase_price": {
            "type": "number",
            "default": 0
          },
          "purchase_amount": {
            "type": "number",
            "default": 1
          },
          "purchase_total_base": {
            "type": "number",
            "description": "Excluding `partial_factor` and all discounts\n<br/>See `partial_factor` if element is part of an partial invoice",
            "default": 0
          },
          "purchase_total": {
            "type": "number",
            "description": "Including `partial_factor`, excluding all discounts\n<br/>See `partial_factor` if element is part of an partial invoice",
            "default": 0
          },
          "purchase_price_bound": {
            "type": "boolean",
            "description": "If true, `purchase_amount` will be in sync with `amount`",
            "default": false
          },
          "description": {
            "type": "string"
          },
          "payment_partial_type": {
            "$ref": "#/components/schemas/OfferUnitIntervalType"
          },
          "payment_partial_interval": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Interval if payment partial type is `monthly` or `yearly\n| Type | Interval | Description |\n| ---- | -------- | ----------- |\n| `once` | `any` | Once per offer |\n| `monthly` | `1` | Every month in performance range |\n| `monthly` | `3` | Every 3 months in performance range |\n| `monthly` | `6` | Every 6 monthsin performance range  |\n| `yearly` | `1` | Every year in performance range  |\n| `yearly` | `3` | Every 3 years in performance range |\n| `yearly` | `6` | Every 6 years in performance range |"
          }
        },
        "required": [
          "id",
          "title",
          "type",
          "indent",
          "order",
          "price",
          "amount",
          "total_net_base",
          "total_net_without_discount",
          "total_net",
          "total_gross_base",
          "total_gross_without_discount",
          "total_gross",
          "tax_factor",
          "metric",
          "project",
          "partial_factor",
          "exclude_from_discount",
          "discount_factor",
          "discount_absolute",
          "discount_bound",
          "purchase_price",
          "purchase_amount",
          "purchase_total_base",
          "purchase_total",
          "purchase_price_bound",
          "description",
          "payment_partial_type",
          "payment_partial_interval"
        ],
        "title": "OutgoingInvoiceLineItemData"
      },
      "OutgoingInvoiceMasterData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/OutgoingInvoiceMasterType"
          },
          "performance_range_start": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "performance_range_end": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "locale": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "address_changed": {
            "type": "boolean",
            "description": "If `true` the user manually overwrote the companies address"
          },
          "company": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CompanyData"
              },
              {
                "type": "null"
              }
            ]
          },
          "editor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "client": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientData"
              },
              {
                "type": "null"
              }
            ]
          },
          "project": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectData"
              },
              {
                "type": "null"
              }
            ]
          },
          "taxation_enabled": {
            "type": "boolean",
            "description": "Can be used to indicate reverse charge ie"
          },
          "sum_net": {
            "type": "number"
          },
          "sum_tax": {
            "type": "number"
          },
          "sum_gross": {
            "type": "number"
          },
          "sum_external_costs": {
            "type": "number"
          },
          "payment_discount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Factor in percentage"
          },
          "discounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DiscountData"
            }
          },
          "line_items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OutgoingInvoiceLineItemData"
            }
          },
          "external_costs": {
            "type": "array",
            "description": "For partial invoices external costs will be empty - these are part of the invoice master plan",
            "items": {
              "$ref": "#/components/schemas/ExternalCostData"
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "title",
          "type",
          "performance_range_start",
          "performance_range_end",
          "locale",
          "currency",
          "address",
          "address_changed",
          "company",
          "editor",
          "client",
          "project",
          "taxation_enabled",
          "sum_net",
          "sum_tax",
          "sum_gross",
          "sum_external_costs",
          "payment_discount",
          "discounts",
          "line_items",
          "external_costs",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "OutgoingInvoiceMasterData"
      },
      "OutgoingInvoiceMasterType": {
        "type": "string",
        "description": "| |\n|---|\n| `once` <br/> If type is once, then the master is a partial plan |\n| `recurring1` <br/> Recurring every month |\n| `recurring3` <br/> Recurring every 3 months |\n| `recurring6` <br/> Recurring every 6 months |\n| `recurring12` <br/> Recurring every 12 months |",
        "enum": [
          "once",
          "recurring1",
          "recurring3",
          "recurring6",
          "recurring12"
        ],
        "title": "OutgoingInvoiceMasterType"
      },
      "OutgoingInvoicePaymentBookingData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "payment_type": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "outgoing_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "reference_outgoing_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "payment_type",
          "reference",
          "value",
          "outgoing_invoice_id",
          "reference_outgoing_invoice_id",
          "updated_at",
          "created_at",
          "deleted_at"
        ],
        "title": "OutgoingInvoicePaymentBookingData"
      },
      "OutgoingInvoicePaymentStatus": {
        "type": "string",
        "enum": [
          "open",
          "partly_paid",
          "paid",
          "cancelled"
        ],
        "title": "OutgoingInvoicePaymentStatus"
      },
      "OutgoingInvoiceReferenceData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "invoice_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "title": {
            "type": "string"
          },
          "is_credit": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "invoice_number",
          "title",
          "is_credit"
        ],
        "title": "OutgoingInvoiceReferenceData"
      },
      "OutgoingInvoiceStatus": {
        "type": "string",
        "description": "| |\n|---|\n| `estimate` <br/> Invoice is meant as estimate |\n| `open` <br/> Invoice in draft |\n| `bookable` <br/> Invoice is ready to be booked |\n| `booked` <br/> Invoice was booked |",
        "enum": [
          "estimate",
          "open",
          "bookable",
          "booked"
        ],
        "title": "OutgoingInvoiceStatus"
      },
      "PaymentAccountData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "is_default": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          },
          "organization": {
            "type": [
              "string",
              "null"
            ]
          },
          "identifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "$ref": "#/components/schemas/PaymentAccountType"
          },
          "owner": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "is_default",
          "title",
          "organization",
          "identifier",
          "type",
          "owner",
          "updated_at",
          "created_at",
          "deleted_at"
        ],
        "title": "PaymentAccountData"
      },
      "PaymentAccountType": {
        "type": "string",
        "enum": [
          "account",
          "employee_expenses"
        ],
        "title": "PaymentAccountType"
      },
      "PaymentBookingData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "payment_type": {
            "type": "string"
          },
          "reference": {
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "outgoing_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "incoming_invoice_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "payment_type",
          "reference",
          "value",
          "outgoing_invoice_id",
          "incoming_invoice_id",
          "updated_at",
          "created_at",
          "deleted_at"
        ],
        "title": "PaymentBookingData"
      },
      "PaymentData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "date_of_payment": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "reference": {
            "type": "string"
          },
          "iban": {
            "type": [
              "string",
              "null"
            ]
          },
          "bic": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": "number"
          },
          "payment_account": {
            "$ref": "#/components/schemas/PaymentAccountData"
          },
          "bookings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentBookingData"
            }
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "type",
          "date_of_payment",
          "reference",
          "iban",
          "bic",
          "value",
          "payment_account",
          "bookings",
          "updated_at",
          "created_at",
          "deleted_at"
        ],
        "title": "PaymentData"
      },
      "PhaseData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "po_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "group": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PhaseGroupData"
              },
              {
                "type": "null"
              }
            ]
          },
          "type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PhaseTypeData"
              },
              {
                "type": "null"
              }
            ]
          },
          "dependency_phase_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "dependency_milestone_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "title",
          "po_number",
          "group",
          "type",
          "dependency_phase_id",
          "dependency_milestone_id",
          "start_date",
          "end_date",
          "created_at"
        ],
        "title": "PhaseData"
      },
      "PhaseGroupData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "PhaseGroupData"
      },
      "PhaseTypeData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "color": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "color"
        ],
        "title": "PhaseTypeData"
      },
      "PositionData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "plan": {
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "number"
            }
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "title",
          "plan",
          "start_date",
          "end_date",
          "created_at",
          "updated_at"
        ],
        "title": "PositionData"
      },
      "ProjectData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the project from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "shortcode": {
            "type": "string"
          },
          "po_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "project_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectTypeData"
              },
              {
                "type": "null"
              }
            ]
          },
          "project_group": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ProjectGroupData"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": "string"
          },
          "is_acquisition": {
            "type": "boolean"
          },
          "is_private": {
            "type": "boolean"
          },
          "start_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "end_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "client": {
            "$ref": "#/components/schemas/ClientData"
          },
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectTagData"
            }
          },
          "portfolios": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProjectPortfolioData"
            }
          },
          "custom_fields": {
            "type": "object",
            "description": "The key is the field name for your custom field, value type depends on the field type",
            "examples": [
              "['custom_field_1' => 'value', 'custom_field_2' => true]"
            ],
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "origin_space": {
            "anyOf": [
              {
                "description": "Shared space which the project is shared from, if `null` project is not shared",
                "$ref": "#/components/schemas/SpaceData"
              },
              {
                "type": "null"
              }
            ]
          },
          "team": {
            "type": "array",
            "description": "Project team",
            "items": {
              "$ref": "#/components/schemas/TeamMemberData"
            }
          },
          "guests": {
            "type": "array",
            "description": "Project guests",
            "items": {
              "$ref": "#/components/schemas/TeamMemberData"
            }
          },
          "computed_fields": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "title",
          "description",
          "shortcode",
          "po_number",
          "project_type",
          "project_group",
          "status",
          "is_acquisition",
          "is_private",
          "start_date",
          "end_date",
          "client",
          "custom_fields",
          "origin_space"
        ],
        "title": "ProjectData"
      },
      "ProjectGroupData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "ProjectGroupData"
      },
      "ProjectPortfolioData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "projects_assigned": {
            "type": "array",
            "description": "\nProjects directly assigned to this portfolio",
            "items": {
              "$ref": "#/components/schemas/ProjectData"
            }
          },
          "shared_spaces": {
            "type": "array",
            "description": "\nSpaces the portfolio is shared with, is also empty if portfolio is shared from another space",
            "items": {
              "$ref": "#/components/schemas/SpaceData"
            }
          },
          "origin_space": {
            "anyOf": [
              {
                "description": "Shared space which the project is shared from, if `null` project is not shared",
                "$ref": "#/components/schemas/SpaceData"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "title",
          "tags",
          "projects_assigned",
          "shared_spaces",
          "origin_space"
        ],
        "title": "ProjectPortfolioData"
      },
      "ProjectTagData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "ProjectTagData"
      },
      "ProjectTypeData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "shortcode": {
            "type": "string"
          },
          "color": {
            "type": "string"
          },
          "order": {
            "type": "integer"
          },
          "is_default": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "title",
          "shortcode",
          "color",
          "order",
          "is_default"
        ],
        "title": "ProjectTypeData"
      },
      "SpaceData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "SpaceData"
      },
      "SupplierCategoryData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "SupplierCategoryData"
      },
      "SupplierData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name"
        ],
        "title": "SupplierData"
      },
      "SupplierFullData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "vendor_identifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "customer_number": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_street": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_street2": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_zip": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_town": {
            "type": [
              "string",
              "null"
            ]
          },
          "address_state": {
            "type": [
              "string",
              "null"
            ]
          },
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_email": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_phone": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_phone2": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_fax": {
            "type": [
              "string",
              "null"
            ]
          },
          "contact_website": {
            "type": [
              "string",
              "null"
            ]
          },
          "accounting_iban": {
            "type": [
              "string",
              "null"
            ]
          },
          "accounting_bic_swift": {
            "type": [
              "string",
              "null"
            ]
          },
          "accounting_tin": {
            "type": [
              "string",
              "null"
            ]
          },
          "accounting_notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "category": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SupplierCategoryData"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "name",
          "vendor_identifier",
          "customer_number",
          "address_name",
          "address_street",
          "address_street2",
          "address_zip",
          "address_town",
          "address_state",
          "notes",
          "contact_name",
          "contact_email",
          "contact_phone",
          "contact_phone2",
          "contact_fax",
          "contact_website",
          "accounting_iban",
          "accounting_bic_swift",
          "accounting_tin",
          "accounting_notes",
          "category",
          "created_at",
          "updated_at",
          "deleted_at"
        ],
        "title": "SupplierFullData"
      },
      "TagData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "title"
        ],
        "title": "TagData"
      },
      "TaskData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "project_id": {
            "type": "string"
          },
          "client_id": {
            "type": "string"
          },
          "parent_task_id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "uri": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "$ref": "#/components/schemas/TaskStatus"
          },
          "type": {
            "type": "string"
          },
          "estimated_hours": {
            "type": [
              "number",
              "null"
            ]
          },
          "is_onhold": {
            "type": "boolean"
          },
          "is_public": {
            "type": "boolean",
            "description": "If false, the task is only visible to the project team - not guest users"
          },
          "due_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "due_date_settings": {
            "$ref": "#/components/schemas/TaskDueDateSettingsData"
          },
          "assignee": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/UserData"
              },
              {
                "type": "null"
              }
            ]
          },
          "priorityOption": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskPriorityOptionData"
              },
              {
                "type": "null"
              }
            ]
          },
          "phase": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PhaseData"
              },
              {
                "type": "null"
              }
            ]
          },
          "milestone": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MilestoneData"
              },
              {
                "type": "null"
              }
            ]
          },
          "epic": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/EpicData"
              },
              {
                "type": "null"
              }
            ]
          },
          "parent_task": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskData"
              },
              {
                "type": "null"
              }
            ]
          },
          "attachements": {
            "type": "array",
            "default": [],
            "items": {
              "$ref": "#/components/schemas/FileData"
            }
          },
          "watchers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserData"
            }
          },
          "sub_tasks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaskData"
            }
          },
          "completed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "closed_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "created_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "list_sorting": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "project_id",
          "client_id",
          "parent_task_id",
          "external_id",
          "external_origin",
          "uri",
          "title",
          "description",
          "status",
          "type",
          "estimated_hours",
          "is_onhold",
          "is_public",
          "due_date",
          "due_date_settings",
          "assignee",
          "priorityOption",
          "attachements",
          "sub_tasks",
          "completed_at",
          "closed_at",
          "updated_at",
          "created_at",
          "list_sorting"
        ],
        "title": "TaskData"
      },
      "TaskDueDateRecurringType": {
        "type": "string",
        "enum": [
          "daily",
          "weekly",
          "monthly"
        ],
        "title": "TaskDueDateRecurringType"
      },
      "TaskDueDateSettingsData": {
        "type": "object",
        "properties": {
          "is_hard_deadline": {
            "type": "boolean",
            "default": false
          },
          "recurring_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TaskDueDateRecurringType"
              },
              {
                "type": "null"
              }
            ]
          },
          "recurring_interval": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Integer offset\nif `recurring_type` = `daily` or `NULL` -> offset ignored <br />\nif `recurring_type` = `weekly` -> 1 = every Monday, 2 = every Tuesday, etc <br />\nif `recurring_type` = `monthly` -> 1 = every month, 2 = every 2 months, etc"
          }
        },
        "required": [
          "is_hard_deadline",
          "recurring_type",
          "recurring_interval"
        ],
        "title": "TaskDueDateSettingsData"
      },
      "TaskPriorityOptionData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "label"
        ],
        "title": "TaskPriorityOptionData"
      },
      "TaskStatus": {
        "type": "string",
        "description": "| |\n|---|\n| `Backlog` <br/>  |\n| `New` <br/> In Todo |\n| `WIP` <br/> In progress |\n| `Completed` <br/>  |\n| `Approved` <br/>  |\n| `Closed` <br/> Task was archived |",
        "enum": [
          "Backlog",
          "New",
          "WIP",
          "Completed",
          "Approved",
          "Closed"
        ],
        "title": "TaskStatus"
      },
      "TeamMemberData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/UserType"
          },
          "is_project_lead": {
            "type": "boolean"
          },
          "added_at": {
            "type": "string",
            "format": "date-time"
          },
          "space": {
            "$ref": "#/components/schemas/SpaceData"
          }
        },
        "required": [
          "id",
          "first_name",
          "last_name",
          "email",
          "type",
          "is_project_lead",
          "added_at",
          "space"
        ],
        "title": "TeamMemberData"
      },
      "UserData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/UserType"
          },
          "space": {
            "$ref": "#/components/schemas/SpaceData"
          }
        },
        "required": [
          "id",
          "first_name",
          "last_name",
          "email",
          "type",
          "space"
        ],
        "title": "UserData"
      },
      "UserFullData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "external_origin": {
            "type": [
              "string",
              "null"
            ],
            "description": "If originated from external system origin is added"
          },
          "first_name": {
            "type": "string"
          },
          "last_name": {
            "type": "string"
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "title_suffix": {
            "type": [
              "string",
              "null"
            ]
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "birthday": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "gender": {
            "type": [
              "string",
              "null"
            ]
          },
          "position": {
            "type": [
              "string",
              "null"
            ]
          },
          "special_roles": {
            "type": [
              "string",
              "null"
            ]
          },
          "skills": {
            "type": [
              "string",
              "null"
            ]
          },
          "profile": {
            "type": [
              "string",
              "null"
            ]
          },
          "language": {
            "type": [
              "string",
              "null"
            ],
            "description": "UI language"
          },
          "languages": {
            "type": [
              "string",
              "null"
            ],
            "description": "Spoken languages"
          },
          "telephone_office": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mobile phone (Office)"
          },
          "phone_extension": {
            "type": [
              "string",
              "null"
            ],
            "description": "Landline phone (Office)"
          },
          "telephone": {
            "type": [
              "string",
              "null"
            ],
            "description": "Mobile phone (Private)"
          },
          "entry_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of joining the company"
          },
          "leave_date": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date of leaving the company - if set in the future, the employee will be archived on that date"
          },
          "type": {
            "$ref": "#/components/schemas/UserType"
          },
          "plan": {
            "$ref": "#/components/schemas/UserPlan"
          },
          "is_owner": {
            "type": "boolean",
            "description": "Is Kanbert space owner"
          },
          "avatar": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FileData"
              },
              {
                "type": "null"
              }
            ]
          },
          "userGroups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UsergroupData"
            }
          },
          "custom_fields": {
            "type": "object",
            "description": "The key is the field name for your custom field, value type depends on the field type",
            "examples": [
              "['custom_field_1' => 'value', 'custom_field_2' => true]"
            ],
            "additionalProperties": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "boolean"
                },
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "deleted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "external_id",
          "external_origin",
          "first_name",
          "last_name",
          "title",
          "title_suffix",
          "email",
          "birthday",
          "gender",
          "position",
          "special_roles",
          "skills",
          "profile",
          "language",
          "languages",
          "telephone_office",
          "phone_extension",
          "telephone",
          "entry_date",
          "leave_date",
          "type",
          "plan",
          "is_owner",
          "avatar",
          "custom_fields",
          "created_at",
          "deleted_at"
        ],
        "title": "UserFullData"
      },
      "UserPlan": {
        "type": "string",
        "enum": [
          "basic",
          "standard",
          "external",
          "advanced",
          "expert",
          "guest",
          "tax_advisor",
          "integration",
          "not_assigned"
        ],
        "title": "UserPlan"
      },
      "UserType": {
        "type": "string",
        "enum": [
          "user",
          "guest",
          "tax_advisor",
          "integration"
        ],
        "title": "UserType"
      },
      "UsergroupData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "external_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Can be used to add an identifier to the client from an external system, must be unique"
          },
          "name": {
            "type": "string"
          },
          "is_team": {
            "type": "boolean",
            "description": "If true, this usergroup is shown as team"
          },
          "users": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserData"
            }
          }
        },
        "required": [
          "id",
          "external_id",
          "name",
          "is_team",
          "users"
        ],
        "title": "UsergroupData"
      },
      "WebhookCreateData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "client_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "project_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "signature_secret_key": {
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "url",
          "client_id",
          "project_id",
          "signature_secret_key",
          "event",
          "created_at"
        ],
        "title": "WebhookCreateData"
      },
      "WebhookData": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "client_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "project_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "event": {
            "$ref": "#/components/schemas/WebhookEvent"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "id",
          "url",
          "client_id",
          "project_id",
          "event",
          "created_at"
        ],
        "title": "WebhookData"
      },
      "WebhookEvent": {
        "type": "string",
        "enum": [
          "contact:create",
          "contact:update",
          "contact:delete",
          "company:create",
          "company:update",
          "company:delete",
          "task:create",
          "task:update",
          "task:delete",
          "comment:create",
          "comment:update",
          "comment:delete"
        ],
        "title": "WebhookEvent"
      }
    },
    "responses": {
      "AuthenticationException": {
        "description": "Unauthenticated",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Error overview."
                }
              },
              "required": [
                "message"
              ]
            }
          }
        }
      },
      "ValidationException": {
        "description": "Validation error",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Errors overview."
                },
                "errors": {
                  "type": "object",
                  "description": "A detailed description of each field that failed validation.",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              },
              "required": [
                "message",
                "errors"
              ]
            }
          }
        }
      },
      "ModelNotFoundException": {
        "description": "Not found",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Error overview."
                }
              },
              "required": [
                "message"
              ]
            }
          }
        }
      }
    }
  },
  "webhooks": {
    "contact:created": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Contact created",
        "description": "`contact:create` - Fired when a new contact was created",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "contact:create"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "contact"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/ContactData"
                  }
                }
              }
            }
          }
        }
      }
    },
    "contact:update": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Contact updated",
        "description": "`contact:update` - Fired when a contact was updated",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "contact:update"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "contact"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/ContactData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "contact:deleted": {
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Contact deleted",
        "description": "`contact:delete` - A contact was deleted",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "contact:delete"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "contact"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/ContactData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "company:created": {
      "post": {
        "tags": [
          "Companies"
        ],
        "summary": "Company created",
        "description": "`company:create` - A new company was created",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "company:create"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "company"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CompanyData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "company:updated": {
      "post": {
        "tags": [
          "Companies"
        ],
        "summary": "Company updated",
        "description": "`company:update` A company was updated",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "company:update"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "company"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CompanyData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "company:deleted": {
      "post": {
        "tags": [
          "Companies"
        ],
        "summary": "Company deleted",
        "description": "`company:delete` - A company was deleted",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "company:delete"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "company"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CompanyData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "task:created": {
      "post": {
        "tags": [
          "Tasks"
        ],
        "summary": "Task created",
        "description": "`task:create` - A new task was created",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "task:create"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "task"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/TaskData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "task:updated": {
      "post": {
        "tags": [
          "Tasks"
        ],
        "summary": "Task updated",
        "description": "`task:update` A Task was updated",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "task:update"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "task"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/TaskData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "task:deleted": {
      "post": {
        "tags": [
          "Tasks"
        ],
        "summary": "Task deleted",
        "description": "`task:delete` - A task was deleted",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "task:delete"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "task"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/TaskData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "comment:created": {
      "post": {
        "tags": [
          "Task Comments"
        ],
        "summary": "Comment created",
        "description": "`comment:create` - A new comment was created",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "comment:create"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "comment"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CommentData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "comment:updated": {
      "post": {
        "tags": [
          "Task Comments"
        ],
        "summary": "Comment updated",
        "description": "`comment:update` A Comment was updated",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "comment:update"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "comment"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CommentData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    },
    "comment:deleted": {
      "post": {
        "tags": [
          "Task Comments"
        ],
        "summary": "Comment deleted",
        "description": "`comment:delete` - A comment was deleted",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event": {
                    "type": "string",
                    "description": "the event identifier",
                    "example": "comment:delete"
                  },
                  "resource": {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "description": "The resource type",
                        "example": "task"
                      },
                      "id": {
                        "type": "string",
                        "description": "The resource id"
                      }
                    }
                  },
                  "triggered_by": {
                    "$ref": "#/components/schemas/UserData"
                  },
                  "data": {
                    "$ref": "#/components/schemas/CommentData"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 within 10 seconds to indicate a that the data was received successfully. Otherwise it will try 2 more times."
          }
        }
      }
    }
  }
}