{
  "openapi": "3.0.2",
  "x-stoplight": {
    "id": "82lba7uslyryf"
  },
  "info": {
    "title": "Lucen Track APIs",
    "version": "1.0",
    "contact": {
      "name": "Support",
      "email": "info@timeneye.com",
      "url": "https://support.timeneye.com/"
    },
    "description": "\n# Overview\nLucen Track APIs use the OAuth 2.0 flow for authentication.\n\nIn order to start using our apis you need to create a new app under your [developer panel](https://track.lucensoftware.com/developers). The newly created app will have a Client ID, to identify your app, that can be used on public code (like a website script) and will use the [PKCE](https://datatracker.ietf.org/doc/html/rfc7636) Authorization flow to obtain an access token. \n\nThis guide provides step-by-step instructions on how to request an access token using OAuth 2.0 for your application on Lucen Track.\n\n### Prerequisites\n\nBefore proceeding with the access token request, ensure you have the following:\n\n- Client ID: A unique identifier assigned to your application by the OAuth provider.\n- Authorization Server URL: https://track-api.lucensoftware.com/oauth/authorize\n- Redirect URI: The URI where the authorization server redirects the user after authentication. (E.g. https://your-application-server/callback)\n\n### PKCE Authorization flow\nBelow the diagram, you'll discover a comprehensive breakdown that illustrates the functionality of the PKCE authentication flow.\n```mermaid\nsequenceDiagram\nparticipant User\nparticipant Your application\nparticipant Authorization Server\nparticipant API\nUser->>Your application: 1. Click login to Lucen Track link.\n\nloop challenge\nYour application->Your application: 2. Generate code verifier and code challenge.\nend\n\nYour application->>Authorization Server: 3. Authorization code request and code challenge to authorize.\nAuthorization Server->>User: 4. Redirect to login/authorization prompt.\nUser->>Authorization Server: 5. Authenticate and consent\nAuthorization Server->>Your application: 6. Authorize code.\nYour application->>Authorization Server: 7. Authorization code and code verified to OAuth token.\n\nloop validate\nAuthorization Server->Authorization Server: 8. Validate code verifier and challenge.\nend\n\nAuthorization Server->>User: 9. ID token and access token.\nUser->>API: 10. Request user data with access token.\nAPI->>User: 11. Response.\n```\n\n1. The user clicks **Login to Lucen Track** within your application.\n\n2. Your application creates a cryptographically-random `code_verifier` and from this generates a `code_challenge`.\n\n3. Your application redirects the user to the Lucen Track Authorization Server (/oauth/authorize endpoint) along with the `code_challenge`.\n\n4. The Lucen Track Authorization Server redirects the user to the login and authorization prompt.\n\n5. The user authenticates using one of the available login options and may see a consent page listing the permissions the user will give to the application.\n\n6. The Lucen Track Authorization Server stores the code_challenge and redirects the user back to the application with an authorization code, which is good for one use.\n\n7. Your application sends this `code` and the `code_verifier` (created in step 2) to the Lucen Track Authorization Server (/oauth/token) endpoint. \n\n8. The Lucen Track Authorization Server verifies the `code_challenge` and `code_verifier`.\n\n9. The Lucen Track Authorization Server responds with an ID token and access token and a refresh token.\n\n10. Your application can use the access token to call an API to access information about the user.\n\n11. The API responds with requested data.\n\n### Steps to Request an Access Token\n\n1. Initiate the Authorization Request:\n   - Redirect the user to the authorization server's endpoint for authorization. This typically involves redirecting the user to a specific URL with the required query parameters:\n\nFirst generate a code challenge and a state (Example in PHP language)\n\n```php\n// Keep the state in session\n$request->session()->put('state', $state = Str::random(40));\n// $state is now (e.g.) \"Grmfqj7RPAYlsEOf9iyNNIHAZG2cogt6sgJVgWxw\"\n\n// Keep the code verifier in session\n$request->session()->put(\n    'code_verifier', $code_verifier = Str::random(128)\n);\n\n// Create the code challenge\n$codeChallenge = strtr(rtrim(base64_encode(hash('sha256', $code_verifier, true)), '='), '+/', '-_');\n```\nThen create the request for the authorization\n\n```php\nuse GuzzleHttp\\Client;\n\n$query = [\n    \"client_id\": \"your-client-id\",\n    \"redirect_uri\": \"https://your-application-server/authorization-callback\",\n    \"response_type\": \"code\",\n    \"scope\": \"\",\n    \"state\": $state,\n    \"code_challenge\": $codeChallenge,\n    \"code_challenge_method\": \"S256\"\n];\n\n// Create a Guzzle HTTP client instance\n$client = new Client();\n\n// Build the request URL with query parameters\n$requestUrl = 'https://track-api.lucensoftware.com/oauth/authorize?' . http_build_query($query);\n\n// Send the GET request and get the response\n$response = $client->get($requestUrl);\n\n// Get the response body\n$responseBody = $response->getBody()->getContents();\n```\n\n2. User Authentication and Consent:\n   - The user will be prompted to authenticate with the authorization server and may be asked to provide consent to grant access to their resources.\n\n3. Authorization Code Exchange:\n   - After successful authentication and consent, the authorization server will redirect the user back to the provided redirect URI (https://your-application-server/authorization-callback), appending an authorization `code` and the `state` as query parameters.\n\n4. Access Token Request:\n   - Using the obtained authorization code, make a POST request to the authorization server's token endpoint, including the required parameters\n\nFirst retrieve the state and the verifier from the session. (Example in PHP)\nCheck if the state in the session is the same as the one received in the request \n\n```php\n// Get the state from the session\n$state = $request->session()->pull('state');\n\n// Get the verifier from the session\n$codeVerifier = $request->session()->pull('code_verifier');\n\n// Check state to prevent cross site request forgery\nthrow_unless(\n    strlen($state) > 0 && $state === $request->state,\n    InvalidArgumentException::class\n);\n\n// Get the code from the request\n$code = $request->code;\n```\n\nThen create the authentication request\n\n```php\nuse GuzzleHttp\\Client;\n\n// JSON data\n$jsonData = [\n    \"grant_type\": \"authorization_code\",\n    \"client_id\": \"your-client-id\",\n    \"redirect_uri\": \"https://your-application-server/authentication-callback\",\n    \"code\": \"code\",\n    \"code_verifier\": $codeVerifier\n];\n\n// Create a Guzzle HTTP client instance\n$client = new Client();\n\n// Send the POST request\n$response = $client->post(\"https://track-api.lucensoftware.com/oauth/token\", [\n    'json' => $jsonData\n]);\n\n// Get the response body\n$responseBody = $response->getBody()->getContents();\n\n```\n\n5. Access Token Response:\n   - The token endpoint will respond with an access token, along with other optional parameters like token expiration time (`expires_in`), token type, and refresh token.\n\n6. Use the Access Token:\n   - Include the obtained access token in subsequent API requests by adding it to the `Authorization` header, typically in the format: `Authorization: Bearer <access_token>`\n\n7. Token Refresh:\n   - If the access token expires, you can use the provided refresh token to obtain a new access token without going through the authorization flow again. Make a POST request to the token endpoint, similar to the access token request, but with `grant_type` set to `\"refresh_token\"` and include the refresh token as the `refresh_token` parameter.\n\n\n# Rate limiting\n\nIn order to be able to offer a reliable service to all our users and customers we limit how many requests can be performed per token every 5 minutes.\n\nEvery token has a limited number of requests (in the table below) that can be performed in a given window of time. The requests count is reset every 5 minutes.\n\nThe number of requests that can be performed every 5 minutes changes based on which plan has the user's account, at the moment of the request.\n\n| Plan | Maximum requests per 5 minutes |\n|--|--|\n|**Free**|500|\n|**Business (any tier)/PRO**|2000|\n\nIn case the limit is reached, the following requests (for the given token) will receive a  `429`  error.\n\nThe response will contain the following headers:\n| Header | Example value | Description |\n|--|--|--|\n|  X-RateLimit-Limit  |  2000  |  How many requests you can make  |\n|  X-RateLimit-Remaining  |  0  |  How many remaining requests are left  |\n|  Retry-After  |  177  |  Indicates  how  many  seconds  to  wait  before  making  a  follow-up  request.|\n|  X-RateLimit-Reset  |  1691677002  |  Indicates when the limit resets (UNIX timestamp)  |\n\n# Errors\n\nAll our API endpoints return a 200 HTTP status code when everything works as expected, but sometimes it may return an error.\n\nOur APIs return different error codes based on the failure cause, ranging from missing parameters to server errors on our side.\n\nIn the table below you find a list of all our error codes with a generic description of the cause, in case the endpoint doesn't return a description of the specific case.\n\n| Code | Meaning | Description |\n|--|--|--|\n| 400| Bad request | One or multiple required parameters are missing or invalid.|\n| 401| Unauthorized | The authorization token is missing, invalid or expired.|\n| 403| Forbidden | Both the authentication and the request syntax are correct, but the resource you're trying to edit requires an access level that the authorized user doesn't have.|\n| 403| Not found | The requested resource is not available. |\n| 403| Not found | The requested resource is not available. |\n| 422| Validation | The parameters or the payload passed does not follow the required specification |\n| 429| Too many requests | You have reached your rate limit. |\n| 500| Internal server error | There was a problem on our side. |",
    "termsOfService": "https://www.timeneye.com/legal/terms-and-conditions",
    "license": {
      "name": "Custom",
      "url": "https://www.timeneye.com/legal/terms-and-conditions"
    }
  },
  "servers": [
    {
      "url": "https://track-api.lucensoftware.com/api/v1",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Accounts",
      "description": "Accounts"
    },
    {
      "name": "ApprovalEvents",
      "description": "ApprovalEvents"
    },
    {
      "name": "ApprovalRequests",
      "description": "ApprovalRequests"
    },
    {
      "name": "Attachments",
      "description": "Attachments"
    },
    {
      "name": "Avatars",
      "description": "Avatars"
    },
    {
      "name": "Budgets",
      "description": "Budgets"
    },
    {
      "name": "Clients",
      "description": "Clients"
    },
    {
      "name": "Countries",
      "description": "Countries"
    },
    {
      "name": "Currencies",
      "description": "Currencies"
    },
    {
      "name": "E2ETesting",
      "description": "E2E Testing endpoints - only available in e2e_testing environment"
    },
    {
      "name": "Entries",
      "description": "Entries"
    },
    {
      "name": "EntrySuggestions",
      "description": "EntrySuggestions"
    },
    {
      "name": "ExpenseCategories",
      "description": "ExpenseCategories"
    },
    {
      "name": "Expenses",
      "description": "Expenses"
    },
    {
      "name": "Groups",
      "description": "Groups"
    },
    {
      "name": "Languages",
      "description": "Languages"
    },
    {
      "name": "PhaseCategories",
      "description": "PhaseCategories"
    },
    {
      "name": "Phases",
      "description": "Phases"
    },
    {
      "name": "Projects",
      "description": "Projects"
    },
    {
      "name": "TagLists",
      "description": "TagLists"
    },
    {
      "name": "Tags",
      "description": "Tags"
    },
    {
      "name": "Timers",
      "description": "Timers"
    },
    {
      "name": "TodoLists",
      "description": "TodoLists"
    },
    {
      "name": "Todos",
      "description": "Todos"
    },
    {
      "name": "Users",
      "description": "Users"
    },
    {
      "name": "Zones",
      "description": "Zones"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "oauth2",
        "flows": {
          "password": {
            "tokenUrl": "https://track-api.lucensoftware.com/oauth/token",
            "refreshUrl": "https://track-api.lucensoftware.com/oauth/token",
            "scopes": {}
          }
        },
        "description": ""
      }
    },
    "parameters": {
      "page": {
        "name": "page",
        "description": "The currently displayed page",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 1
        }
      },
      "per_page": {
        "name": "per_page",
        "description": "How many items per page",
        "in": "query",
        "schema": {
          "type": "integer"
        }
      },
      "sort_by": {
        "name": "sort_by",
        "description": "The attribute to sort by",
        "in": "query",
        "schema": {
          "type": "string"
        }
      },
      "direction": {
        "name": "direction",
        "description": "The sort direction",
        "in": "query",
        "schema": {
          "type": "string",
          "default": "asc",
          "enum": [
            "asc",
            "desc"
          ]
        }
      }
    },
    "responses": {
      "401": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "403": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "404": {
        "description": "Not found",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string"
                }
              },
              "x-examples": {
                "example-1": {
                  "message": "No query results for model [App\\Models\\Account] 3"
                }
              }
            }
          }
        }
      },
      "422": {
        "description": "Invalid request",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "x-examples": {
                "Example 1": {
                  "message": "The color must be 7 characters.",
                  "errors": {
                    "color": [
                      "The color must be 7 characters."
                    ]
                  }
                }
              },
              "properties": {
                "message": {
                  "type": "string"
                },
                "errors": {
                  "type": "object",
                  "description": "The errors object has properties as keys and array of strings as values"
                }
              }
            }
          },
          "application/xml": {
            "schema": {
              "type": "object",
              "x-examples": {
                "Example 1": {
                  "message": "The project is required if you are changing the entry's owner (and 4 more errors)",
                  "errors": {
                    "project_id": [
                      "The project is required if you are changing the entry's owner"
                    ],
                    "phase_id": [
                      "The phase is required if you are changing the entry's owner"
                    ],
                    "user_id": [
                      "The user field is required."
                    ],
                    "minutes": [
                      "The minutes field is required."
                    ],
                    "date": [
                      "The date field is required."
                    ]
                  }
                }
              },
              "properties": {
                "message": {
                  "type": "string"
                },
                "errors": {
                  "type": "object"
                }
              }
            }
          }
        },
        "headers": {}
      }
    },
    "schemas": {
      "Account": {
        "type": "object",
        "x-examples": {},
        "title": "Account",
        "x-stoplight": {
          "id": "wlpj5oz3p1xgd"
        },
        "properties": {
          "account_name": {
            "type": "string",
            "description": "The name of the account, usually the Company name."
          },
          "created_date": {
            "type": "string",
            "description": "Date of creation",
            "example": "2023-01-01 10:00:00"
          },
          "expiration": {
            "type": "string",
            "description": "Date of license (or trial period) expiration",
            "example": "2023-01-01"
          },
          "is_trial": {
            "type": "boolean"
          },
          "trial_expiration": {
            "type": "string",
            "description": "Date of trial period expiration",
            "example": "2023-01-01"
          },
          "settings": {
            "type": "object",
            "properties": {
              "companyName": {
                "type": "string",
                "description": "The name of the company, could be different from account_name"
              },
              "prosett_clientMode": {
                "type": "integer",
                "description": "Whether or not the client should be displayed in the re"
              },
              "prosett_entriesLock_enabled": {
                "type": "integer",
                "description": "Whether or not the entry lock system is enabled"
              },
              "prosett_entriesLock_date": {
                "type": "string",
                "nullable": true,
                "description": "The date of the last entry lock"
              },
              "adminNewEntryForOthers": {
                "type": "integer",
                "description": "Whether o"
              },
              "register_time_for_others_roles": {
                "type": "array",
                "description": "Roles that are allowed to register time on behalf of other users. Requires the add_time_for_other_users feature to be enabled.",
                "items": {
                  "type": "string",
                  "enum": [
                    "owner",
                    "admin",
                    "gm",
                    "pm",
                    "all_managers"
                  ]
                }
              },
              "allow_apps": {
                "type": "integer",
                "description": "Whether or not the third party a"
              },
              "memberAverageCost": {
                "type": "integer",
                "description": "Indicates the average labour cost for the account members"
              },
              "showWorkingTime": {
                "type": "boolean",
                "description": "Whether or not the users can see their working time in their dashboard. (e.g. 7h of 8h)"
              },
              "authenticationMethod": {
                "type": "object",
                "description": "Authen",
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Type of login method",
                    "enum": [
                      "all",
                      "google",
                      "microsoft",
                      "saml"
                    ]
                  },
                  "idp_entity_id": {
                    "type": "string",
                    "description": "Id of the identity provider (used with type = saml)"
                  },
                  "idp_sso_url": {
                    "type": "string",
                    "description": "Single Sign on URL (used with type = saml)"
                  },
                  "idp_cert": {
                    "type": "string",
                    "description": "Certificate of the identity provider (used with type = saml)"
                  },
                  "allow_password_login": {
                    "type": "integer",
                    "description": "Whether or not the login with email + password is allowed"
                  }
                }
              },
              "entries_lock_automation": {
                "type": "object",
                "description": "Describes the automatic entry lock parameters",
                "properties": {
                  "enabled": {
                    "type": "boolean",
                    "description": "Whether or not the entry lock automation is enabled"
                  },
                  "interval": {
                    "type": "string",
                    "description": "Interval of the entry lock",
                    "enum": [
                      "weekly",
                      "monthly",
                      "0"
                    ]
                  },
                  "interval_target": {
                    "type": "integer",
                    "description": "Between 1 and 31 if the interval is monthly (the day of the month), Between 0 and 6i if the interval is weekly ",
                    "nullable": true
                  }
                }
              },
              "currencyCode": {
                "type": "string",
                "description": "Code of the used currency"
              },
              "required_fields": {
                "type": "array",
                "x-stoplight": {
                  "id": "h7839rgkzcv4j"
                },
                "description": "An array representing the required fields.\nAllowed values are entry_notes, to require entries to have notes, and expense_project, to require expenses to have a project.",
                "items": {
                  "x-stoplight": {
                    "id": "um79kws0ji8ys"
                  },
                  "enum": [
                    "entry_notes",
                    "expense_project"
                  ]
                }
              }
            }
          },
          "subscription_limit_users": {
            "type": "integer",
            "description": "Maximum number of active users allowed in the account due to purchased licenses"
          },
          "billing_enabled": {
            "type": "boolean",
            "description": "Whether or not a subscription is active for the account"
          }
        }
      },
      "Avatar": {
        "type": "object",
        "x-examples": {},
        "description": "An avatar that can be linked to an Account or to a User",
        "properties": {
          "avatar_name": {
            "type": "string",
            "description": "unique file name"
          },
          "avatar_url": {
            "type": "string",
            "description": "Image url"
          },
          "account_id": {
            "type": "integer",
            "description": "Identifier of the account which has this avatar"
          },
          "user_id": {
            "type": "integer",
            "description": "Identifier of the user which has this avatar"
          }
        },
        "x-stoplight": {
          "id": "rmwkjif7pfhgs"
        }
      },
      "Budget": {
        "type": "object",
        "x-examples": {},
        "x-stoplight": {
          "id": "h9p1bc7gu2rnb"
        },
        "properties": {
          "budget_id": {
            "type": "integer",
            "description": "Unique identifier of the budget"
          },
          "project_id": {
            "type": "integer",
            "description": "Identifier of the project to which the budget belongs"
          },
          "phase_id": {
            "type": "integer",
            "x-stoplight": {
              "id": "tlexvv7yuetem"
            },
            "description": "The id of the Phase the budget is related to",
            "nullable": true
          },
          "user_id": {
            "type": "integer",
            "x-stoplight": {
              "id": "1pys0459yhy5m"
            },
            "description": "The id of the project member the budget is related to",
            "nullable": true
          },
          "tag_id": {
            "type": "integer",
            "x-stoplight": {
              "id": "7s86fnl79406r"
            },
            "description": "The id of the Tag the budget is related to in the Project",
            "nullable": true
          },
          "tag_list_id": {
            "type": "integer",
            "x-stoplight": {
              "id": "fon5sltffk2nj"
            },
            "description": "The id of the Tag List the budget is related to in the Project",
            "nullable": true
          },
          "type": {
            "x-stoplight": {
              "id": "h25or18msishd"
            },
            "enum": [
              "time",
              "revenue",
              "cost"
            ],
            "description": "The type of the budget.\n- cost: Only for non-billable projects\n- time: for all kind of projects\n- revenue: Only for Time and material projects"
          },
          "recurrence": {
            "type": "integer",
            "enum": [
              0,
              1,
              2
            ],
            "description": "Recurrence of the budget: 0 = no recurrence, 1 = weekly, 2 = monthly"
          },
          "interval": {
            "type": "integer",
            "minimum": 0,
            "maximum": 31,
            "description": "Day of budget reset: 1 to 31 if the budget is monthly, 0 to 6 if the budget is weekly"
          },
          "budget_minutes": {
            "type": "integer",
            "description": "The time budget (must be absent if budget_amount is present)"
          },
          "budget_amount": {
            "type": "number",
            "x-stoplight": {
              "id": "bbf4car2or87w"
            },
            "description": "The monetary budget amount (must be absent if budget_minutes is present)"
          },
          "total_minutes": {
            "type": "integer",
            "x-stoplight": {
              "id": "peqvb91giz9qo"
            },
            "description": "The minutes tracked on this budget"
          },
          "total_revenue": {
            "type": "number",
            "x-stoplight": {
              "id": "qx25d5o2mpf01"
            },
            "description": "the revenue tracked on this budget"
          },
          "total_cost": {
            "type": "number",
            "x-stoplight": {
              "id": "isyisl8ypzefq"
            },
            "description": "The cost tracked on this budget"
          },
          "includes_expenses": {
            "type": "boolean",
            "x-stoplight": {
              "id": "vlth7bdw1dj38"
            },
            "description": "Tells if the monetary budget includes the expenses for the project"
          },
          "alert_threshold": {
            "type": "integer",
            "x-stoplight": {
              "id": "2kiaqy39ui93y"
            },
            "description": "The percentage of the budget to be reached in order to have a notification sent to the PMs"
          },
          "period_start": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true
          },
          "period_end": {
            "type": "string",
            "description": "Format: YYYY-MM-DD",
            "nullable": true
          },
          "budget_percentage": {
            "type": "number",
            "minimum": 0,
            "description": "The percentage of completion of the budget"
          },
          "is_active": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1,
            "description": "Whether or not the budget is active"
          }
        }
      },
      "Expense": {
        "type": "object",
        "x-examples": {
          "Example 1": {
            "description": "Paper clips",
            "date": "2025-03-13",
            "amount": "12",
            "calculated_amount": 12,
            "billable_status": "non-billable",
            "project_id": 356229,
            "user_id": 43,
            "expense_category_id": 3,
            "is_locked": 0,
            "account_id": 1,
            "unit_price": "1.00",
            "unit_name": null,
            "updated_at": "2025-03-13T08:37:58.000000Z",
            "created_at": "2025-03-13T08:37:58.000000Z",
            "expense_id": 3788
          }
        },
        "title": "Expense",
        "description": "An expense",
        "properties": {
          "expense_id": {
            "type": "integer",
            "description": "The expense unique identifier"
          },
          "description": {
            "type": "string",
            "description": "The description of the expense"
          },
          "date": {
            "type": "string",
            "description": "The date of the expense",
            "example": "2024-01-01"
          },
          "amount": {
            "type": "number",
            "format": "float",
            "description": "The amount of the expense. \nIf there is an expense category and it has a unit price, this value will be multiplied with the unit price to get the calculated_amount."
          },
          "calculated_amount": {
            "type": "number",
            "format": "float",
            "description": "The actual expense's amount. If there isn't an expense category or the category doesn't have a unit_price, it is equal to the amount."
          },
          "billable_status": {
            "description": "Tells if the expense's billable status:\nPossible values are: \"unbilled\", \"billed\", \"non-billable\", and \"billable\".",
            "enum": [
              "unbilled",
              "billed",
              "non-billable",
              "billable"
            ]
          },
          "project_id": {
            "type": "integer",
            "description": "The id of the project the expenses belongs to",
            "nullable": true
          },
          "user_id": {
            "type": "integer",
            "description": "The id of the user the expenses belongs to"
          },
          "expense_category_id": {
            "type": "integer",
            "description": "The id of the category the expenses belongs to",
            "nullable": true
          },
          "is_locked": {
            "type": "boolean",
            "description": "Tells if the expense is locked (the only reason can be by approval)"
          },
          "unit_price": {
            "type": "number",
            "format": "float",
            "default": 1,
            "description": "The unit price of the expense category (1 if none) redunded on the expense"
          },
          "unit_name": {
            "type": "string",
            "description": "The unit name of the expense category (null if none) redunded on the expense",
            "nullable": true
          },
          "updated_at": {
            "type": "string",
            "description": "The last update date"
          },
          "created_at": {
            "type": "string",
            "description": "The creation date"
          }
        }
      },
      "ExpenseCategory": {
        "type": "object",
        "x-stoplight": {
          "id": "80c93a41afff4"
        },
        "x-examples": {
          "Example 1": {
            "expense_category_id": 3,
            "account_id": 1,
            "name": "Entertainment",
            "color": "#F5C78E",
            "is_active": 1,
            "uses_unit_price": 0,
            "unit_name": null,
            "unit_price": "1.00",
            "created_at": "2023-09-07T09:52:05.000000Z",
            "updated_at": "2023-09-07T09:52:05.000000Z"
          }
        },
        "title": "ExpenseCategory",
        "description": "Used to categorize expenses",
        "nullable": true,
        "properties": {
          "expense_category_id": {
            "type": "integer",
            "description": "The expense category identifier"
          },
          "name": {
            "type": "string",
            "description": "The expense category name"
          },
          "color": {
            "type": "string",
            "description": "The expense category color (format #EF12AB)"
          },
          "is_active": {
            "type": "boolean",
            "description": "Indicates if the expense category is active or archived"
          },
          "uses_unit_price": {
            "type": "boolean",
            "description": "Tells if the expense category has a unit price.\nIf so, the expenses with this category uses unit_price as a multiplier to obtain the calculated amount"
          },
          "unit_name": {
            "type": "string",
            "description": "The name of the unit of the expenses, if any",
            "nullable": true
          },
          "unit_price": {
            "type": "number",
            "default": 1,
            "description": "The multiplier to the e",
            "format": "float"
          },
          "created_at": {
            "type": "string",
            "description": "The expense category creation date"
          },
          "updated_at": {
            "type": "string",
            "description": "The last update date"
          }
        }
      },
      "Client": {
        "title": "Client",
        "x-stoplight": {
          "id": "o6w3tpvmilemj"
        },
        "type": "object",
        "properties": {
          "client_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the client"
          },
          "is_active": {
            "type": "boolean",
            "description": "Whether or not the client is archived"
          },
          "color": {
            "type": "string",
            "pattern": "#[0-9A-F]{6}",
            "minLength": 7,
            "maxLength": 7,
            "description": "Color used in reports"
          }
        },
        "required": [
          "name"
        ],
        "description": "Represents a client of the company. A client can have multiple projects."
      },
      "Entry": {
        "type": "object",
        "x-examples": {},
        "title": "Entry",
        "description": "Represents a time entry in Lucen Track. Time entries are portions of time assigned to a project, a phase and optionally to a client (the one linked to the project) and multiple tags.",
        "x-stoplight": {
          "id": "5f8bbr1bf1gt7"
        },
        "x-internal": false,
        "properties": {
          "entry_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "project_id": {
            "type": "integer",
            "description": "Unique identifier of the project"
          },
          "phase_id": {
            "type": "integer",
            "description": "Unique identifier of the the phase which the entry belongs to"
          },
          "phase_category_id": {
            "type": "integer",
            "description": "Unique identifier of the the phase category which the entry's phase belongs to"
          },
          "user_id": {
            "type": "integer",
            "description": "Unique identifier of the user that created the entry"
          },
          "client_id": {
            "type": "integer",
            "description": "Unique identifier of the client that belongs to the entry's project"
          },
          "entry_date": {
            "type": "string",
            "description": "Date of the entry",
            "example": "2023-01-01"
          },
          "entry_time_from": {
            "type": "string",
            "x-stoplight": {
              "id": "bnrhhcfdz7t98"
            },
            "description": "Start time for the entry",
            "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
            "deprecated": true,
            "nullable": true
          },
          "entry_time_to": {
            "type": "string",
            "x-stoplight": {
              "id": "33c8tz9ml60lg"
            },
            "description": "End time for the entry",
            "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
            "deprecated": true,
            "nullable": true
          },
          "created_date": {
            "type": "string",
            "example": "2023-01-01 10:00:00",
            "description": "Date and time of creation"
          },
          "updated_date": {
            "type": "string",
            "description": "Date and time od update"
          },
          "entry_minutes": {
            "type": "integer",
            "description": "Amount of tracked time in minutes"
          },
          "notes": {
            "type": "string",
            "description": "Notes on the time entry"
          },
          "billed": {
            "type": "integer",
            "description": "Indicates if the entry has been billed",
            "nullable": true
          },
          "source": {
            "type": "string",
            "description": "Indicates the source of the entry (if any)"
          },
          "source_text": {
            "type": "string",
            "description": "A text that describes the source of the entry"
          },
          "source_url": {
            "type": "string",
            "description": "An URL to the source of the entry"
          },
          "source_id": {
            "type": "string",
            "description": "A unique identifier of the source of the entry"
          },
          "source_data": {
            "type": "string",
            "description": "Additional data of the source "
          },
          "locked": {
            "type": "integer",
            "description": "Whether or not the entry is locked"
          },
          "locked_by_date": {
            "type": "integer",
            "description": "Whether or not the entry is locked by date"
          },
          "locked_by_membership": {
            "type": "integer",
            "description": "Whether or not the entry is locked by membership"
          },
          "locked_by_apionly": {
            "type": "integer",
            "description": "Whether or not the entry is locked by restriction on API only"
          },
          "suggested_project_id": {
            "type": "string",
            "description": "An optional identifier of a suggested project if the entry is created from an EntrySuggestion",
            "nullable": true
          },
          "suggested_phase_id": {
            "type": "string",
            "description": "An optional identifier of a suggested phase if the entry is created from an EntrySuggestion",
            "nullable": true
          },
          "cost": {
            "type": "string",
            "description": "The monetary cost of the time entry based on the hourly cost of the user that created it",
            "nullable": true
          },
          "revenue": {
            "type": "string",
            "description": "The monetary revenue of the time entry based on the general hourly rate,the project's .",
            "nullable": true
          },
          "profit": {
            "type": "string",
            "description": "The difference between the revenue and the cost",
            "nullable": true
          },
          "todo_id": {
            "type": "string",
            "description": "The unique identifier of a todo linked to the time entry",
            "nullable": true
          },
          "time_from": {
            "type": "string",
            "x-stoplight": {
              "id": "wf9ymonsk0ieg"
            },
            "description": "Start time for the entry",
            "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
            "nullable": true
          },
          "time_to": {
            "type": "string",
            "x-stoplight": {
              "id": "ss6r1v1tc90vp"
            },
            "description": "End time for the entry",
            "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
            "nullable": true
          },
          "tag_ids": {
            "type": "array",
            "x-stoplight": {
              "id": "337vfnsjmk93c"
            },
            "description": "The IDs of the tags attached to the entry",
            "items": {
              "x-stoplight": {
                "id": "1q0zkbmav7bye"
              },
              "type": "integer"
            }
          }
        }
      },
      "Timer": {
        "type": "object",
        "x-examples": {},
        "title": "Timer",
        "description": "a Lucen Track timer",
        "x-stoplight": {
          "id": "nog9f972tdw3t"
        },
        "required": [
          "project_id",
          "phase_id",
          "user_id",
          "seconds"
        ],
        "properties": {
          "timer_id": {
            "type": "integer",
            "description": "Unique identifier of the timer"
          },
          "project_id": {
            "type": "integer",
            "description": "Unique identifier of the project"
          },
          "phase_id": {
            "type": "integer",
            "description": "phase id"
          },
          "user_id": {
            "type": "integer",
            "description": "Unique identifier of the user that c"
          },
          "timer_start": {
            "type": "string",
            "example": "2023-01-01 10:00:00",
            "deprecated": true
          },
          "time_from": {
            "type": "string",
            "x-stoplight": {
              "id": "wf9ymonsk0ieg"
            },
            "description": "Start time for the timer",
            "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}"
          },
          "timer_status": {
            "type": "string",
            "enum": [
              "running",
              "paused"
            ]
          },
          "seconds": {
            "type": "integer",
            "minimum": 0,
            "exclusiveMinimum": false
          },
          "notes": {
            "type": "string",
            "description": "Notes on the time entry"
          },
          "source": {
            "type": "string",
            "description": "Indicates the source of the entry (if any)"
          },
          "source_text": {
            "type": "string",
            "description": "A text that describes the source of the entry"
          },
          "source_url": {
            "type": "string",
            "description": "An URL to the source of the entry"
          },
          "source_id": {
            "type": "string",
            "description": "A unique identifier of the source of the entry"
          },
          "source_data": {
            "type": "string",
            "description": "Additional data of the source"
          },
          "timer_date": {
            "type": "string",
            "example": "2023-01-01",
            "description": "The data in which the timer has been started"
          },
          "todo_id": {
            "type": "integer",
            "nullable": true
          }
        }
      },
      "User": {
        "type": "object",
        "x-examples": {},
        "title": "User",
        "description": "User",
        "properties": {
          "user_id": {
            "type": "integer",
            "description": "Unique identifier of the user"
          },
          "group_id": {
            "type": "integer",
            "description": "Unique identifier of the group to which the user belongs to"
          },
          "email": {
            "type": "string",
            "description": "Email of the user, must be unique"
          },
          "first_name": {
            "type": "string",
            "description": "First name of the user"
          },
          "last_name": {
            "type": "string",
            "description": "Last name of the user"
          },
          "name": {
            "type": "string",
            "description": "Name of the user"
          },
          "enabled": {
            "type": "integer",
            "description": "Tells if the user is archived or not"
          },
          "created_date": {
            "type": "string",
            "description": "Date of creation of the user"
          },
          "is_owner": {
            "type": "boolean",
            "description": "Whether or not the user is an owner of the account"
          },
          "is_admin": {
            "type": "boolean",
            "description": "Whether or not the user is an admin of the account"
          },
          "is_gm": {
            "type": "boolean",
            "description": "Whether or not the user is a group manager of his group"
          },
          "settings_dailyemail_time": {
            "type": "integer",
            "description": "Hour of the day in which the user receives the daily email"
          },
          "settings_emails_newsletter_enabled": {
            "type": "integer",
            "description": "Whether or not the newsletter emails are enabled fro the user"
          },
          "settings_emails_system_enabled": {
            "type": "integer",
            "description": "Whether or not the system emails are enabled fro the user"
          },
          "settings_emails_developer_enabled": {
            "type": "integer",
            "description": "Whether or not the emails regarding developer updates are enabled fro the user"
          },
          "settings_emails_dailyrecap_enabled": {
            "type": "integer",
            "description": "Whether or not the daily recap email is enabled fro the user"
          },
          "settings_emails_timerssaved_enabled": {
            "type": "integer",
            "description": "Whether or not the email containing the unsaved timers is enabled fro the user"
          },
          "settings_emails_status_enabled": {
            "type": "integer",
            "description": "Whether or not the email containing the status update is enabled fro the user"
          },
          "settings_emails_status_time": {
            "type": "integer",
            "description": "Hour of the day in which the user receives the status email"
          },
          "settings_emails_status_day": {
            "type": "integer",
            "description": "Day of the week in which the user receives the status email"
          },
          "settings_emails_onboarding_enabled": {
            "type": "integer",
            "description": "Whether or not the emails to guide the user through the trial period are enabled"
          },
          "settings_emails_automation_enabled": {
            "type": "integer",
            "description": "Enable this option to be able to receive the e-mails from the automations, and be able to create automations regarding scheduled reports."
          },
          "user_hourly_cost": {
            "type": "string",
            "description": "The hourly cost of the user, expressed in the currency selected in the account settings"
          },
          "user_hourly_rate": {
            "type": "string",
            "description": "The hourly rate of the user, expressed in the currency selected in the account settings"
          },
          "role": {
            "type": "string",
            "nullable": true,
            "description": "The role of the user in the company."
          },
          "job_title": {
            "type": "string",
            "description": "The job title of the user in the company"
          },
          "department": {
            "type": "string",
            "nullable": true,
            "description": "The user's department"
          },
          "employee_id": {
            "type": "string",
            "nullable": true,
            "description": "The employee ID of the user"
          },
          "working_time": {
            "type": "integer",
            "description": "How many hours the user is usually working on a day"
          },
          "microsoft_id": {
            "type": "string",
            "description": "Microsoft unique identifier of the user"
          },
          "google_id": {
            "type": "string",
            "description": "Google unique identifier of the user"
          },
          "apple_id": {
            "type": "string",
            "description": "Apple unique identifier of the user"
          },
          "workspace_access_level": {
            "type": "string",
            "description": "The role of the user in Lucen Track: owner, admin or member"
          }
        },
        "x-stoplight": {
          "id": "8r0gf5rqoxwwv"
        }
      },
      "Project": {
        "type": "object",
        "x-examples": {},
        "title": "Project",
        "description": "A project the principal way of categorizing the time in Lucen Track.\nProjects have one or more tasks on which the time is spent.",
        "x-stoplight": {
          "id": "aa7t79mq3m8d2"
        },
        "required": [
          "name"
        ],
        "properties": {
          "project_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "The project's name"
          },
          "client_id": {
            "type": "integer",
            "description": "Unique identifier of a client that the project belongs to"
          },
          "is_active": {
            "type": "integer",
            "description": "Whether or not the project is archived"
          },
          "is_billable": {
            "type": "integer",
            "description": "Whether or not the project is billable per hour"
          },
          "is_public": {
            "type": "integer",
            "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it"
          },
          "hourly_rate": {
            "type": "string",
            "description": "The general hourly rate for the project. A specific hourly_rate can be set on the project-user relation"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          },
          "api_only": {
            "type": "integer",
            "description": "Whether or not the project is usable for tracking time only using the apis."
          },
          "description": {
            "type": "string",
            "description": "A text description of the project"
          },
          "has_todos": {
            "type": "boolean",
            "x-stoplight": {
              "id": "l9k5d3pk8f9cv"
            },
            "description": "Tells if the project has the Tasks section enabled"
          }
        }
      },
      "Phase": {
        "type": "object",
        "x-examples": {},
        "title": "Phase",
        "description": "A project's phase",
        "x-stoplight": {
          "id": "2gsuxkayxq83f"
        },
        "properties": {
          "phase_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "project_id": {
            "type": "integer",
            "description": "Unique identifier of the project which the phase belongs to"
          },
          "name": {
            "type": "string",
            "description": "The name of the phase"
          },
          "is_open": {
            "type": "integer",
            "description": "Whether or not the phase is archived"
          },
          "phase_category_id": {
            "type": "integer",
            "description": "Unique identifier of the phase category which the phase belongs to"
          },
          "budget_minutes": {
            "type": "integer",
            "description": "Amount of budgeted time for theis phase. The sum of the budget_minutes of the phases must not be grater than the budgeted time for the project"
          }
        },
        "required": [
          "project_id",
          "name"
        ]
      },
      "TagList": {
        "type": "object",
        "x-examples": {},
        "properties": {
          "tag_list_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "The name of the tag list"
          },
          "is_active": {
            "type": "integer",
            "description": "Whether or not the tag list is archived"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          },
          "text_color": {
            "type": "string",
            "description": "The color of the text used for reporting"
          }
        },
        "required": [
          "name",
          "color",
          "text_color"
        ],
        "x-stoplight": {
          "id": "z8r3lwt40nihp"
        }
      },
      "Tag": {
        "type": "object",
        "x-examples": {},
        "description": "A tag",
        "title": "Tag",
        "properties": {
          "tag_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "tag_list_id": {
            "type": "integer",
            "description": "Unique identifier of the tag list which the tag belongs to"
          },
          "name": {
            "type": "string",
            "description": "The name of the tag"
          },
          "is_active": {
            "type": "integer",
            "description": "Whether or not the tag is archived"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          }
        },
        "required": [
          "tag_list_id",
          "name"
        ],
        "x-stoplight": {
          "id": "iwk9zguiajgif"
        }
      },
      "EntrySuggestion": {
        "type": "object",
        "x-examples": {},
        "properties": {
          "entry_suggestion_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "created_datetime": {
            "type": "string",
            "description": "Date and time of creation of the suggestion"
          },
          "user_id": {
            "type": "integer",
            "description": "Unique identifier of the user that owns the suggestion"
          },
          "project_id": {
            "type": "integer",
            "description": "Unique identifier of the suggested project"
          },
          "project_name": {
            "type": "string",
            "description": "Name of the suggested project"
          },
          "phase_id": {
            "type": "integer",
            "description": "Unique identifier of the suggested phase"
          },
          "phase_name": {
            "type": "string",
            "description": "Name of the suggested phase"
          },
          "notes": {
            "type": "string",
            "description": "Notes related to the source of the suggestion"
          },
          "source": {
            "type": "string",
            "description": "Source identifier"
          },
          "source_text": {
            "type": "string",
            "description": "Text related to the source"
          },
          "source_url": {
            "type": "string",
            "description": "URL of the source of the suggestion"
          },
          "source_id": {
            "type": "string",
            "description": "Unique identifier of the source"
          },
          "source_data": {
            "type": "string",
            "description": "Other data related to the source"
          },
          "entry_minutes": {
            "type": "integer",
            "description": "Suggested amount of time in minutes"
          },
          "entry_date": {
            "type": "string",
            "description": "Suggested date"
          },
          "accepted": {
            "type": "integer",
            "description": "Whether or not the suggestion is accepted an transformed into an entry"
          },
          "todo_id": {
            "type": "integer",
            "nullable": true
          }
        },
        "x-stoplight": {
          "id": "rczv4ar2ph4q2"
        }
      },
      "Group": {
        "type": "object",
        "x-examples": {},
        "title": "Group",
        "description": "A group of users",
        "properties": {
          "group_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the group"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          }
        },
        "x-stoplight": {
          "id": "gh9aq1pihfeit"
        }
      },
      "Language": {
        "type": "object",
        "properties": {
          "language_code": {
            "type": "string",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the language"
          }
        },
        "x-examples": {},
        "title": "Language",
        "description": "A language supported in Lucen Track",
        "x-stoplight": {
          "id": "ri5snko16593b"
        }
      },
      "PhaseCategory": {
        "type": "object",
        "x-examples": {},
        "title": "PhaseCategory",
        "description": "Categorizes phases",
        "x-stoplight": {
          "id": "1b463g7kp1qsa"
        },
        "nullable": true,
        "properties": {
          "phase_category_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the phase category"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          }
        }
      },
      "Todo": {
        "title": "Todo",
        "x-stoplight": {
          "id": "weym60vlwuhf7"
        },
        "type": "object",
        "description": "It is a todo in Lucen Track",
        "properties": {
          "todo_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "todo_list_id": {
            "type": "integer",
            "description": "Unique identifier of the todo list which the todo belongs to",
            "nullable": true
          },
          "user_id": {
            "type": "integer",
            "description": "Unique identifier of the user assigned to the todo",
            "nullable": true
          },
          "name": {
            "type": "string",
            "description": "Title of the todo"
          },
          "description": {
            "type": "string",
            "description": "Description of the todo"
          },
          "is_completed": {
            "type": "boolean",
            "description": "Whether or not the todo is marked as done"
          },
          "priority": {
            "type": "string",
            "description": "Priority of the todo"
          },
          "start_date": {
            "type": "string",
            "example": "2023-01-01",
            "description": "The date in which the todo should be taken in charge",
            "nullable": true
          },
          "due_date": {
            "type": "string",
            "example": "2023-01-01",
            "description": "The data by which the todo should be completed",
            "nullable": true
          },
          "status": {
            "type": "string",
            "description": "The current status of the todo"
          },
          "index": {
            "type": "integer",
            "description": "The index of the todo in the list (order)"
          },
          "created_at": {
            "type": "string",
            "example": "2023-01-01 10:00:00",
            "description": "Created date and time"
          },
          "updated_at": {
            "type": "string",
            "example": "2023-01-01 10:00:00",
            "description": "Updated date and time"
          }
        }
      },
      "TodoList": {
        "title": "TodoList",
        "x-stoplight": {
          "id": "1363raammdbed"
        },
        "type": "object",
        "properties": {
          "todo_list_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "project_id": {
            "type": "integer",
            "description": "Unique identifier of the project which the todo list belongs to"
          },
          "name": {
            "type": "string",
            "description": "Name of the todo list"
          },
          "color": {
            "type": "string",
            "description": "The color used for reporting"
          },
          "index": {
            "type": "integer",
            "description": "The index of the todo list in the board (order)"
          },
          "created_at": {
            "type": "string",
            "description": "Created date and time"
          },
          "updated_at": {
            "type": "string",
            "description": "Updated date and time"
          }
        }
      },
      "Zone": {
        "type": "object",
        "properties": {
          "zone_id": {
            "type": "integer",
            "description": "Unique identifier"
          },
          "country_code": {
            "type": "string",
            "description": "Code of the country which the zone belongs to"
          },
          "name": {
            "type": "string",
            "description": "Name of the time zone"
          }
        },
        "x-examples": {},
        "title": "Zone",
        "description": "A timezone object",
        "x-stoplight": {
          "id": "srt2ge5xz5dn1"
        }
      },
      "Attachment": {
        "type": "object",
        "x-examples": {
          "Example 1": {
            "attachment_id": 973,
            "account_id": 1,
            "attachable_type": "expense",
            "attachable_id": 3788,
            "original_name": "Impegno comune logo.png",
            "extension": "png",
            "size_in_bytes": 29384,
            "created_at": "2025-03-13T09:41:54.000000Z",
            "updated_at": "2025-03-13T09:41:54.000000Z"
          }
        },
        "title": "Attachment",
        "description": "A file uploaded to Lucen Track",
        "properties": {
          "attachment_id": {
            "type": "integer",
            "description": "the Attachment unique identifier"
          },
          "attachable_type": {
            "type": "string",
            "description": "The identifier of the model the attachment is attached to "
          },
          "attachable_id": {
            "type": "integer",
            "description": "The name of the model the attachment is attached to"
          },
          "original_name": {
            "type": "string",
            "description": "The original name of the file"
          },
          "extension": {
            "type": "string",
            "description": "The extension of the file"
          },
          "size_in_bytes": {
            "type": "integer",
            "description": "The size in bytes of the file"
          },
          "created_at": {
            "type": "string",
            "description": "The creation date"
          },
          "updated_at": {
            "type": "string",
            "description": "The last update date"
          }
        }
      },
      "ApprovalEvent": {
        "type": "object",
        "x-examples": {
          "Example 1": {
            "approval_event_id": 11991,
            "approval_request_id": 3123,
            "user_id": null,
            "event_datetime": "2025-03-04 00:01:26",
            "event_type": "submission",
            "user_name": "Automation",
            "event_notes": "This approval request was submitted automatically.",
            "created_at": "2025-03-04 00:01:26",
            "updated_at": "2025-03-04 00:01:26"
          }
        },
        "title": "ApprovalEvent",
        "description": "An event that occurs during an approval request lifecycle",
        "properties": {
          "approval_event_id": {
            "type": "integer",
            "description": "The unique identifier of the approval event"
          },
          "approval_request_id": {
            "type": "integer",
            "description": "The unique identifier of the approval request to which the event belongs to"
          },
          "user_id": {
            "description": "The unique identifier of the user to which the event belongs to.\nNull if the event was generated automatically.",
            "type": "integer",
            "nullable": true
          },
          "event_datetime": {
            "type": "string",
            "description": "The date and time in which the event occurred (UTC)"
          },
          "event_type": {
            "description": "This is an enumeration representing the possible types associated to an approval event.",
            "enum": [
              "submission",
              "approval",
              "rejection",
              "withdrawal"
            ]
          },
          "user_name": {
            "type": "string",
            "description": "The name of the user to which the envent belongs to"
          },
          "event_notes": {
            "type": "string",
            "description": "The notes related to the event"
          },
          "created_at": {
            "type": "string",
            "description": "The event creation date (UTC)"
          },
          "updated_at": {
            "type": "string",
            "description": "The event last update date (UTC)"
          }
        }
      },
      "ApprovalRequest": {
        "type": "object",
        "x-examples": {
          "Example 1": {
            "approval_request_id": 3123,
            "user_id": 43,
            "date_from": "2025-02-24",
            "date_to": "2025-03-02",
            "created_at": "2025-03-04 00:01:26",
            "updated_at": "2025-03-04 00:01:26",
            "status": "pending_approval",
            "total_time": 669,
            "total_expenses": null
          }
        },
        "properties": {
          "approval_request_id": {
            "type": "integer",
            "description": "The unique identifier of the approval request"
          },
          "user_id": {
            "type": "integer",
            "description": "The unique identifier of the user who created the approval request"
          },
          "date_from": {
            "type": "string",
            "description": "The start date of the approval request period"
          },
          "date_to": {
            "type": "string",
            "description": "The end date of the approval request period"
          },
          "created_at": {
            "type": "string",
            "description": "The date and time when the approval request was created"
          },
          "updated_at": {
            "type": "string",
            "description": "The date and time when the approval request was last updated"
          },
          "status": {
            "enum": [
              "pending_approval",
              "approved",
              "rejected",
              "unsubmitted"
            ],
            "description": "The current status of the approval request"
          },
          "total_time": {
            "type": "integer",
            "nullable": true,
            "description": "The total time in minutes included in this approval request"
          },
          "total_expenses": {
            "type": "number",
            "format": "float",
            "nullable": true,
            "description": "The total amount of expenses included in this approval request"
          }
        },
        "title": "ApprovalRequest"
      },
      "FeatureFlag": {
        "title": "FeatureFlag",
        "x-stoplight": {
          "id": "hybb9nvjwh0l4"
        },
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "x-stoplight": {
              "id": "ec14ws1s09ako"
            }
          },
          "value": {
            "type": "string",
            "x-stoplight": {
              "id": "4zzzq5fxp6ft7"
            }
          },
          "enabled": {
            "type": "boolean",
            "x-stoplight": {
              "id": "jfd7zgea0dowu"
            }
          }
        },
        "description": "A feature flag for internal development and release",
        "x-internal": true
      }
    }
  },
  "paths": {
    "/account": {
      "parameters": [],
      "put": {
        "tags": [
          "Accounts"
        ],
        "summary": "Update Account",
        "operationId": "put-account-account_id",
        "description": "Updates an account",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Account"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "avatar": {
                          "$ref": "#/components/schemas/Avatar"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "account_name": {
                    "type": "string",
                    "description": "The name of the account, usually the Company name."
                  },
                  "settings": {
                    "type": "object",
                    "properties": {
                      "entries_lock_automation": {
                        "type": "object",
                        "description": "Describes the automatic entry lock parameters",
                        "nullable": true,
                        "properties": {
                          "enabled": {
                            "type": "boolean",
                            "description": "Whether or not the entry lock automation is enabled\n\n"
                          },
                          "interval": {
                            "type": "string",
                            "description": "Interval of the entry lock\n\n",
                            "nullable": true
                          },
                          "interval_target": {
                            "type": "number",
                            "description": "Between 1 and 31 if the interval is monthly (the day of the month), Between 0 and 6i if the interval is weekly\n\n",
                            "nullable": true
                          }
                        }
                      },
                      "currencyCode": {
                        "type": "string",
                        "description": "Code of the used currency"
                      },
                      "adminNewEntryForOthers": {
                        "type": "boolean",
                        "description": "Possibility to add entries on behalf of other users"
                      },
                      "register_time_for_others_roles": {
                        "type": "array",
                        "description": "Roles that are allowed to register time on behalf of other users. Requires the add_time_for_other_users feature to be enabled.",
                        "items": {
                          "type": "string",
                          "enum": [
                            "owner",
                            "admin",
                            "gm",
                            "pm",
                            "all_managers"
                          ]
                        }
                      },
                      "showWorkingTime": {
                        "type": "boolean",
                        "description": "Whether or not the users can see their working time in their dashboard. (e.g. 7h of 8h)\n\n"
                      },
                      "memberAverageCost": {
                        "type": "number",
                        "description": "Indicates the average labour cost for the account members\n\n"
                      },
                      "authenticationMethod": {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "description": "Type of login method\n\n"
                          },
                          "idp_metadata_url": {
                            "type": "string",
                            "description": "Id of the identity provider (used with type = saml)\n\n"
                          },
                          "idp_entity_id": {
                            "type": "string",
                            "description": "Id of the identity provider (used with type = saml)\n\n"
                          },
                          "idp_sso_url": {
                            "type": "string",
                            "description": "Single Sign on URL (used with type = saml)\n\n"
                          },
                          "idp_cert": {
                            "type": "string",
                            "description": "Certificate of the identity provider (used with type = saml)\n\n"
                          },
                          "allow_password_login": {
                            "type": "boolean",
                            "description": "Whether or not the login with email + password is allowed\n\n"
                          }
                        }
                      },
                      "required_fields": {
                        "type": "array",
                        "x-stoplight": {
                          "id": "i3r9su7mpw2tz"
                        },
                        "description": "An array representing the required fields.\nAllowed values are entry_notes, to require entries to have notes, and expense_project, to require expenses to have a project.",
                        "items": {
                          "x-stoplight": {
                            "id": "um79kws0ji8ys"
                          },
                          "enum": [
                            "entry_notes",
                            "expense_project"
                          ]
                        }
                      },
                      "allow_apps": {
                        "type": "integer",
                        "x-stoplight": {
                          "id": "a7nle4q06frx2"
                        },
                        "minimum": 0,
                        "maximum": 1,
                        "exclusiveMinimum": false,
                        "exclusiveMaximum": false
                      }
                    }
                  }
                }
              }
            }
          },
          "description": "Account request"
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "get": {
        "summary": "Get Account",
        "operationId": "get-account",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Account"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "avatar": {
                          "$ref": "#/components/schemas/Avatar"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "description": "Gets the information on the user account",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Accounts"
        ]
      }
    },
    "/avatars": {
      "post": {
        "tags": [
          "Avatars"
        ],
        "summary": "Create an Avatar",
        "operationId": "post-avatar-avatar_id",
        "description": "Creates an avatar",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "image": {
                    "type": "string",
                    "description": "A file containing an image",
                    "format": "binary"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Identifier of the user which has this avatar",
                    "nullable": true
                  },
                  "account_id": {
                    "type": "integer",
                    "description": "Identifier of the account which has this avatar",
                    "nullable": true
                  }
                },
                "required": [
                  "image"
                ]
              }
            }
          },
          "description": ""
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Avatar"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "x-internal": true
      },
      "parameters": []
    },
    "/budgets": {
      "get": {
        "tags": [
          "Budgets"
        ],
        "operationId": "listBudgets",
        "description": "Get budgets list",
        "parameters": [
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "project_id",
            "description": "Identifier of the project to which the budget belongs"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {
                    "Example 1": {
                      "data": [
                        {
                          "budget_id": 1,
                          "project_id": 2,
                          "recurrence": 0,
                          "interval": -1,
                          "budget_minutes": 540,
                          "is_active": 1,
                          "period_start": null,
                          "period_end": null
                        },
                        {
                          "budget_id": 2,
                          "project_id": 3,
                          "recurrence": 0,
                          "interval": -1,
                          "budget_minutes": 1020,
                          "is_active": 1,
                          "period_start": null,
                          "period_end": null
                        }
                      ],
                      "links": {
                        "first": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                        "last": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                        "prev": null,
                        "next": null
                      },
                      "meta": {
                        "current_page": 1,
                        "from": 1,
                        "last_page": 1,
                        "links": [
                          {
                            "url": null,
                            "label": "&laquo; Previous",
                            "active": false
                          },
                          {
                            "url": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                            "label": "1",
                            "active": true
                          },
                          {
                            "url": null,
                            "label": "Next &raquo;",
                            "active": false
                          }
                        ],
                        "path": "https://track-api.lucensoftware.com/api/v1/budgets",
                        "per_page": 200,
                        "to": 126,
                        "total": 126
                      }
                    }
                  },
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Budget"
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "first": {
                          "type": "string"
                        },
                        "last": {
                          "type": "string"
                        },
                        "prev": {
                          "type": "string",
                          "nullable": true
                        },
                        "next": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "current_page": {
                          "type": "integer"
                        },
                        "from": {
                          "type": "integer"
                        },
                        "last_page": {
                          "type": "integer"
                        },
                        "links": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "nullable": true
                              },
                              "label": {
                                "type": "string"
                              },
                              "active": {
                                "type": "boolean"
                              }
                            }
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "per_page": {
                          "type": "integer"
                        },
                        "to": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "example-1": {
                    "value": {
                      "data": [
                        {
                          "budget_id": 0,
                          "project_id": 0,
                          "recurrence": 0,
                          "interval": 0,
                          "budget_minutes": 0,
                          "is_active": 0,
                          "period_start": "string",
                          "period_end": "string"
                        }
                      ],
                      "links": {
                        "first": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                        "last": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                        "prev": null,
                        "next": null
                      },
                      "meta": {
                        "current_page": 1,
                        "from": 1,
                        "last_page": 1,
                        "links": [
                          {
                            "url": null,
                            "label": "&laquo; Previous",
                            "active": false
                          },
                          {
                            "url": "https://track-api.lucensoftware.com/api/v1/budgets?page=1",
                            "label": "1",
                            "active": true
                          },
                          {
                            "url": null,
                            "label": "Next &raquo;",
                            "active": false
                          }
                        ],
                        "path": "https://track-api.lucensoftware.com/api/v1/budgets",
                        "per_page": 200,
                        "to": 126,
                        "total": 126
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "x-internal": true,
        "summary": "List Budgets"
      },
      "post": {
        "tags": [
          "Budgets"
        ],
        "summary": "Create a Budget",
        "operationId": "post-budget",
        "description": "Creates a budget",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Identifier of the project to which the budget belongs"
                  },
                  "recurrence": {
                    "type": "integer",
                    "enum": [
                      1,
                      2,
                      3
                    ],
                    "description": "Recurrence of the budget: 0 = no recurrence, 1 = weekly, 2 = monthly"
                  },
                  "interval": {
                    "type": "integer",
                    "description": "Recurrence of the budget: 0 = no recurrence, 1 = weekly, 2 = monthly",
                    "nullable": true
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "description": "The amount of minutes the budget represents"
                  }
                },
                "required": [
                  "project_id",
                  "recurrence",
                  "budget_minutes"
                ]
              }
            }
          },
          "description": ""
        },
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Budget"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/budgets/{budget}": {
      "get": {
        "tags": [
          "Budgets"
        ],
        "operationId": "get-budget-budget_id",
        "description": "Get a budget",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Budget"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "summary": "Get a Budget"
      },
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "budget",
          "description": "budget",
          "in": "path",
          "required": true
        }
      ],
      "put": {
        "summary": "Update a Budget",
        "operationId": "put-budget-budget_id",
        "description": "Updates a budget",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Budget"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "recurrence": {
                    "type": "integer",
                    "description": "Recurrence of the budget: 0 = no recurrence, 1 = weekly, 2 = monthly"
                  },
                  "interval": {
                    "type": "integer",
                    "description": "Day of budget reset: 1 to 31 if the budget is monthly, 0 to 6 if the budget is weekly"
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "description": "Day of budget reset: 1 to 31 if the budget is monthly, 0 to 6 if the budget is weekly"
                  }
                }
              }
            }
          },
          "description": ""
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Budgets"
        ]
      },
      "delete": {
        "summary": "Delete a Budget",
        "operationId": "delete-budget-budget_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a budget",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Budgets"
        ]
      }
    },
    "/clients": {
      "get": {
        "tags": [
          "Clients"
        ],
        "operationId": "list-clients",
        "description": "Get clients list",
        "parameters": [
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Searches in the client's name"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "member_ids",
            "description": "Gets only the clients that have projects there"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {
                    "Example 1": {
                      "data": [
                        {
                          "client_id": 10,
                          "name": "ACME spa",
                          "color": "#F8B59B"
                        },
                        {
                          "client_id": 11,
                          "name": "Cool Company inc.",
                          "color": "#EA0A8A"
                        }
                      ],
                      "links": {
                        "first": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                        "last": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                        "prev": null,
                        "next": null
                      },
                      "meta": {
                        "current_page": 1,
                        "from": 1,
                        "last_page": 1,
                        "links": [
                          {
                            "url": null,
                            "label": "&laquo; Previous",
                            "active": false
                          },
                          {
                            "url": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                            "label": "1",
                            "active": true
                          },
                          {
                            "url": null,
                            "label": "Next &raquo;",
                            "active": false
                          }
                        ],
                        "path": "https://track-api.lucensoftware.com/api/v1/clients",
                        "per_page": 100,
                        "to": 50,
                        "total": 50
                      }
                    }
                  },
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Client"
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "first": {
                          "type": "string"
                        },
                        "last": {
                          "type": "string"
                        },
                        "next": {
                          "type": "string",
                          "nullable": true
                        },
                        "prev": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "current_page": {
                          "type": "integer"
                        },
                        "from": {
                          "type": "integer"
                        },
                        "last_page": {
                          "type": "integer"
                        },
                        "links": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "nullable": true
                              },
                              "label": {
                                "type": "string"
                              },
                              "active": {
                                "type": "boolean"
                              }
                            }
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "per_page": {
                          "type": "integer"
                        },
                        "to": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                },
                "examples": {
                  "example-1": {
                    "value": {
                      "data": [
                        {
                          "client_id": 10,
                          "name": "ACME spa",
                          "color": "#F8B59B"
                        },
                        {
                          "client_id": 11,
                          "name": "Cool Company inc.",
                          "color": "#EA0A8A"
                        }
                      ],
                      "links": {
                        "first": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                        "last": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                        "prev": null,
                        "next": null
                      },
                      "meta": {
                        "current_page": 1,
                        "from": 1,
                        "last_page": 1,
                        "links": [
                          {
                            "url": null,
                            "label": "&laquo; Previous",
                            "active": false
                          },
                          {
                            "url": "https://track-api.lucensoftware.com/api/v1/clients?page=1",
                            "label": "1",
                            "active": true
                          },
                          {
                            "url": null,
                            "label": "Next &raquo;",
                            "active": false
                          }
                        ],
                        "path": "https://track-api.lucensoftware.com/api/v1/clients",
                        "per_page": 100,
                        "to": 50,
                        "total": 50
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "x-internal": false,
        "summary": "List Clients"
      },
      "post": {
        "tags": [
          "Clients"
        ],
        "summary": "Create a Client",
        "operationId": "post-client",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Client"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Creates a client",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the client"
                  },
                  "color": {
                    "type": "string",
                    "pattern": "#[0-9A-F]{6}",
                    "minLength": 7,
                    "maxLength": 7,
                    "example": "#FFAABB",
                    "description": "Color used in reports"
                  }
                },
                "required": [
                  "name",
                  "color"
                ]
              }
            }
          },
          "description": ""
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "parameters": []
    },
    "/clients/{client}": {
      "get": {
        "operationId": "get-client-client_id",
        "description": "Get a client",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Client"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "projects": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Project"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "summary": "Get a Client",
        "tags": [
          "Clients"
        ]
      },
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "client",
          "description": "client",
          "in": "path",
          "required": true
        }
      ],
      "put": {
        "summary": "Update a Client",
        "operationId": "put-client-client_id",
        "description": "Updates a client",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Client"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Color used in reports"
                  },
                  "color": {
                    "type": "string",
                    "description": "Color used in reports"
                  }
                },
                "required": [
                  "name",
                  "color"
                ]
              }
            }
          },
          "description": ""
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Clients"
        ]
      },
      "delete": {
        "summary": "Delete a Client",
        "operationId": "delete-client-client_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a client",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Clients"
        ]
      }
    },
    "/countries": {
      "get": {
        "tags": [
          "Countries"
        ],
        "operationId": "list-countries",
        "description": "Get countries list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "country_code": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      },
                      "company_tax": {
                        "type": "string"
                      },
                      "private_tax": {
                        "type": "string"
                      },
                      "vat_required": {
                        "type": "integer"
                      }
                    }
                  },
                  "x-examples": {
                    "Example 1": [
                      {
                        "country_code": "AD",
                        "name": "Andorra",
                        "company_tax": "0.00",
                        "private_tax": "0.00",
                        "vat_required": 0
                      },
                      {
                        "country_code": "AE",
                        "name": "United Arab Emirates",
                        "company_tax": "0.00",
                        "private_tax": "0.00",
                        "vat_required": 0
                      }
                    ]
                  }
                },
                "examples": {
                  "Countries": {
                    "value": [
                      {
                        "country_code": "AD",
                        "name": "Andorra",
                        "company_tax": "0.00",
                        "private_tax": "0.00",
                        "vat_required": 0
                      },
                      {
                        "country_code": "AE",
                        "name": "United Arab Emirates",
                        "company_tax": "0.00",
                        "private_tax": "0.00",
                        "vat_required": 0
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "summary": "List Countries"
      },
      "parameters": []
    },
    "/currencies": {
      "get": {
        "tags": [
          "Currencies"
        ],
        "operationId": "list-currencies",
        "description": "Get currencies list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "currency_code": {
                        "type": "string"
                      },
                      "name": {
                        "type": "string"
                      }
                    }
                  },
                  "x-examples": {
                    "Example 1": [
                      {
                        "currency_code": "AED",
                        "name": "UAE Dirham"
                      },
                      {
                        "currency_code": "AFN",
                        "name": "Afghani"
                      }
                    ]
                  }
                },
                "examples": {
                  "Countries": {
                    "value": [
                      {
                        "currency_code": "AED",
                        "name": "UAE Dirham"
                      },
                      {
                        "currency_code": "AFN",
                        "name": "Afghani"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "summary": "List Currencies"
      },
      "parameters": []
    },
    "/zones": {
      "get": {
        "operationId": "list-zones",
        "description": "Get zones list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "description": "application/json",
            "in": "header",
            "name": "Accept"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "x-examples": {
                    "Example 1": [
                      {
                        "zone_id": 1,
                        "country_code": "AD",
                        "name": "Europe/Andorra"
                      },
                      {
                        "zone_id": 2,
                        "country_code": "AE",
                        "name": "Asia/Dubai"
                      }
                    ]
                  },
                  "items": {
                    "$ref": "#/components/schemas/Zone"
                  }
                },
                "examples": {
                  "Example 1": {
                    "value": [
                      {
                        "zone_id": 1,
                        "country_code": "AD",
                        "name": "Europe/Andorra"
                      },
                      {
                        "zone_id": 2,
                        "country_code": "AE",
                        "name": "Asia/Dubai"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "summary": "List Zones",
        "tags": [
          "Zones"
        ]
      },
      "parameters": []
    },
    "/languages": {
      "get": {
        "operationId": "list-languages",
        "description": "Get languages list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "description": "application/json",
            "name": "Accept"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "x-examples": {},
                  "items": {
                    "$ref": "#/components/schemas/Language"
                  }
                },
                "examples": {
                  "Languages": {
                    "value": [
                      {
                        "language_code": "af-ZA",
                        "name": "Afrikaans (South Africa)"
                      },
                      {
                        "language_code": "ar-AE",
                        "name": "Arabic (U.A.E.)"
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "summary": "List Languages",
        "tags": [
          "Languages"
        ]
      },
      "parameters": []
    },
    "/entries/{entry}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "entry",
          "in": "path",
          "required": true,
          "description": "The id of the entry"
        }
      ],
      "get": {
        "summary": "Get Entries",
        "tags": [
          "Entries"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "x-examples": {},
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Entry"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-entries-entry_id",
        "description": "Get an entry",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update an Entry",
        "operationId": "put-entries-entry_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Entry"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Entries"
        ],
        "description": "Updates an entry",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project"
                  },
                  "phase_id": {
                    "type": "integer",
                    "description": "Unique identifier of the the phase which the entry belongs to"
                  },
                  "minutes": {
                    "type": "integer",
                    "description": "Amount of tracked time in minutes"
                  },
                  "date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "Date of the entry"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user that created the entry"
                  },
                  "entry_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the entry suggestion from which the entry is created"
                  },
                  "repeatable_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the repeatable entry suggestion from which the entry is created",
                    "nullable": true
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "billed": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3,
                    "description": "0 = Entry billable, 1 = Entry billed, 2 = Entry not billable"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Notes on the time entry"
                  },
                  "source": {
                    "type": "string",
                    "description": "Must be one of integration_code available or \"consistency\""
                  },
                  "source_text": {
                    "type": "string",
                    "description": "A text that describes the source of the entry"
                  },
                  "source_url": {
                    "type": "string",
                    "description": "A text that describes the source of the entry"
                  },
                  "origin_date": {
                    "type": "string",
                    "description": "Format Y-m-d required with repeatable_suggestion_id"
                  },
                  "time_from": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "vtnkak5shj4vo"
                    },
                    "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
                    "example": "2024-01-01 00:00:00",
                    "description": "When the Timeline view feature is enabled, this field is required when time_to is part of the request.\nIt indicates the starting time of a time entry.\n"
                  },
                  "time_to": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "vtnkak5shj4vo"
                    },
                    "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
                    "example": "2024-01-01 00:00:00",
                    "description": "When the Timeline view feature is enabled, this field is required when the parameter time_from is part of the request.\nIt indicates the ending time of a time entry.\nIt must be at least 1 minute after the new or existing time_from."
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an Entry",
        "operationId": "delete-entries-entry_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Entry"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Entries"
        ],
        "description": "Delete an entry",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/entries/{entry}/billing-status": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "entry",
          "in": "path",
          "required": true,
          "description": "The id of the entry"
        }
      ],
      "patch": {
        "summary": "Update an Entry's billing status",
        "operationId": "patch-entries-entry_id-billing-status",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Entry"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Entries"
        ],
        "description": "Updates an entry's billed status",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "x-internal": true,
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "billed": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3,
                    "description": "0 = Entry billable, 1 = Entry billed, 2 = Entry not billable"
                  }
                }
              }
            }
          }
        },
        "x-stoplight": {
          "id": "uzn1jb545ekbz"
        }
      }
    },
    "/entries": {
      "get": {
        "tags": [
          "Entries"
        ],
        "operationId": "list-entries",
        "description": "Get entries list",
        "parameters": [
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "member_ids",
            "description": "Get all the entries of the member identified by the user_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "entry_ids",
            "description": "Get all the entries identified by the entry_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "project_ids",
            "description": "Get all the entries of the projects identified by the project_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "phase_ids",
            "description": "Get all the entries of the phases identified by the phase_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "client_ids",
            "description": "Get all the entries of the projects having client identified by one of the client_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "group_ids",
            "description": "Get all the entries of the users in the groups identified by the user_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "category_ids",
            "description": "Get all the entries of the phases belonging to a category identified by one of the category_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "tag_list_ids",
            "description": "Get all the entries having tags belonging to a tag list identified by one of the category_id in this array"
          },
          {
            "schema": {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "tag_ids",
            "description": "Get all the entries having a tag identified by on of the tag_id in this array"
          },
          {
            "schema": {
              "type": "integer",
              "maximum": 3,
              "minimum": 0
            },
            "in": "query",
            "name": "billed_status",
            "description": "Get only the entry that have a given billed status: 0: Unbilled 1: Billed 2: Not billable 3: Billable"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "custom",
                "all",
                "week_last",
                "week_this",
                "month_last",
                "month_this",
                "days_7",
                "days_15",
                "days_30",
                "months_3",
                "months_6",
                "months_12",
                "yesterday",
                "today"
              ]
            },
            "in": "query",
            "name": "timeframe",
            "description": "Get only the entries in a given timeframe"
          },
          {
            "schema": {
              "type": "string",
              "example": "2023-01-01"
            },
            "in": "query",
            "name": "date_from",
            "example": "2023-01-01",
            "description": "Get only the entries that have date grater or equal to this date"
          },
          {
            "schema": {
              "type": "string",
              "example": "2023-01-01"
            },
            "in": "query",
            "name": "date_to",
            "example": "2023-01-01",
            "description": "Get only the entries that have date less or equal to this date"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Get entries that contain this text in the notes"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "description": "application/json",
            "name": "Accept"
          }
        ],
        "x-internal": false,
        "summary": "List Entries",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Entry"
                      }
                    },
                    "links": {
                      "type": "object",
                      "properties": {
                        "first": {
                          "type": "string"
                        },
                        "last": {
                          "type": "string"
                        },
                        "prev": {
                          "type": "string",
                          "nullable": true
                        },
                        "next": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "current_page": {
                          "type": "integer"
                        },
                        "from": {
                          "type": "integer"
                        },
                        "last_page": {
                          "type": "integer"
                        },
                        "links": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "nullable": true
                              },
                              "label": {
                                "type": "string"
                              },
                              "active": {
                                "type": "boolean"
                              }
                            }
                          }
                        },
                        "path": {
                          "type": "string"
                        },
                        "per_page": {
                          "type": "integer"
                        },
                        "to": {
                          "type": "integer"
                        },
                        "total": {
                          "type": "integer"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        }
      },
      "post": {
        "tags": [
          "Entries"
        ],
        "summary": "Create an Entry",
        "operationId": "post-entry",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Entry"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "type": "string"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              },
              "application/xml": {
                "schema": {
                  "allOf": [
                    {
                      "properties": {
                        "entry_id": {
                          "type": "integer"
                        },
                        "project_id": {
                          "type": "integer"
                        },
                        "phase_id": {
                          "type": "integer"
                        },
                        "phase_category_id": {
                          "type": "integer"
                        },
                        "user_id": {
                          "type": "integer"
                        },
                        "client_id": {
                          "type": "integer"
                        },
                        "entry_date": {
                          "type": "string"
                        },
                        "entry_minutes": {
                          "type": "integer"
                        },
                        "entry_time_from": {
                          "type": "string"
                        },
                        "entry_time_to": {
                          "type": "string"
                        },
                        "notes": {
                          "type": "string"
                        },
                        "billed": {
                          "type": "integer"
                        },
                        "project_name": {
                          "type": "string"
                        },
                        "task_name": {
                          "type": "string"
                        },
                        "task_category_name": {
                          "type": "string"
                        },
                        "user_name": {
                          "type": "string"
                        },
                        "client_name": {
                          "type": "string"
                        },
                        "project_color": {
                          "type": "string"
                        },
                        "source": {
                          "type": "string"
                        },
                        "source_text": {
                          "type": "string"
                        },
                        "source_url": {
                          "type": "string"
                        },
                        "source_id": {
                          "type": "string"
                        },
                        "source_data": {
                          "type": "string"
                        },
                        "locked": {
                          "type": "integer"
                        },
                        "locked_by_date": {
                          "type": "integer"
                        },
                        "locked_by_membership": {
                          "type": "integer"
                        },
                        "locked_by_apionly": {
                          "type": "integer"
                        },
                        "hourly_cost": {
                          "type": "string"
                        },
                        "cost": {
                          "type": "string"
                        },
                        "hourly_rate": {
                          "type": "string"
                        },
                        "revenue": {
                          "type": "string"
                        },
                        "profit": {
                          "type": "string"
                        },
                        "todo_id": {
                          "type": "integer",
                          "nullable": true
                        },
                        "tag_ids": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "user": {
                          "type": "object",
                          "properties": {
                            "user_id": {
                              "type": "integer"
                            },
                            "group_id": {
                              "type": "integer"
                            },
                            "email": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "experiments": {
                              "type": "array",
                              "items": {
                                "type": "object"
                              }
                            },
                            "enabled": {
                              "type": "integer"
                            },
                            "created_date": {
                              "type": "string"
                            },
                            "invited_at": {
                              "type": "string",
                              "nullable": true
                            },
                            "is_owner": {
                              "type": "boolean"
                            },
                            "is_admin": {
                              "type": "boolean"
                            },
                            "is_gm": {
                              "type": "boolean"
                            },
                            "settings_dailyemail_time": {
                              "type": "integer"
                            },
                            "session_last_time": {
                              "type": "integer"
                            },
                            "settings_emails_newsletter_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_developer_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_dailyrecap_enabled": {
                              "type": "integer"
                            },
                            "setup_completed": {
                              "type": "integer"
                            },
                            "setup_all_completed": {
                              "type": "integer"
                            },
                            "settings_emails_status_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_status_time": {
                              "type": "integer"
                            },
                            "settings_emails_status_day": {
                              "type": "integer"
                            },
                            "settings_emails_onboarding_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_automation_enabled": {
                              "type": "integer"
                            },
                            "user_hourly_cost": {
                              "type": "string"
                            },
                            "user_hourly_rate": {
                              "type": "string"
                            },
                            "role": {
                              "type": "string",
                              "nullable": true
                            },
                            "job_title": {
                              "type": "string"
                            },
                            "department": {
                              "type": "string",
                              "nullable": true
                            },
                            "setup_integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "setup_suggested_integration": {
                              "nullable": true,
                              "type": "string"
                            },
                            "client_id": {
                              "type": "string"
                            },
                            "working_time": {
                              "type": "integer"
                            },
                            "uniq_id": {
                              "type": "string"
                            },
                            "environment": {
                              "type": "string"
                            },
                            "health_score": {
                              "type": "integer"
                            },
                            "intercom_hash": {
                              "type": "string"
                            },
                            "workspace_access_level": {
                              "type": "string"
                            },
                            "is_microsoft": {
                              "type": "string"
                            },
                            "is_google": {
                              "type": "string"
                            },
                            "is_third_party": {
                              "type": "boolean"
                            },
                            "pending_setup": {
                              "type": "boolean"
                            },
                            "avatar": {
                              "type": "object",
                              "properties": {
                                "user_id": {
                                  "type": "integer"
                                },
                                "app_id": {
                                  "type": "integer"
                                },
                                "avatar_name": {
                                  "type": "string"
                                },
                                "avatar_url": {
                                  "type": "string"
                                },
                                "manual_upload": {
                                  "type": "integer"
                                },
                                "is_external": {
                                  "type": "integer"
                                }
                              }
                            }
                          }
                        },
                        "project": {
                          "type": "object",
                          "properties": {
                            "project_id": {
                              "type": "integer"
                            },
                            "name": {
                              "type": "string"
                            },
                            "client_id": {
                              "type": "integer"
                            },
                            "client_name": {
                              "type": "string"
                            },
                            "is_active": {
                              "type": "integer"
                            },
                            "is_billable": {
                              "type": "integer"
                            },
                            "is_public": {
                              "type": "integer"
                            },
                            "hourly_rate": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "budget_minutes": {
                              "type": "integer"
                            },
                            "total_minutes": {
                              "type": "integer"
                            },
                            "total_amount": {
                              "type": "string"
                            },
                            "total_tasks": {
                              "type": "integer"
                            },
                            "total_users": {
                              "type": "integer"
                            },
                            "total_billables": {
                              "type": "integer"
                            },
                            "integration_code": {
                              "type": "string"
                            },
                            "lastedit_user_id": {
                              "type": "integer"
                            },
                            "lastedit_user_name": {
                              "type": "string"
                            },
                            "lastedit_datetime": {
                              "type": "string"
                            },
                            "budget_alert_fired": {
                              "type": "integer"
                            },
                            "budget_alert_sent": {
                              "type": "integer"
                            },
                            "budget_tasks": {
                              "type": "integer"
                            },
                            "budget_users": {
                              "type": "integer"
                            },
                            "api_only": {
                              "type": "integer"
                            },
                            "client_color": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "is_demo": {
                              "type": "integer"
                            }
                          }
                        },
                        "phase": {
                          "type": "object",
                          "properties": {
                            "phase_id": {
                              "type": "integer"
                            },
                            "project_id": {
                              "type": "integer"
                            },
                            "name": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "is_open": {
                              "type": "integer"
                            },
                            "phase_category_id": {
                              "type": "integer"
                            },
                            "task_category_name": {
                              "type": "string"
                            },
                            "budget_minutes": {
                              "type": "integer"
                            },
                            "total_minutes": {
                              "type": "integer"
                            },
                            "total_billables": {
                              "type": "integer"
                            }
                          }
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Creates an entry",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "required": [
                  "project_id",
                  "phase_id",
                  "minutes",
                  "date"
                ],
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project"
                  },
                  "phase_id": {
                    "type": "integer",
                    "description": "Unique identifier of the the phase which the entry belongs to"
                  },
                  "minutes": {
                    "type": "integer",
                    "description": "Amount of tracked time in minutes"
                  },
                  "date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "Date of the entry"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user that created the entry"
                  },
                  "entry_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the entry suggestion from which the entry is created"
                  },
                  "repeatable_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the repeatable entry suggestion from which the entry is created",
                    "nullable": true
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "billed": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 3,
                    "description": "0 = Entry billable, 1 = Entry billed, 2 = Entry not billable"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Notes on the time entry"
                  },
                  "source": {
                    "type": "string",
                    "description": "Must be one of integration_code available or \"consistency\""
                  },
                  "source_text": {
                    "type": "string",
                    "description": "A text that describes the source of the entry"
                  },
                  "source_url": {
                    "type": "string",
                    "description": "A text that describes the source of the entry"
                  },
                  "origin_date": {
                    "type": "string",
                    "description": "Format Y-m-d required with repeatable_suggestion_id"
                  },
                  "time_from": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "vtnkak5shj4vo"
                    },
                    "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
                    "example": "2024-01-01 00:00:00",
                    "description": "When the Timeline view feature is enabled, this field is required.\nIt indicates the starting time of a time entry.\nIt must be at least 1 minute after time_from."
                  },
                  "time_to": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "vtnkak5shj4vo"
                    },
                    "pattern": "\\d{4}(.\\d{2}){2}(\\s|T)(\\d{2}.){2}\\d{2}",
                    "example": "2024-01-01 00:00:00",
                    "description": "When the Timeline view feature is enabled, this field is required.\nIt indicates the ending time of a time entry."
                  }
                }
              }
            }
          },
          "description": ""
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "parameters": []
    },
    "/timers": {
      "get": {
        "operationId": "list-timers",
        "description": "Get timers list",
        "parameters": [
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string",
              "example": "2023-01-01"
            },
            "in": "query",
            "name": "date_from",
            "example": "2023-01-01",
            "description": "Get only the timers that have date grater or equal to this date"
          },
          {
            "schema": {
              "type": "string",
              "example": "2023-01-01"
            },
            "in": "query",
            "name": "date_to",
            "example": "2023-01-01",
            "description": "Get only the timers that have date less or equal to this date"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "description": "application/json",
            "name": "Accept"
          }
        ],
        "x-internal": false,
        "summary": "List Timers",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Timer"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "project": {
                                "$ref": "#/components/schemas/Project"
                              },
                              "user": {
                                "allOf": [
                                  {
                                    "$ref": "#/components/schemas/User"
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "avatar": {
                                        "$ref": "#/components/schemas/Avatar"
                                      }
                                    }
                                  }
                                ]
                              },
                              "phase": {
                                "$ref": "#/components/schemas/Phase"
                              },
                              "tags": {
                                "type": "array",
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/Tag"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "tag_list": {
                                          "type": "string"
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string"
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Timers"
        ]
      },
      "post": {
        "summary": "Create a Timer",
        "operationId": "post-timer",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Timer"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "type": "string"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              },
              "application/xml": {
                "schema": {
                  "allOf": [
                    {
                      "properties": {
                        "entry_id": {
                          "type": "integer"
                        },
                        "project_id": {
                          "type": "integer"
                        },
                        "phase_id": {
                          "type": "integer"
                        },
                        "phase_category_id": {
                          "type": "integer"
                        },
                        "user_id": {
                          "type": "integer"
                        },
                        "client_id": {
                          "type": "integer"
                        },
                        "entry_date": {
                          "type": "string"
                        },
                        "entry_minutes": {
                          "type": "integer"
                        },
                        "entry_time_from": {
                          "type": "string"
                        },
                        "entry_time_to": {
                          "type": "string"
                        },
                        "notes": {
                          "type": "string"
                        },
                        "billed": {
                          "type": "integer"
                        },
                        "project_name": {
                          "type": "string"
                        },
                        "task_name": {
                          "type": "string"
                        },
                        "task_category_name": {
                          "type": "string"
                        },
                        "user_name": {
                          "type": "string"
                        },
                        "client_name": {
                          "type": "string"
                        },
                        "project_color": {
                          "type": "string"
                        },
                        "source": {
                          "type": "string"
                        },
                        "source_text": {
                          "type": "string"
                        },
                        "source_url": {
                          "type": "string"
                        },
                        "source_id": {
                          "type": "string"
                        },
                        "source_data": {
                          "type": "string"
                        },
                        "locked": {
                          "type": "integer"
                        },
                        "locked_by_date": {
                          "type": "integer"
                        },
                        "locked_by_membership": {
                          "type": "integer"
                        },
                        "locked_by_apionly": {
                          "type": "integer"
                        },
                        "hourly_cost": {
                          "type": "string"
                        },
                        "cost": {
                          "type": "string"
                        },
                        "hourly_rate": {
                          "type": "string"
                        },
                        "revenue": {
                          "type": "string"
                        },
                        "profit": {
                          "type": "string"
                        },
                        "todo_id": {
                          "type": "integer",
                          "nullable": true
                        },
                        "tag_ids": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "user": {
                          "type": "object",
                          "properties": {
                            "user_id": {
                              "type": "integer"
                            },
                            "group_id": {
                              "type": "integer"
                            },
                            "email": {
                              "type": "string"
                            },
                            "name": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "experiments": {
                              "type": "array",
                              "items": {
                                "type": "object"
                              }
                            },
                            "enabled": {
                              "type": "integer"
                            },
                            "created_date": {
                              "type": "string"
                            },
                            "invited_at": {
                              "type": "string",
                              "nullable": true
                            },
                            "is_owner": {
                              "type": "boolean"
                            },
                            "is_admin": {
                              "type": "boolean"
                            },
                            "is_gm": {
                              "type": "boolean"
                            },
                            "settings_dailyemail_time": {
                              "type": "integer"
                            },
                            "session_last_time": {
                              "type": "integer"
                            },
                            "settings_emails_newsletter_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_developer_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_dailyrecap_enabled": {
                              "type": "integer"
                            },
                            "setup_completed": {
                              "type": "integer"
                            },
                            "setup_all_completed": {
                              "type": "integer"
                            },
                            "settings_emails_status_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_status_time": {
                              "type": "integer"
                            },
                            "settings_emails_status_day": {
                              "type": "integer"
                            },
                            "settings_emails_onboarding_enabled": {
                              "type": "integer"
                            },
                            "settings_emails_automation_enabled": {
                              "type": "integer"
                            },
                            "user_hourly_cost": {
                              "type": "string"
                            },
                            "user_hourly_rate": {
                              "type": "string"
                            },
                            "role": {
                              "type": "string",
                              "nullable": true
                            },
                            "job_title": {
                              "type": "string"
                            },
                            "department": {
                              "type": "string",
                              "nullable": true
                            },
                            "setup_integrations": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            },
                            "setup_suggested_integration": {
                              "nullable": true,
                              "type": "string"
                            },
                            "client_id": {
                              "type": "string"
                            },
                            "working_time": {
                              "type": "integer"
                            },
                            "uniq_id": {
                              "type": "string"
                            },
                            "environment": {
                              "type": "string"
                            },
                            "health_score": {
                              "type": "integer"
                            },
                            "intercom_hash": {
                              "type": "string"
                            },
                            "workspace_access_level": {
                              "type": "string"
                            },
                            "is_microsoft": {
                              "type": "string"
                            },
                            "is_google": {
                              "type": "string"
                            },
                            "is_third_party": {
                              "type": "boolean"
                            },
                            "pending_setup": {
                              "type": "boolean"
                            },
                            "avatar": {
                              "type": "object",
                              "properties": {
                                "user_id": {
                                  "type": "integer"
                                },
                                "app_id": {
                                  "type": "integer"
                                },
                                "avatar_name": {
                                  "type": "string"
                                },
                                "avatar_url": {
                                  "type": "string"
                                },
                                "manual_upload": {
                                  "type": "integer"
                                },
                                "is_external": {
                                  "type": "integer"
                                }
                              }
                            }
                          }
                        },
                        "project": {
                          "type": "object",
                          "properties": {
                            "project_id": {
                              "type": "integer"
                            },
                            "name": {
                              "type": "string"
                            },
                            "client_id": {
                              "type": "integer"
                            },
                            "client_name": {
                              "type": "string"
                            },
                            "is_active": {
                              "type": "integer"
                            },
                            "is_billable": {
                              "type": "integer"
                            },
                            "is_public": {
                              "type": "integer"
                            },
                            "hourly_rate": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "budget_minutes": {
                              "type": "integer"
                            },
                            "total_minutes": {
                              "type": "integer"
                            },
                            "total_amount": {
                              "type": "string"
                            },
                            "total_tasks": {
                              "type": "integer"
                            },
                            "total_users": {
                              "type": "integer"
                            },
                            "total_billables": {
                              "type": "integer"
                            },
                            "integration_code": {
                              "type": "string"
                            },
                            "lastedit_user_id": {
                              "type": "integer"
                            },
                            "lastedit_user_name": {
                              "type": "string"
                            },
                            "lastedit_datetime": {
                              "type": "string"
                            },
                            "budget_alert_fired": {
                              "type": "integer"
                            },
                            "budget_alert_sent": {
                              "type": "integer"
                            },
                            "budget_tasks": {
                              "type": "integer"
                            },
                            "budget_users": {
                              "type": "integer"
                            },
                            "api_only": {
                              "type": "integer"
                            },
                            "client_color": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "is_demo": {
                              "type": "integer"
                            }
                          }
                        },
                        "phase": {
                          "type": "object",
                          "properties": {
                            "phase_id": {
                              "type": "integer"
                            },
                            "project_id": {
                              "type": "integer"
                            },
                            "name": {
                              "type": "string"
                            },
                            "color": {
                              "type": "string"
                            },
                            "is_open": {
                              "type": "integer"
                            },
                            "phase_category_id": {
                              "type": "integer"
                            },
                            "task_category_name": {
                              "type": "string"
                            },
                            "budget_minutes": {
                              "type": "integer"
                            },
                            "total_minutes": {
                              "type": "integer"
                            },
                            "total_billables": {
                              "type": "integer"
                            }
                          }
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Creates a timer",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project"
                  },
                  "phase_id": {
                    "type": "integer",
                    "description": "Unique identifier of the the phase which the timer belongs to"
                  },
                  "date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "Date of the timer"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user that created the timer"
                  },
                  "entry_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the entry suggestion from which the timer is created"
                  },
                  "repeatable_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the repeatable entry suggestion from which the timer is created",
                    "nullable": true
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "notes": {
                    "type": "string",
                    "description": "Notes on the timer"
                  },
                  "source": {
                    "type": "string",
                    "description": "Must be one of integration_code available or \"consistency\""
                  },
                  "source_text": {
                    "type": "string",
                    "description": "A text that describes the source of the timer"
                  },
                  "source_url": {
                    "type": "string",
                    "description": "A text that describes the source of the timer"
                  },
                  "origin_date": {
                    "type": "string",
                    "description": "Format Y-m-d required with repeatable_suggestion_id"
                  },
                  "seconds": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 86400,
                    "exclusiveMaximum": true,
                    "exclusiveMinimum": true
                  },
                  "timer_status": {
                    "type": "string",
                    "enum": [
                      "running",
                      "paused"
                    ]
                  }
                },
                "required": [
                  "project_id",
                  "phase_id",
                  "timer_status"
                ]
              }
            }
          },
          "description": ""
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Timers"
        ]
      },
      "parameters": []
    },
    "/timers/{timer}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "timer",
          "in": "path",
          "required": true,
          "description": "The "
        }
      ],
      "get": {
        "summary": "Get a Timer",
        "tags": [
          "Timers"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Timer"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "project": {
                                "$ref": "#/components/schemas/Project"
                              },
                              "user": {
                                "allOf": [
                                  {
                                    "$ref": "#/components/schemas/User"
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "avatar": {
                                        "$ref": "#/components/schemas/Avatar"
                                      }
                                    }
                                  }
                                ]
                              },
                              "phase": {
                                "$ref": "#/components/schemas/Phase"
                              },
                              "tags": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Tag"
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string"
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-timers-timer_id",
        "description": "Get a timer",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update a Timer",
        "operationId": "put-timers-timer_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Timer"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/User"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "avatar": {
                                  "$ref": "#/components/schemas/Avatar"
                                }
                              }
                            }
                          ]
                        },
                        "phase": {
                          "$ref": "#/components/schemas/Phase"
                        },
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Updates a timer",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project"
                  },
                  "phase_id": {
                    "type": "integer",
                    "description": "Unique identifier of the the phase which the timer belongs to"
                  },
                  "date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "Date of the timer"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user that created the timer"
                  },
                  "entry_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the entry suggestion from which the timer is created"
                  },
                  "repeatable_suggestion_id": {
                    "type": "integer",
                    "description": "A unique identifier of the repeatable entry suggestion from which the timer is created",
                    "nullable": true
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id",
                    "items": {
                      "type": "integer"
                    }
                  },
                  "notes": {
                    "type": "string",
                    "description": "Notes on the timer"
                  },
                  "source": {
                    "type": "string",
                    "description": "Must be one of integration_code available or \"consistency\""
                  },
                  "source_text": {
                    "type": "string",
                    "description": "A text that describes the source of the timer"
                  },
                  "source_url": {
                    "type": "string",
                    "description": "A text that describes the source of the timer"
                  },
                  "origin_date": {
                    "type": "string",
                    "description": "Format Y-m-d required with repeatable_suggestion_id"
                  },
                  "seconds": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 86400,
                    "exclusiveMaximum": true,
                    "exclusiveMinimum": true
                  },
                  "timer_status": {
                    "type": "string",
                    "enum": [
                      "running",
                      "paused"
                    ]
                  }
                },
                "required": [
                  "project_id",
                  "phase_id",
                  "timer_status"
                ]
              }
            }
          },
          "description": ""
        },
        "tags": [
          "Timers"
        ]
      },
      "delete": {
        "summary": "Delete a Timer",
        "operationId": "delete-timers-timer_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Delete a timer",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Timers"
        ]
      }
    },
    "/entry-suggestions": {
      "get": {
        "summary": "List Entry Suggestions",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/EntrySuggestion"
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer",
                      "nullable": true
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer",
                      "nullable": true
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              },
              "application/xml": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/EntrySuggestion"
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                },
                "examples": {}
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-entry-suggestions",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "in": "query",
            "name": "no_paginate",
            "description": "Get a full list of suggestions without paginating the results"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "custom",
                "all",
                "week_last",
                "week_this",
                "month_last",
                "month_this",
                "days_7",
                "days_15",
                "days_30",
                "months_3",
                "months_6",
                "months_12",
                "yesterday",
                "today"
              ]
            },
            "in": "query",
            "name": "timeframe",
            "description": "Get only the suggestions in a given timeframe"
          },
          {
            "schema": {
              "type": "string",
              "example": "2023-01-01"
            },
            "in": "query",
            "name": "date_from",
            "description": "Get only the suggestions that have date grater or equal to this date"
          },
          {
            "schema": {
              "type": "string",
              "default": "2023-01-31"
            },
            "in": "query",
            "name": "date_to",
            "description": "Get only the suggestions that have date less or equal to this date"
          }
        ],
        "description": "Get a list of Entry suggestions for a given timeframe",
        "tags": [
          "EntrySuggestions"
        ]
      }
    },
    "/entry-suggestions/{entry_suggestion}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "entry_suggestion",
          "description": "entry_suggestion_id",
          "in": "path",
          "required": true
        }
      ],
      "delete": {
        "summary": "Delete an Entry Suggestion",
        "operationId": "delete-entry-suggestions-entry_suggestion_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes an entry suggestion",
        "tags": [
          "EntrySuggestions"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/groups": {
      "get": {
        "summary": "List Groups",
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Group"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "users": {
                                "type": "array",
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/User"
                                    },
                                    {
                                      "type": "object",
                                      "required": [
                                        "pivot"
                                      ],
                                      "properties": {
                                        "pivot": {
                                          "type": "object",
                                          "properties": {
                                            "is_gm": {
                                              "type": "boolean"
                                            }
                                          }
                                        },
                                        "avatar": {
                                          "$ref": "#/components/schemas/Avatar"
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          }
        },
        "operationId": "get-groups",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Get the list of all the groups"
      },
      "post": {
        "summary": "Create a Group",
        "operationId": "post-groups-group_id",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              },
              "application/xml": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the group"
                  },
                  "color": {
                    "type": "string",
                    "description": "The color used for reporting"
                  }
                }
              }
            }
          }
        },
        "description": "Create Group",
        "tags": [
          "Groups"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/groups/{group}": {
      "get": {
        "summary": "Get a Group",
        "tags": [
          "Groups"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Group"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "is_gm": {
                                        "type": "boolean"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "projects": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "project_id": {
                                "type": "integer"
                              },
                              "name": {
                                "type": "string"
                              },
                              "is_public": {
                                "type": "integer"
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Get a group"
      },
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "group",
          "description": "group_id",
          "in": "path",
          "required": true
        }
      ],
      "put": {
        "summary": "Update a Group",
        "operationId": "put-groups-group_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Group"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "description": "Name of the group"
                  },
                  "color": {
                    "type": "string",
                    "maxLength": 7,
                    "minLength": 7,
                    "description": "The color used for reporting"
                  }
                }
              }
            }
          },
          "description": ""
        },
        "tags": [
          "Groups"
        ],
        "description": "Update a Group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "delete": {
        "summary": "Delete a Group",
        "operationId": "delete-groups-group_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Groups"
        ],
        "description": "Delete a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/groups/{group}/users/{user}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "group",
          "description": "group_id",
          "in": "path",
          "required": true
        },
        {
          "schema": {
            "type": "string"
          },
          "name": "user",
          "description": "user_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Create Group-User relationship",
        "operationId": "post-groups-users",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "is_gm": {
                    "type": "boolean",
                    "description": "Tells if the user is group manager of the group"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Groups",
          "Users"
        ],
        "description": "Attach a user to a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "x-internal": true
      },
      "delete": {
        "summary": "Delete Group-User relationship",
        "operationId": "delete-groups-users",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Groups",
          "Users"
        ],
        "description": "Removed a user from a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update Group-User relationship",
        "operationId": "put-groups-users",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "is_gm": {
                    "type": "boolean",
                    "description": "Tells if the user is group manager of the group"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Groups",
          "Users"
        ],
        "description": "Updates the relationship between a user and a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/groups/{group}/projects/{project}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "group",
          "description": "group_id",
          "in": "path",
          "required": true
        },
        {
          "schema": {
            "type": "string"
          },
          "name": "project",
          "description": "project_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Create Group-Project relationship",
        "operationId": "post-groups-projects",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Groups",
          "Projects"
        ],
        "description": "Attach a project to a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "delete": {
        "summary": "Delete Group-Project relationship",
        "operationId": "delete-groups-projects",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Groups",
          "Projects"
        ],
        "description": "Removed a project from a group",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/phases": {
      "get": {
        "summary": "List Phases",
        "tags": [
          "Phases"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Phase"
                          }
                        ]
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-phases",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Get phases containing this text in the name"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "in": "query",
            "name": "active",
            "description": "Get only active or inactive phases"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "in": "query",
            "name": "project_id",
            "description": "Get phases belonging to a project"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          }
        ],
        "description": "List all the phases"
      },
      "post": {
        "summary": "Create a Phase",
        "operationId": "post-phases",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Phase"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Phases"
        ],
        "description": "Create a new phase",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the phase\n"
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "description": "Amount of budgeted time for theis phase. The sum of the budget_minutes of the phases must not be grater than the budgeted time for the project"
                  },
                  "project_id": {
                    "type": "integer",
                    "description": "Amount of budgeted time for theis phase. The sum of the budget_minutes of the phases must not be grater than the budgeted time for the project"
                  },
                  "phase_category_id": {
                    "type": "integer",
                    "description": "Unique identifier of the phase category which the phase belongs to"
                  }
                },
                "required": [
                  "name",
                  "budget_minutes",
                  "project_id"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/phases/{phase}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "phase",
          "description": "phase_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Phase",
        "tags": [
          "Phases"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Phase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "phase_category": {
                          "$ref": "#/components/schemas/PhaseCategory"
                        },
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-phases-phase_id",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Gets a phase"
      },
      "put": {
        "summary": "Update a Phase",
        "operationId": "put-phases-phase_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Phase"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "phase_category": {
                          "$ref": "#/components/schemas/PhaseCategory"
                        },
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Phases"
        ],
        "description": "Updates a phase",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project which the phase belongs to"
                  },
                  "name": {
                    "type": "string",
                    "description": "The name of the phase"
                  },
                  "is_open": {
                    "type": "integer",
                    "description": "Whether or not the phase is archived"
                  },
                  "phase_category_id": {
                    "type": "integer",
                    "description": "Unique identifier of the phase category which the phase belongs to"
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "description": "Amount of budgeted time for theis phase. The sum of the budget_minutes of the phases must not be grater than the budgeted time for the project\n\n"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a Phase",
        "operationId": "delete-phases-phase_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Phases"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Deletes a phase"
      }
    },
    "/phase-categories": {
      "get": {
        "summary": "List Phase Categories",
        "tags": [
          "PhaseCategories"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/PhaseCategory"
                          }
                        ]
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-phase-categories",
        "description": "Get the list of the phase categories",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Full text search string"
          }
        ]
      },
      "post": {
        "summary": "Create a Phase Category",
        "operationId": "post-phase-categories",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhaseCategory"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "PhaseCategories"
        ],
        "description": "Creates a phase category",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the phase category"
                  },
                  "color": {
                    "type": "string",
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  }
                },
                "required": [
                  "name"
                ]
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/phase-categories/{phase_category}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "phase_category",
          "description": "phase_category_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Phase Category",
        "tags": [
          "PhaseCategories"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhaseCategory"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-phase-categories-phase_category_id",
        "description": "Get a phase category",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update a Phase Category",
        "operationId": "put-phase-categories-phase_category_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PhaseCategory"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "PhaseCategories"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the phase category"
                  },
                  "color": {
                    "type": "string",
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  }
                }
              }
            }
          }
        },
        "description": "Update a phase category",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "delete": {
        "summary": "Delete a Phase Category",
        "operationId": "delete-phase-categories-phase_category_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "PhaseCategories"
        ],
        "description": "Delete a phase category",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/projects": {
      "get": {
        "summary": "List Projects",
        "tags": [
          "Projects"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Project"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "users": {
                                "type": "array",
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/User"
                                    },
                                    {
                                      "type": "object",
                                      "required": [
                                        "pivot"
                                      ],
                                      "properties": {
                                        "pivot": {
                                          "type": "object",
                                          "properties": {
                                            "is_pm": {
                                              "type": "boolean"
                                            },
                                            "is_member": {
                                              "type": "boolean"
                                            },
                                            "is_favorited": {
                                              "type": "boolean"
                                            },
                                            "budget_minutes": {
                                              "type": "integer"
                                            },
                                            "hourly_rate": {
                                              "type": "string"
                                            },
                                            "last_used": {
                                              "type": "string"
                                            },
                                            "last_used_phase_id": {
                                              "type": "integer"
                                            }
                                          }
                                        }
                                      }
                                    }
                                  ]
                                }
                              },
                              "budget": {
                                "$ref": "#/components/schemas/Budget"
                              },
                              "phases": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "$ref": "#/components/schemas/Phase"
                                }
                              },
                              "groups": {
                                "type": "array",
                                "nullable": true,
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/Group"
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string"
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-projects",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "description": "Get only public projects",
            "in": "query",
            "name": "public"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "description": "Get only active projects",
            "in": "query",
            "name": "active"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "description": "Get only billable projects",
            "in": "query",
            "name": "billable"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "in": "query",
            "name": "load",
            "explode": true,
            "description": "Possible values: users,budget,phases,groups"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Full text search"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "client_id",
            "description": "Get projects belonging to a client identified by this parameter"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "user_id",
            "description": "Search project in which the user is in the team"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          }
        ],
        "description": "Get a list of projects"
      },
      "post": {
        "summary": "Create a Project",
        "operationId": "post-projects",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Project"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "description": "The project's name"
                  },
                  "color": {
                    "type": "string",
                    "minLength": 7,
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  },
                  "hourly_rate": {
                    "type": "number",
                    "description": "The color used for reporting\n\n",
                    "nullable": true
                  },
                  "is_public": {
                    "type": "boolean",
                    "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it"
                  },
                  "client_id": {
                    "type": "integer",
                    "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it",
                    "nullable": true
                  },
                  "is_billable": {
                    "type": "boolean",
                    "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it"
                  },
                  "api_only": {
                    "type": "boolean",
                    "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it"
                  },
                  "description": {
                    "type": "string",
                    "description": "A text description of the project"
                  }
                },
                "required": [
                  "name",
                  "color"
                ]
              }
            }
          }
        },
        "description": "Creates a project",
        "tags": [
          "Projects"
        ]
      }
    },
    "/projects/{project}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "project",
          "description": "project_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Project",
        "tags": [
          "Projects"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "phases": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Phase"
                          }
                        },
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "is_pm": {
                                        "type": "boolean"
                                      },
                                      "is_member": {
                                        "type": "boolean"
                                      },
                                      "is_favorited": {
                                        "type": "boolean"
                                      },
                                      "budget_minutes": {
                                        "type": "integer"
                                      },
                                      "hourly_rate": {
                                        "type": "number"
                                      },
                                      "last_used": {
                                        "type": "string"
                                      },
                                      "last_used_phase_id": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "budget": {
                          "$ref": "#/components/schemas/Budget"
                        },
                        "client": {
                          "$ref": "#/components/schemas/Client"
                        },
                        "groups": {
                          "type": "array",
                          "nullable": true,
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Group"
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-projects-project_id",
        "description": "Gets a project",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update a Project",
        "operationId": "put-projects-project_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "phases": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Phase"
                          }
                        },
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "is_pm": {
                                        "type": "boolean"
                                      },
                                      "is_member": {
                                        "type": "boolean"
                                      },
                                      "is_favorited": {
                                        "type": "boolean"
                                      },
                                      "budget_minutes": {
                                        "type": "integer"
                                      },
                                      "hourly_rate": {
                                        "type": "number"
                                      },
                                      "last_used": {
                                        "type": "string"
                                      },
                                      "last_used_phase_id": {
                                        "type": "integer"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "budget": {
                          "$ref": "#/components/schemas/Budget"
                        },
                        "client": {
                          "$ref": "#/components/schemas/Client"
                        },
                        "groups": {
                          "type": "array",
                          "nullable": true,
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Group"
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Projects"
        ],
        "description": "Updates a project",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 3,
                    "description": "The project's name"
                  },
                  "color": {
                    "type": "string",
                    "minLength": 7,
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  },
                  "hourly_rate": {
                    "type": "number",
                    "description": "The color used for reporting\n\n",
                    "nullable": true
                  },
                  "is_public": {
                    "type": "boolean",
                    "description": "Whether or not the project is public, meaning that it is visible by all the users in the workspace and everybody can track time on it"
                  },
                  "client_id": {
                    "type": "integer",
                    "description": "Unique identifier of a client that the project belongs to",
                    "nullable": true
                  },
                  "is_billable": {
                    "type": "boolean",
                    "description": "Whether or not the project is billable per hour"
                  },
                  "api_only": {
                    "type": "boolean",
                    "description": "Whether or not the project is usable for tracking time only using the apis."
                  },
                  "description": {
                    "type": "string",
                    "description": "A text description of the project"
                  },
                  "has_todos": {
                    "type": "boolean",
                    "x-stoplight": {
                      "id": "potbwj54b9bct"
                    },
                    "description": "false if the project doesn't have the tasks section.\ntrue otherwise."
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a Project",
        "operationId": "delete-projects-project_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a project",
        "tags": [
          "Projects"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      }
    },
    "/projects/{project}/users/{user}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "project",
          "description": "project_id",
          "in": "path",
          "required": true
        },
        {
          "schema": {
            "type": "string"
          },
          "name": "user",
          "description": "user_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Create Project-User relationship",
        "operationId": "post-projects-users",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "is_pm": {
                                        "type": "boolean",
                                        "description": "Whether or not the user is project manager of the project"
                                      },
                                      "is_favorited": {
                                        "type": "boolean",
                                        "description": "Whether or not the project is favorited by the user"
                                      },
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The minutes budgeted for this user in this project"
                                      },
                                      "hourly_rate": {
                                        "type": "number",
                                        "minimum": 0,
                                        "description": "The hourly rate for this user in this project. Takes precedence over the hourly rate at project level and hourly rate at account level"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Projects",
          "Users"
        ],
        "description": "Attach a user to a project",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "is_pm": {
                    "type": "boolean",
                    "description": "Whether or not the user is project manager of the project"
                  },
                  "is_favorited": {
                    "type": "boolean",
                    "description": "Whether or not the project is favorited by the user"
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The minutes budgeted for this user in this project"
                  },
                  "hourly_rate": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The hourly rate for this user in this project. Takes precedence over the hourly rate at project level and hourly rate at account level"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete Project-User relationship",
        "operationId": "delete-projects-users",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "tags": [
          "Projects",
          "Users"
        ],
        "description": "Removed a user from a project",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ]
      },
      "put": {
        "summary": "Update Project-User relationship",
        "operationId": "put-projects-users",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "is_pm": {
                    "type": "boolean",
                    "description": "Whether or not the user is project manager of the project"
                  },
                  "is_favorited": {
                    "type": "boolean",
                    "description": "Whether or not the project is favorited by the user"
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The minutes budgeted for this user in this project"
                  },
                  "hourly_rate": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The hourly rate for this user in this project. Takes precedence over the hourly rate at project level and hourly rate at account level"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "is_pm": {
                                        "type": "boolean",
                                        "description": "Whether or not the user is project manager of the project"
                                      },
                                      "is_favorited": {
                                        "type": "boolean",
                                        "description": "Whether or not the project is favorited by the user"
                                      },
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The minutes budgeted for this user in this project"
                                      },
                                      "hourly_rate": {
                                        "type": "number",
                                        "minimum": 0,
                                        "description": "The hourly rate for this user in this project. Takes precedence over the hourly rate at project level and hourly rate at account level"
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Updates the relationship between a project and a user",
        "tags": [
          "Projects",
          "Users"
        ]
      }
    },
    "/tags": {
      "get": {
        "summary": "List Tags",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Tag"
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-tags",
        "tags": [
          "Tags"
        ],
        "description": "Get list of tags",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "name",
            "description": "Text search in name"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "tag_list_id",
            "description": "Id of a TagList"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          }
        ],
        "x-internal": false
      },
      "post": {
        "summary": "Create a Tag",
        "operationId": "post-tags",
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Tag"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tag_list": {
                          "$ref": "#/components/schemas/TagList"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Tags"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Creates a tag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the tag"
                  },
                  "tag_list_id": {
                    "type": "integer",
                    "description": "Unique identifier of the tag list which the tag belongs to"
                  }
                },
                "required": [
                  "name",
                  "tag_list_id"
                ]
              }
            }
          }
        },
        "x-internal": false
      }
    },
    "/tags/{tag}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "tag",
          "description": "tag_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Tag",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Tag"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tag_list": {
                          "$ref": "#/components/schemas/TagList"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-tags-tag_id",
        "description": "Get a single tag",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Tags"
        ],
        "x-internal": false
      },
      "put": {
        "summary": "Update a Tag",
        "operationId": "put-tags-tag_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Tag"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tag_list": {
                          "$ref": "#/components/schemas/TagList"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Tags"
        ],
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "description": "Updates a tag",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the tag"
                  },
                  "color": {
                    "type": "string",
                    "minLength": 7,
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  },
                  "tag_list_id": {
                    "type": "integer",
                    "description": "Unique identifier of the tag list which the tag belongs to"
                  }
                }
              }
            }
          }
        },
        "x-internal": false
      },
      "delete": {
        "summary": "Delete a Tag",
        "operationId": "delete-tags-tag_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a tag",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Tags"
        ],
        "x-internal": false
      }
    },
    "/tag-lists": {
      "get": {
        "tags": [
          "TagLists"
        ],
        "operationId": "listTagLists",
        "description": "Get tag lists list",
        "parameters": [
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "project_id",
            "description": "Get tag lists belonging to a project"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "current_page": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/TagList"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "tags": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Tag"
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "x-internal": false,
        "summary": "List Tag Lists"
      },
      "post": {
        "tags": [
          "TagLists"
        ],
        "summary": "Create a Tag List",
        "operationId": "post-tag-list",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TagList"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Creates a tag list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the tag list"
                  },
                  "color": {
                    "type": "string",
                    "minLength": 7,
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  },
                  "text_color": {
                    "type": "string",
                    "minLength": 4,
                    "maxLength": 7,
                    "description": "The color of the text used for reporting"
                  }
                }
              }
            }
          }
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "x-internal": false
      },
      "parameters": []
    },
    "/tag-lists/{tag_list}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "tag_list",
          "description": "tag_list_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Tag List",
        "tags": [
          "TagLists"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TagList"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-tag-lists-tag_list_id",
        "description": "Gets a single tag list",
        "x-internal": false
      },
      "put": {
        "summary": "Update a Tag List",
        "operationId": "put-tag-lists-tag_list_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TagList"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Tag"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "TagLists"
        ],
        "description": "Updates a tag list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The name of the tag list"
                  },
                  "color": {
                    "type": "string",
                    "minLength": 7,
                    "maxLength": 7,
                    "description": "The color used for reporting"
                  },
                  "text_color": {
                    "type": "string",
                    "minLength": 4,
                    "maxLength": 7,
                    "description": "The color of the text used for reporting"
                  }
                }
              }
            }
          }
        },
        "x-internal": false
      },
      "delete": {
        "summary": "Delete a Tag List",
        "operationId": "delete-tag-lists-tag_list_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "TagLists"
        ],
        "description": "Deletes a tag list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "x-internal": false
      }
    },
    "/projects/{project}/tag-lists/{tag_list}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "project",
          "description": "project_id",
          "in": "path",
          "required": true
        },
        {
          "schema": {
            "type": "string"
          },
          "name": "tag_list",
          "description": "tag_list_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Create Project-Tag List relationship",
        "operationId": "post-projects-project_id-tag-lists-tag_list_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tag_lists": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/TagList"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "required": {
                                        "type": "boolean",
                                        "description": "Whether or not the tag is required for time entries of this project"
                                      },
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The budgeted minutes allocated to this tag list on this project",
                                        "nullable": true
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Create Project-Tag list relationship",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "required": {
                    "type": "boolean",
                    "description": "Whether or not the tag is required for time entries of this project",
                    "nullable": true
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The budgeted minutes allocated to this tag list on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget_amount": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The budgeted amount allocated to this tag list on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget": {
                    "type": "object",
                    "properties": {
                      "budget_minutes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The budgeted minutes allocated to this tag list on this project",
                        "nullable": true
                      },
                      "budget_amount": {
                        "type": "number",
                        "minimum": 0,
                        "description": "The budgeted amount allocated to this tag list on this project",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Projects",
          "TagLists"
        ]
      },
      "put": {
        "summary": "Update Project-Tag List relationship",
        "operationId": "put-projects-project_id-tag-lists-tag_list_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tag_lists": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/TagList"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "required": {
                                        "type": "boolean"
                                      },
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "nullable": true
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "required": {
                    "type": "boolean",
                    "nullable": true
                  },
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The budgeted minutes allocated to this tag list on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget_amount": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The budgeted amount allocated to this tag list on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget": {
                    "type": "object",
                    "properties": {
                      "budget_minutes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The budgeted minutes allocated to this list tag on this project",
                        "nullable": true
                      },
                      "budget_amount": {
                        "type": "number",
                        "minimum": 0,
                        "description": "The budgeted amount allocated to this tag list on this project",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Update project-tag list relationship",
        "tags": [
          "Projects",
          "TagLists"
        ]
      },
      "delete": {
        "summary": "Delete Project-Tag List relationship",
        "operationId": "delete-projects-project_id-tag-lists-tag_list_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Projects",
          "TagLists"
        ],
        "description": "Remove project-tag list relationship"
      }
    },
    "/projects/{project}/tags/{tag}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "project",
          "description": "project_id",
          "in": "path",
          "required": true
        },
        {
          "schema": {
            "type": "string"
          },
          "name": "tag",
          "description": "tag_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Create Project-Tag relationship",
        "operationId": "post-projects-project_id-tag-tag_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The budgeted minutes allocated to this tag on this project",
                                        "nullable": true
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Create Project-Tag list relationship",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The budgeted minutes allocated to this tag on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget_amount": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The budgeted amount allocated to this tag on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget": {
                    "type": "object",
                    "properties": {
                      "budget_minutes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The budgeted minutes allocated to this tag on this project",
                        "nullable": true
                      },
                      "budget_amount": {
                        "type": "number",
                        "minimum": 0,
                        "description": "The budgeted amount allocated to this tag on this project",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Projects",
          "TagLists"
        ]
      },
      "put": {
        "summary": "Update Project-Tag relationship",
        "operationId": "put-projects-project_id-tag-tag_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Project"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "required": [
                                  "pivot"
                                ],
                                "properties": {
                                  "pivot": {
                                    "type": "object",
                                    "properties": {
                                      "budget_minutes": {
                                        "type": "integer",
                                        "minimum": 0,
                                        "description": "The budgeted minutes allocated to this tag on this project",
                                        "nullable": true
                                      }
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "budget_minutes": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The budgeted minutes allocated to this tag on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget_amount": {
                    "type": "number",
                    "minimum": 0,
                    "description": "The budgeted amount allocated to this tag on this project",
                    "nullable": true,
                    "deprecated": true
                  },
                  "budget": {
                    "type": "object",
                    "properties": {
                      "budget_minutes": {
                        "type": "integer",
                        "minimum": 0,
                        "description": "The budgeted minutes allocated to this tag on this project",
                        "nullable": true
                      },
                      "budget_amount": {
                        "type": "number",
                        "minimum": 0,
                        "description": "The budgeted amount allocated to this tag on this project",
                        "nullable": true
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Update project-tag list relationship",
        "tags": [
          "Projects",
          "TagLists"
        ]
      },
      "delete": {
        "summary": "Delete Project-Tag relationship",
        "operationId": "delete-projects-project_id-tags-tag_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "tags": [
          "Projects",
          "TagLists"
        ],
        "description": "Remove project-tag relationship"
      }
    },
    "/todos": {
      "get": {
        "summary": "List Todos",
        "tags": [
          "Todos"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "properties": {
                              "todos": {
                                "type": "array",
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/Todo"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "tags": {
                                          "type": "array",
                                          "items": {
                                            "allOf": [
                                              {
                                                "$ref": "#/components/schemas/Tag"
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "tag_list": {
                                                    "$ref": "#/components/schemas/TagList"
                                                  }
                                                }
                                              }
                                            ]
                                          }
                                        },
                                        "users": {
                                          "type": "array",
                                          "items": {
                                            "$ref": "#/components/schemas/User"
                                          }
                                        }
                                      }
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        ],
                        "type": "object"
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "operationId": "get-todos",
        "description": "Get a list of todos",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "project_id",
            "description": "Unique identifier of the project which the todo belongs to"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "todo_list_id",
            "description": "Unique identifier of a todo list"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "user_ids",
            "description": "Array of User unique identifiers assigned to the todos"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "in": "query",
            "name": "priority",
            "description": "Array of priorities: Allowed values: low, medium, high"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "in": "query",
            "name": "status",
            "description": "Array of statuses. Allowed values: todo, in_progress, completed"
          }
        ]
      },
      "post": {
        "summary": "Create a Todo",
        "operationId": "post-todos",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Todo"
                    },
                    {
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "avatar": {
                                    "$ref": "#/components/schemas/Avatar"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "todo_list": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/TodoList"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "project": {
                                  "$ref": "#/components/schemas/Project"
                                }
                              }
                            }
                          ]
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Create a todo",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "todo_list_id": {
                    "type": "integer",
                    "description": "Unique identifier of the todo list which the todo belongs to"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user assigned to the todo"
                  },
                  "name": {
                    "type": "string",
                    "description": "Title of the todo"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of the todo"
                  },
                  "is_completed": {
                    "type": "boolean",
                    "description": "Whether or not the todo is marked as done"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "high",
                      "medium",
                      "low"
                    ],
                    "description": "Whether or not the todo is marked as done",
                    "nullable": true
                  },
                  "start_date": {
                    "type": "string",
                    "description": "The date in which the todo should be taken in charge"
                  },
                  "due_date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "The data by which the todo should be completed"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "todo",
                      "in_progress",
                      "completed"
                    ],
                    "default": "todo",
                    "description": "The current status of the todo"
                  },
                  "index": {
                    "type": "integer",
                    "description": "The index of the todo in the list (order)"
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id to be linked to the todo",
                    "nullable": true,
                    "items": {
                      "type": "integer"
                    }
                  },
                  "user_ids": {
                    "type": "array",
                    "description": "Array of user_id representing users that are assigned to the todo",
                    "nullable": true,
                    "items": {
                      "type": "integer"
                    }
                  }
                },
                "required": [
                  "todo_list_id",
                  "user_id",
                  "name"
                ]
              }
            }
          }
        },
        "tags": [
          "Todos"
        ]
      }
    },
    "/todos/{todo}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "todo",
          "description": "todo_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Todo",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Todo"
                    },
                    {
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "avatar": {
                                    "$ref": "#/components/schemas/Avatar"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "todo_list": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/TodoList"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "project": {
                                  "$ref": "#/components/schemas/Project"
                                }
                              }
                            }
                          ]
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-todos-todo_id",
        "description": "Gets a single todo",
        "tags": [
          "Todos"
        ]
      },
      "put": {
        "summary": "Update a Todo",
        "operationId": "put-todos-todo_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Todo"
                    },
                    {
                      "properties": {
                        "tags": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Tag"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "tag_list": {
                                    "$ref": "#/components/schemas/TagList"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "users": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/User"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "avatar": {
                                    "$ref": "#/components/schemas/Avatar"
                                  }
                                }
                              }
                            ]
                          }
                        },
                        "todo_list": {
                          "allOf": [
                            {
                              "$ref": "#/components/schemas/TodoList"
                            },
                            {
                              "type": "object",
                              "properties": {
                                "project": {
                                  "$ref": "#/components/schemas/Project"
                                }
                              }
                            }
                          ]
                        }
                      }
                    }
                  ],
                  "type": "object"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Updates a todo",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "todo_list_id": {
                    "type": "integer",
                    "description": "Unique identifier of the todo list which the todo belongs to"
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "Unique identifier of the user assigned to the todo"
                  },
                  "name": {
                    "type": "string",
                    "description": "Title of the todo"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of the todo"
                  },
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project which the todo belongs to"
                  },
                  "is_completed": {
                    "type": "boolean",
                    "description": "Whether or not the todo is marked as done"
                  },
                  "priority": {
                    "type": "string",
                    "enum": [
                      "high",
                      "medium",
                      "low"
                    ],
                    "description": "Whether or not the todo is marked as done",
                    "nullable": true
                  },
                  "start_date": {
                    "type": "string",
                    "description": "The date in which the todo should be taken in charge"
                  },
                  "due_date": {
                    "type": "string",
                    "example": "2023-01-01",
                    "description": "The data by which the todo should be completed"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "todo",
                      "in_progress",
                      "completed"
                    ],
                    "default": "todo",
                    "description": "The current status of the todo"
                  },
                  "index": {
                    "type": "integer",
                    "description": "The index of the todo in the list (order)"
                  },
                  "tag_ids": {
                    "type": "array",
                    "description": "Array of tag_id to be linked to the todo",
                    "nullable": true,
                    "items": {
                      "type": "integer"
                    }
                  },
                  "user_ids": {
                    "type": "array",
                    "description": "Array of user_id representing users that are assigned to the todo",
                    "nullable": true,
                    "items": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Todos"
        ]
      },
      "delete": {
        "summary": "Delete a Todo",
        "operationId": "delete-todos-todo_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          }
        },
        "description": "Deletes a todo",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Todos"
        ]
      }
    },
    "/todo-lists": {
      "get": {
        "summary": "List Todo Lists",
        "tags": [
          "Todos"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/TodoList"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "todos": {
                                "type": "array",
                                "items": {
                                  "allOf": [
                                    {
                                      "$ref": "#/components/schemas/Todo"
                                    }
                                  ]
                                }
                              }
                            }
                          }
                        ],
                        "type": "object"
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-todo-lists",
        "description": "Get a list of todo lists",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "project_id",
            "description": "Unique identifier of the project which the todo list belongs to"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "in": "query",
            "name": "load",
            "description": "\"todos\" is the only accepted value"
          }
        ]
      },
      "post": {
        "summary": "Create a Todo List",
        "operationId": "post-todo-lists",
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TodoList"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Create a todo list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project which the todo list belongs to"
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the todo list"
                  },
                  "color": {
                    "type": "string",
                    "description": "The color used for reporting"
                  },
                  "index": {
                    "type": "integer",
                    "description": "The color used for reporting"
                  }
                },
                "required": [
                  "project_id",
                  "name",
                  "color"
                ]
              }
            }
          }
        },
        "tags": [
          "Todos"
        ]
      },
      "parameters": []
    },
    "/todo-lists/{todo_list}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "todo_list",
          "description": "todo_list_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a Todo List",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TodoList"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "todos": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Todo"
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-todo-list-todolist_id",
        "description": "Gets a single todo list",
        "tags": [
          "TodoLists"
        ]
      },
      "put": {
        "summary": "Update a Todo List",
        "operationId": "put-todo-list-todolist_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TodoList"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Updates a tag list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "project_id": {
                    "type": "integer",
                    "description": "Unique identifier of the project which the todo list belongs to"
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the todo list"
                  },
                  "color": {
                    "type": "string",
                    "description": "The color used for reporting"
                  },
                  "index": {
                    "type": "integer",
                    "description": "The color used for reporting"
                  }
                },
                "required": [
                  "project_id",
                  "name",
                  "color"
                ]
              }
            }
          }
        },
        "tags": [
          "TodoLists"
        ]
      },
      "delete": {
        "summary": "Delete a Todo List",
        "operationId": "delete-todo-lists-todo_list_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a todo list",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "TodoLists"
        ]
      }
    },
    "/users": {
      "get": {
        "summary": "List Users",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/User"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "account": {
                                "$ref": "#/components/schemas/Account"
                              },
                              "avatar": {
                                "$ref": "#/components/schemas/Avatar"
                              },
                              "groups": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Group"
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-user-lists",
        "description": "Get a list of users",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Full text search"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "todos"
              ]
            },
            "in": "query",
            "name": "name",
            "description": "Search the users by name"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "email",
            "description": "Search the users by email"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "inactive"
              ]
            },
            "in": "query",
            "name": "status",
            "description": "Search the users by status"
          },
          {
            "schema": {
              "type": "boolean"
            },
            "in": "query",
            "name": "active",
            "description": "Search the users by active status"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "group_ids",
            "description": "Search the users that belong to groups"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "group_id",
            "description": "Search the users that belong to a group"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "member_ids",
            "description": "Search the users by multiple id"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "project_ids",
            "description": "Search the users that belong to projects"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "client_ids",
            "description": "Search the users that belong to a project of a client"
          }
        ],
        "tags": [
          "Users"
        ]
      },
      "parameters": []
    },
    "/users/{user}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "user",
          "description": "user_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get a User",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/User"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "account": {
                          "$ref": "#/components/schemas/Account"
                        },
                        "avatar": {
                          "$ref": "#/components/schemas/Avatar"
                        },
                        "groups": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Group"
                          }
                        },
                        "projects": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Project"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "groups": {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/components/schemas/Group"
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-users-user_id",
        "description": "Gets a single user",
        "tags": [
          "Users"
        ]
      },
      "put": {
        "summary": "Update a User",
        "operationId": "put-users-user_id",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/User"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "account": {
                          "$ref": "#/components/schemas/Account"
                        },
                        "avatar": {
                          "$ref": "#/components/schemas/Avatar"
                        },
                        "groups": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Group"
                          }
                        },
                        "projects": {
                          "type": "array",
                          "items": {
                            "allOf": [
                              {
                                "$ref": "#/components/schemas/Project"
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "groups": {
                                    "type": "array",
                                    "items": {
                                      "$ref": "#/components/schemas/Group"
                                    }
                                  }
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "description": "Updates a user",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {},
                "properties": {
                  "workspace_access_level": {
                    "type": "string",
                    "enum": [
                      "member",
                      "admin",
                      "owner"
                    ],
                    "description": "The role of the user in Lucen Track: owner, admin or member"
                  },
                  "user_hourly_rate": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The hourly rate of the user, expressed in the currency selected in the account settings",
                    "nullable": true
                  },
                  "user_hourly_cost": {
                    "type": "integer",
                    "minimum": 0,
                    "description": "The hourly cost of the user, expressed in the currency selected in the account settings",
                    "nullable": true
                  },
                  "working_time": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1440,
                    "description": "How many hours the user is usually working on a day",
                    "nullable": true
                  },
                  "group_id": {
                    "type": "integer",
                    "description": "Unique identifier of the group to which the user belongs to"
                  },
                  "employee_id": {
                    "type": "string",
                    "nullable": true,
                    "maxLength": 255,
                    "description": "The employee ID of the user"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Users"
        ]
      },
      "delete": {
        "summary": "Delete a User",
        "operationId": "delete-users-user_id",
        "responses": {
          "200": {
            "description": "OK"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "description": "Deletes a user",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          }
        ],
        "tags": [
          "Users"
        ]
      }
    },
    "/expenses": {
      "get": {
        "summary": "List Expenses",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Expense"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "category": {
                                "$ref": "#/components/schemas/ExpenseCategory"
                              },
                              "attachments": {
                                "x-stoplight": {
                                  "id": "7efn5qtpxdtf3"
                                },
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Attachment"
                                }
                              }
                            }
                          }
                        ]
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-expenses",
        "x-stoplight": {
          "id": "r5zge52jurg30"
        },
        "description": "Get a list of expenses",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "description",
            "description": "Full text search on the expenses' description "
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "unbilled",
                "billed",
                "non-billable",
                "billable"
              ]
            },
            "in": "query",
            "name": "billable_status",
            "description": "Search the expenses by billable status"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "expense_category_ids",
            "description": "Search the expenses that belong to categories"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "user_ids",
            "description": "Search the expenses by multiple user ids"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "project_ids",
            "description": "Search the users that belong to projects"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "group_ids",
            "description": "Search the expenses by multiple group ids"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "client_ids",
            "description": "Search the expenses by multiple client ids"
          },
          {
            "schema": {
              "type": "string",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "date_from",
            "description": "Search the expenses from a date onwards"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "date_to",
            "description": "Search the expenses until a date"
          }
        ],
        "tags": [
          "Expenses"
        ]
      },
      "post": {
        "summary": "Create Expense",
        "tags": [
          "Expenses"
        ],
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Expense"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "f3248mv71cjzx"
                      },
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "category": {
                          "$ref": "#/components/schemas/ExpenseCategory"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-expenses",
        "x-stoplight": {
          "id": "nknj1l4lqeuvq"
        },
        "description": "Create an expense",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {
                  "Example 1": {
                    "description": "123",
                    "expense_category_id": 3,
                    "project_id": 356229,
                    "user_id": 43,
                    "billable_status": "non-billable",
                    "date": "2025-03-13",
                    "amount": "123"
                  }
                },
                "required": [
                  "description",
                  "expense_category_id",
                  "date",
                  "amount"
                ],
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "The description of the expense"
                  },
                  "expense_category_id": {
                    "type": "integer",
                    "description": "The id of the category the expenses belongs to"
                  },
                  "project_id": {
                    "type": "integer",
                    "description": "The id of the project the expenses belongs to",
                    "nullable": true
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "The id of the user the expenses belongs to",
                    "nullable": true
                  },
                  "billable_status": {
                    "enum": [
                      "unbilled",
                      "billed",
                      "non-billable",
                      "billable"
                    ],
                    "description": "Tells if the expense's billable status:\nPossible values are: \"unbilled\", \"billed\", \"non-billable\", and \"billable\"."
                  },
                  "date": {
                    "type": "string",
                    "description": "The date of the expense",
                    "nullable": true
                  },
                  "amount": {
                    "type": "number",
                    "description": "The amount of the expense. \nIf there is an expense category and it has a unit price, this value will be multiplied with the unit price to get the calculated_amount."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/expenses/{expense}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "expense",
          "description": "expense_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get an Expense",
        "description": "Get an Expense",
        "tags": [
          "Expenses"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Expense"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "p6kersaq7l132"
                      },
                      "properties": {
                        "category": {
                          "$ref": "#/components/schemas/ExpenseCategory"
                        },
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "$ref": "#/components/schemas/User"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-expenses-expense_id",
        "x-stoplight": {
          "id": "maoys10augqaz"
        }
      },
      "put": {
        "summary": "Update an Expense",
        "description": "Update an Expense",
        "tags": [
          "Expenses"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Expense"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "f3248mv71cjzx"
                      },
                      "properties": {
                        "project": {
                          "$ref": "#/components/schemas/Project"
                        },
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "category": {
                          "$ref": "#/components/schemas/ExpenseCategory"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "put-expenses-expense_id",
        "x-stoplight": {
          "id": "p9tmwujmt9ts5"
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {
                  "Example 1": {
                    "description": "123",
                    "expense_category_id": 3,
                    "project_id": 356229,
                    "user_id": 43,
                    "billable_status": "non-billable",
                    "date": "2025-03-13",
                    "amount": "123"
                  }
                },
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "The description of the expense"
                  },
                  "expense_category_id": {
                    "type": "integer",
                    "description": "The id of the category the expenses belongs to"
                  },
                  "project_id": {
                    "type": "integer",
                    "description": "The id of the project the expenses belongs to",
                    "nullable": true
                  },
                  "user_id": {
                    "type": "integer",
                    "description": "The id of the user the expenses belongs to",
                    "nullable": true
                  },
                  "billable_status": {
                    "enum": [
                      "unbilled",
                      "billed",
                      "non-billable",
                      "billable"
                    ],
                    "description": "Tells if the expense's billable status:\nPossible values are: \"unbilled\", \"billed\", \"non-billable\", and \"billable\"."
                  },
                  "date": {
                    "type": "string",
                    "description": "The date of the expense",
                    "nullable": true
                  },
                  "amount": {
                    "type": "number",
                    "description": "The amount of the expense. \nIf there is an expense category and it has a unit price, this value will be multiplied with the unit price to get the calculated_amount."
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an Expense",
        "description": "Delete an Expense",
        "tags": [
          "Expenses"
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "delete-expenses-expense_id",
        "x-stoplight": {
          "id": "4j62q0eutvpid"
        }
      }
    },
    "/expense-categories": {
      "get": {
        "summary": "List Expense categories",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/ExpenseCategory"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "expenses_count": {
                                "x-stoplight": {
                                  "id": "7efn5qtpxdtf3"
                                },
                                "type": "integer"
                              }
                            }
                          }
                        ]
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-expense-categories",
        "x-stoplight": {
          "id": "r5zge52jurg30"
        },
        "description": "Get a list of expense categories",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Full text search on the expenses category's name "
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "deactivated"
              ]
            },
            "in": "query",
            "name": "status",
            "description": "Search the expenses categories by status"
          }
        ],
        "tags": [
          "ExpenseCategories"
        ]
      },
      "post": {
        "summary": "Create Expense Category",
        "tags": [
          "ExpenseCategories"
        ],
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseCategory"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-expense-categories",
        "x-stoplight": {
          "id": "nknj1l4lqeuvq"
        },
        "description": "Create an expense category",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {
                  "Example 1": {
                    "description": "123",
                    "expense_category_id": 3,
                    "project_id": 356229,
                    "user_id": 43,
                    "billable_status": "non-billable",
                    "date": "2025-03-13",
                    "amount": "123"
                  }
                },
                "required": [
                  "name",
                  "color"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The description of the expense",
                    "x-stoplight": {
                      "id": "jhk1f522jxakv"
                    },
                    "minLength": 1,
                    "maxLength": 256
                  },
                  "color": {
                    "type": "string",
                    "description": "The id of the category the expenses belongs to",
                    "x-stoplight": {
                      "id": "aj5er5nlrsjfo"
                    },
                    "maxLength": 7,
                    "minLength": 7
                  },
                  "uses_unit_price": {
                    "type": "boolean",
                    "description": "The id of the project the expenses belongs to",
                    "x-stoplight": {
                      "id": "q3w0trxo6i6o9"
                    }
                  },
                  "unit_price": {
                    "type": "integer",
                    "description": "The id of the user the expenses belongs to",
                    "x-stoplight": {
                      "id": "tcqz2a9soqpc9"
                    }
                  },
                  "unit_name": {
                    "description": "Tells if the expense's billable status:\nPossible values are: \"unbilled\", \"billed\", \"non-billable\", and \"billable\".",
                    "x-stoplight": {
                      "id": "4c03hlmvyscey"
                    },
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/expense-categories/{expenseCategory}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "expenseCategory",
          "description": "expense_category_id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get an Expense Category",
        "description": "Get an Expense Category",
        "tags": [
          "ExpenseCategories"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseCategory"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-expense-categories-expense-category-id",
        "x-stoplight": {
          "id": "maoys10augqaz"
        }
      },
      "put": {
        "summary": "Update an Expense Category",
        "description": "Update an Expense Category",
        "tags": [
          "ExpenseCategories"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExpenseCategory"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "put-expense-categories-expense-category-id",
        "x-stoplight": {
          "id": "p9tmwujmt9ts5"
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "x-examples": {
                  "Example 1": {
                    "description": "123",
                    "expense_category_id": 3,
                    "project_id": 356229,
                    "user_id": 43,
                    "billable_status": "non-billable",
                    "date": "2025-03-13",
                    "amount": "123"
                  }
                },
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "The description of the expense",
                    "x-stoplight": {
                      "id": "jhk1f522jxakv"
                    },
                    "minLength": 1,
                    "maxLength": 256
                  },
                  "color": {
                    "type": "string",
                    "description": "The id of the category the expenses belongs to",
                    "x-stoplight": {
                      "id": "aj5er5nlrsjfo"
                    },
                    "maxLength": 7,
                    "minLength": 7
                  },
                  "uses_unit_price": {
                    "type": "boolean",
                    "description": "The id of the project the expenses belongs to",
                    "x-stoplight": {
                      "id": "q3w0trxo6i6o9"
                    }
                  },
                  "unit_price": {
                    "type": "integer",
                    "description": "The id of the user the expenses belongs to",
                    "x-stoplight": {
                      "id": "tcqz2a9soqpc9"
                    }
                  },
                  "unit_name": {
                    "description": "Tells if the expense's billable status:\nPossible values are: \"unbilled\", \"billed\", \"non-billable\", and \"billable\".",
                    "x-stoplight": {
                      "id": "4c03hlmvyscey"
                    },
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an Expense Category",
        "description": "Delete an Expense Category",
        "tags": [
          "ExpenseCategories"
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "delete-expense-categories-expense-category-id",
        "x-stoplight": {
          "id": "4j62q0eutvpid"
        }
      }
    },
    "/approval-events": {
      "get": {
        "summary": "List ApprovalEvents",
        "tags": [
          "ApprovalEvents"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "x-examples": {},
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ApprovalEvent"
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-approval-events",
        "x-stoplight": {
          "id": "8uqb370vfwd2k"
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "text",
            "description": "Full text search on the expenses category's name "
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "deactivated"
              ]
            },
            "in": "query",
            "name": "status",
            "description": "Search the expenses categories by status"
          }
        ],
        "description": "List ApprovalEvents"
      }
    },
    "/approval-requests": {
      "get": {
        "summary": "List ApprovalRequests",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ApprovalRequest"
                      }
                    },
                    "current_page": {
                      "type": "integer"
                    },
                    "first_page_url": {
                      "type": "string"
                    },
                    "from": {
                      "type": "integer"
                    },
                    "last_page": {
                      "type": "integer"
                    },
                    "last_page_url": {
                      "type": "string"
                    },
                    "next_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "path": {
                      "type": "string"
                    },
                    "per_page": {
                      "type": "integer"
                    },
                    "prev_page_url": {
                      "type": "string",
                      "nullable": true
                    },
                    "to": {
                      "type": "integer"
                    },
                    "total": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-approval-requests",
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "$ref": "#/components/parameters/page"
          },
          {
            "$ref": "#/components/parameters/per_page"
          },
          {
            "$ref": "#/components/parameters/sort_by"
          },
          {
            "$ref": "#/components/parameters/direction"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "status",
            "description": "The statuses of the approval requests"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "date_from",
            "description": "Get only the approval requests from this date onwards"
          },
          {
            "schema": {
              "type": "string"
            },
            "in": "query",
            "name": "date_to",
            "description": "Get only the approval requests up to this date"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "in": "query",
            "name": "user_ids",
            "description": "Get approval requests for these user IDs"
          },
          {
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "total_time",
                  "total_expenses"
                ]
              }
            },
            "in": "query",
            "name": "load_sum",
            "description": "Include sums for time or expenses in the response"
          }
        ],
        "description": "List ApprovalRequests"
      },
      "post": {
        "summary": "Submit an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "201": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApprovalRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-approval-requests",
        "x-stoplight": {
          "id": "skmdpxq6lrpmp"
        },
        "description": "Submit an ApprovalRequest",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event_notes": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "odxq2osbb5299"
                    }
                  },
                  "date_from": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "9fk99vi4ka82v"
                    }
                  },
                  "date_to": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "zljidn2x72sxk"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/approval-requests/{approvalRequest}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "description": "The approval_request_id",
          "name": "approvalRequest",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApprovalRequest"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "cprhqmi9a5x0g"
                      },
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "approvalEvents": {
                          "type": "array",
                          "x-stoplight": {
                            "id": "ms8vgy4wteyij"
                          },
                          "items": {
                            "$ref": "#/components/schemas/ApprovalEvent"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-approval-requests-approvalRequest",
        "x-stoplight": {
          "id": "uv4chq6rooo7d"
        },
        "description": "Get an ApprovalRequest"
      }
    },
    "/approval-requests/{approvalRequest}/approve": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "approvalRequest",
          "description": "The approval_request_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Approve an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApprovalRequest"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "cprhqmi9a5x0g"
                      },
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "approvalEvents": {
                          "type": "array",
                          "x-stoplight": {
                            "id": "ms8vgy4wteyij"
                          },
                          "items": {
                            "$ref": "#/components/schemas/ApprovalEvent"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-approval-requests-approvalRequest-approve",
        "x-stoplight": {
          "id": "0pvve4xvtepcx"
        },
        "description": "Approve an ApprovalRequest",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event_notes": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "9s9h14xjjpjf6"
                    },
                    "description": "The notes for the event (optional)"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/approval-requests/{approvalRequest}/reject": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "approvalRequest",
          "description": "The approval_request_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Reject an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApprovalRequest"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "cprhqmi9a5x0g"
                      },
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "approvalEvents": {
                          "type": "array",
                          "x-stoplight": {
                            "id": "ms8vgy4wteyij"
                          },
                          "items": {
                            "$ref": "#/components/schemas/ApprovalEvent"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-approval-requests-approvalRequest-reject",
        "x-stoplight": {
          "id": "di11fzjianfwn"
        },
        "description": "Reject an ApprovalRequest",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "event_notes"
                ],
                "properties": {
                  "event_notes": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "2wxfrnpauvrpf"
                    },
                    "description": "The notes for the event"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/approval-requests/{approvalRequest}/withdraw": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "approvalRequest",
          "description": "The approval_request_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Withdraw an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApprovalRequest"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "cprhqmi9a5x0g"
                      },
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "approvalEvents": {
                          "type": "array",
                          "x-stoplight": {
                            "id": "ms8vgy4wteyij"
                          },
                          "items": {
                            "$ref": "#/components/schemas/ApprovalEvent"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-approval-requests-approvalRequest-withdraw",
        "x-stoplight": {
          "id": "nsvl0m6ygkn9w"
        },
        "description": "Withdraw an ApprovalRequest that has been approved",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event_notes": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "e4gkwe25jh2si"
                    },
                    "description": "The notes for the event (optional)"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/approval-requests/{approvalRequest}/resubmit": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "approvalRequest",
          "description": "The approval_request_id",
          "in": "path",
          "required": true
        }
      ],
      "post": {
        "summary": "Resubmit an ApprovalRequest",
        "tags": [
          "ApprovalRequests"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApprovalRequest"
                    },
                    {
                      "type": "object",
                      "x-stoplight": {
                        "id": "cprhqmi9a5x0g"
                      },
                      "properties": {
                        "user": {
                          "$ref": "#/components/schemas/User"
                        },
                        "approvalEvents": {
                          "type": "array",
                          "x-stoplight": {
                            "id": "ms8vgy4wteyij"
                          },
                          "items": {
                            "$ref": "#/components/schemas/ApprovalEvent"
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-approval-requests-approvalRequest-resubmit",
        "x-stoplight": {
          "id": "0wehk61v491o7"
        },
        "description": "Resubmit an ApprovalRequest that was rejected",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "event_notes": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "2yqyn1f402kw5"
                    },
                    "description": "The notes for the event (optional)"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/attachments": {
      "get": {
        "summary": "List attachments",
        "tags": [
          "Attachments"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Attachment"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-attachments",
        "x-stoplight": {
          "id": "o94eyt7kjx6kg"
        },
        "parameters": [
          {
            "schema": {
              "type": "string"
            },
            "in": "header",
            "name": "Accept",
            "description": "application/json"
          },
          {
            "schema": {
              "type": "integer"
            },
            "in": "query",
            "name": "attachable_id",
            "description": "The id of the attachable resource"
          },
          {
            "schema": {
              "type": "string",
              "enum": [
                "expense",
                "entry",
                "todo"
              ]
            },
            "in": "query",
            "name": "attachable_type",
            "description": "The type of the attachable resource"
          }
        ],
        "description": "Gets the attachments"
      },
      "post": {
        "summary": "Create attachments",
        "tags": [
          "Attachments"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Attachment"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-attachments",
        "x-stoplight": {
          "id": "axmijleyj6m3x"
        },
        "description": "Create attachments posting files",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "attachable_type": {
                    "x-stoplight": {
                      "id": "euhnov23bdzad"
                    },
                    "enum": [
                      "expense",
                      "todo",
                      "entry"
                    ]
                  },
                  "attachable_id": {
                    "type": "integer",
                    "x-stoplight": {
                      "id": "wuk75x71j0ck0"
                    }
                  },
                  "files[]": {
                    "type": "array",
                    "x-stoplight": {
                      "id": "9z9kjdkc307np"
                    },
                    "description": "Add multiple files to create multiple attachments",
                    "items": {}
                  }
                }
              }
            }
          }
        },
        "parameters": []
      }
    },
    "/attachments/{attachment}": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "attachment",
          "description": "The id of the attachment",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get an attachment",
        "tags": [
          "Attachments"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "get-attachments-attachment",
        "x-stoplight": {
          "id": "6npsgrandqspe"
        },
        "description": "Retrieves an attachment by id"
      },
      "delete": {
        "summary": "Delete an attachment",
        "tags": [
          "Attachments"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "x-stoplight": {
                        "id": "0idhuig472lob"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "404": {
            "$ref": "#/components/responses/404"
          }
        },
        "operationId": "delete-attachments-attachment",
        "x-stoplight": {
          "id": "1nvmcrts66l0i"
        },
        "description": "Deletes an attachment"
      }
    },
    "/attachments/{attachment}/download": {
      "parameters": [
        {
          "schema": {
            "type": "string"
          },
          "name": "attachment",
          "description": "The attachment id",
          "in": "path",
          "required": true
        }
      ],
      "get": {
        "summary": "Get Attachment download url",
        "tags": [
          "Attachments"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "operationId": "get-attachments-attachment-download",
        "x-stoplight": {
          "id": "jrgcvmxvtcsco"
        },
        "description": "Get Attachment download url"
      }
    },
    "/sessions": {
      "post": {
        "summary": "Add a session",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-session",
        "x-stoplight": {
          "id": "9g0o8eugxzn6y"
        },
        "x-internal": true,
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "username",
                  "password"
                ],
                "properties": {
                  "username": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "42r5hc7io8tto"
                    }
                  },
                  "password": {
                    "type": "string",
                    "x-stoplight": {
                      "id": "lumq2cehbq9xw"
                    }
                  }
                }
              }
            }
          },
          "description": "Adds the identity to the session list and sets the cookie for the authenticated user."
        }
      },
      "parameters": [],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ],
      "get": {
        "summary": "Get sessions list",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/User"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "operationId": "get-sessions-add",
        "x-stoplight": {
          "id": "42nuiecmrc9hp"
        },
        "x-internal": true
      }
    },
    "/sessions/switch": {
      "get": {
        "summary": "Switch session",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "404": {
            "$ref": "#/components/responses/404"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "get-sessions-switch",
        "x-stoplight": {
          "id": "5tqoyydyynemy"
        },
        "parameters": [
          {
            "schema": {
              "type": "number"
            },
            "in": "query",
            "name": "user_id",
            "description": "The user id with whom you want to switch session",
            "required": true
          }
        ],
        "description": "Switch the session to the passed user",
        "x-internal": true
      },
      "parameters": [],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/feature-flags": {
      "get": {
        "summary": "Global feature flags",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FeatureFlag"
                  }
                }
              }
            }
          }
        },
        "operationId": "get-feature-flags",
        "x-stoplight": {
          "id": "0xf59zd5iy1ml"
        },
        "x-internal": true
      },
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/user-feature-flags": {
      "get": {
        "summary": "User specific feature flags",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/FeatureFlag"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          }
        },
        "operationId": "get-user-feature-flags",
        "x-internal": true,
        "x-stoplight": {
          "id": "mlm7anmb6v25x"
        }
      },
      "parameters": [],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/expenses/csv": {
      "post": {
        "summary": "Export expenses CSV",
        "tags": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary",
                  "description": "A ZIP file containing the exported expenses data as CSV(s)."
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/401"
          },
          "403": {
            "$ref": "#/components/responses/403"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "operationId": "post-expenses-csv",
        "x-stoplight": {
          "id": "4nlplsqpshbcw"
        },
        "x-internal": true,
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "description": {
                    "type": "string",
                    "description": "The description of the expense"
                  },
                  "date_from": {
                    "type": "string",
                    "description": "Select the expenses from a date onwards",
                    "nullable": true
                  },
                  "date_to": {
                    "type": "string",
                    "description": "Select the expenses until a date",
                    "nullable": true
                  },
                  "approval_status": {
                    "type": "string",
                    "description": "The approval status of the expenses",
                    "nullable": true
                  },
                  "project_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple project ids"
                  },
                  "member_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple member ids"
                  },
                  "user_ids": {
                    "deprecated": true,
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple user ids"
                  },
                  "client_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple client ids"
                  },
                  "group_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple group ids"
                  },
                  "expense_category_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "description": "Select the expenses by multiple expense category ids"
                  },
                  "billable_status": {
                    "enum": [
                      "unbilled",
                      "billed",
                      "non-billable",
                      "billable"
                    ],
                    "description": "Select the expenses by billable status",
                    "nullable": true
                  },
                  "include_attachments": {
                    "type": "boolean",
                    "description": "Include the attachments in the export"
                  }
                }
              }
            }
          }
        }
      },
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/e2e/accounts": {
      "post": {
        "tags": [
          "E2ETesting"
        ],
        "summary": "Create E2E Test Account",
        "operationId": "post-e2e-accounts",
        "description": "Creates a new account for E2E testing purposes. Only available when APP_ENV is set to e2e_testing.",
        "x-internal": true,
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "properties": {
                        "account_id": {
                          "type": "integer",
                          "description": "Unique identifier of the created account"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/Account"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Returned when the environment is not e2e_testing"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "account_name",
                  "subscription_type",
                  "expiration"
                ],
                "properties": {
                  "account_name": {
                    "type": "string",
                    "description": "The name of the workspace / account",
                    "maxLength": 255
                  },
                  "subscription_type": {
                    "type": "string",
                    "enum": [
                      "free",
                      "starter",
                      "premium",
                      "pro",
                      "enterprise"
                    ],
                    "description": "The subscription type for the account"
                  },
                  "expiration": {
                    "type": "string",
                    "format": "date",
                    "description": "The expiration date of the account subscription"
                  },
                  "settings": {
                    "type": "object",
                    "description": "Optional account settings object (see AccountSettings for structure)",
                    "nullable": true
                  },
                  "image": {
                    "type": "string",
                    "format": "binary",
                    "description": "Optional image file to use as account avatar"
                  },
                  "subscription_limit_users": {
                    "type": "integer",
                    "minimum": 1,
                    "description": "Max number of users. Free: max 2, non-enterprise: max 30, enterprise: unlimited.",
                    "nullable": true
                  },
                  "is_trial": {
                    "type": "boolean",
                    "description": "Whether the account is a trial account. Defaults to false.",
                    "default": false
                  },
                  "setup_completed": {
                    "type": "boolean",
                    "description": "Whether the account has completed the setup wizard. Controls both setup_completed and setup_all_completed. Defaults to true.",
                    "default": true
                  }
                }
              }
            }
          },
          "description": "E2E Account creation request"
        }
      },
      "parameters": [],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/e2e/accounts/{account_id}": {
      "delete": {
        "tags": [
          "E2ETesting"
        ],
        "summary": "Delete E2E Test Account",
        "operationId": "delete-e2e-accounts",
        "description": "Deletes an account synchronously for E2E testing purposes. Marks the account for deletion and immediately runs the accounts:delete command, removing all associated data (S3 files, logs, database records). Only available when APP_ENV is set to e2e_testing.",
        "x-internal": true,
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": {
                      "type": "string",
                      "example": "Account deleted successfully."
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Returned when the account does not exist or the environment is not e2e_testing"
          }
        }
      },
      "parameters": [
        {
          "schema": {
            "type": "integer"
          },
          "name": "account_id",
          "in": "path",
          "required": true,
          "description": "The ID of the account to delete"
        }
      ],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    },
    "/e2e/accounts/{account_id}/users": {
      "post": {
        "tags": [
          "E2ETesting"
        ],
        "summary": "Create E2E Test User",
        "operationId": "post-e2e-accounts-users",
        "description": "Creates a new user on an existing account for E2E testing purposes. Only available when APP_ENV is set to e2e_testing.",
        "x-internal": true,
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "type": "object",
                      "properties": {
                        "user_id": {
                          "type": "integer",
                          "description": "Unique identifier of the created user"
                        }
                      }
                    },
                    {
                      "$ref": "#/components/schemas/User"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Not Found - Returned when the environment is not e2e_testing or the account does not exist"
          },
          "422": {
            "$ref": "#/components/responses/422"
          }
        },
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "required": [
                  "first_name",
                  "last_name",
                  "email",
                  "password",
                  "role"
                ],
                "properties": {
                  "first_name": {
                    "type": "string",
                    "description": "The first name of the user",
                    "maxLength": 255
                  },
                  "last_name": {
                    "type": "string",
                    "description": "The last name of the user",
                    "maxLength": 255
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "description": "The email address of the user",
                    "maxLength": 255
                  },
                  "password": {
                    "type": "string",
                    "description": "The password for the user (min 6 characters)",
                    "minLength": 6
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "owner",
                      "admin",
                      "member"
                    ],
                    "description": "The role of the user in the account"
                  },
                  "settings": {
                    "type": "object",
                    "description": "Optional user settings object (see UserSettings for structure)",
                    "nullable": true
                  },
                  "image": {
                    "type": "string",
                    "format": "binary",
                    "description": "Optional image file to use as user avatar"
                  },
                  "setup_completed": {
                    "type": "boolean",
                    "description": "Whether the user has completed the setup wizard. Controls both setup_completed and setup_all_completed. Defaults to true.",
                    "default": true
                  }
                }
              }
            }
          },
          "description": "E2E User creation request"
        }
      },
      "parameters": [
        {
          "schema": {
            "type": "integer"
          },
          "name": "account_id",
          "in": "path",
          "required": true,
          "description": "The ID of the account to create the user on"
        }
      ],
      "servers": [
        {
          "url": "https://track-api.lucensoftware.com/api",
          "description": ""
        }
      ]
    }
  },
  "security": [
    {
      "BearerAuth": []
    }
  ]
}