{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Timesheet API",
    "description" : "Timesheet is a cross-platform time tracking application for professionals, freelancers, and teams to monitor work hours, manage projects, track expenses, and generate detailed reports across Android, iOS, and Web.\n\nThe Timesheet REST API provides comprehensive functionality for creating, retrieving, updating, and deleting time tracking data. Integrate time tracking, project management, and reporting capabilities into your applications.",
    "contact" : {
      "name" : "Timesheet API Support",
      "url" : "https://timesheet.io",
      "email" : "support@timesheet.io"
    },
    "license" : {
      "name" : "Apache 2.0",
      "url" : "https://timesheet.io/en/terms"
    },
    "version" : "1.0.0",
    "x-logo" : {
      "backgroundColor" : "#ff8800",
      "altText" : "Timesheet",
      "url" : "https://timesheet.io/img/timesheet-dev.png"
    }
  },
  "servers" : [ {
    "url" : "https://api.timesheet.io",
    "description" : "Production Server"
  } ],
  "security" : [ {
    "bearerAuth" : [ ]
  }, {
    "apiKeyAuth" : [ ]
  } ],
  "tags" : [ {
    "name" : "Oauth2 Authentication",
    "description" : "# OAuth 2.1 Authentication\ntimesheet.io implements OAuth 2.1 with PKCE (Proof Key for Code Exchange) for secure authentication and authorization. This modern standard provides enhanced security for all client types, including public clients like mobile apps and SPAs.\n\n## OAuth 2.1 vs OAuth 2.0\nOAuth 2.1 consolidates best practices from OAuth 2.0 and mandates PKCE for all authorization code flows. Key improvements:\n* **PKCE Required**: Protects against authorization code interception attacks\n* **No Implicit Flow**: Removed due to security concerns\n* **Opaque Tokens**: Authorization codes are cryptographically random\n* **Shorter Token Lifetimes**: Enhanced security with refresh tokens\n\n## Available Grant Types\n* **Authorization Code with PKCE**: For all applications (web, mobile, desktop)\n* **Client Credentials**: For server-to-server authentication\n* **Refresh Token**: For maintaining long-term access\n\n## Discovery Endpoints\nOAuth 2.1 metadata is available via well-known endpoints:\n* **Authorization Server Metadata**: `/.well-known/oauth-authorization-server`\n* **OpenID Configuration**: `/.well-known/openid-configuration`\n* **Protected Resource Metadata**: `/.well-known/oauth-protected-resource`\n\n## Security Requirements\n* All API requests must use HTTPS\n* PKCE is **required** for authorization code flow\n* Access tokens expire after 1 hour\n* Refresh tokens expire after 365 days (1 year)\n* Public clients must use `token_endpoint_auth_method: none` with PKCE\n\n## Registering Your Application\n\n### Step 1: Create Application\nRegister your application at [timesheet.io Developer Portal](https://my.timesheet.io/development/apps)\n\n### Step 2: Configure OAuth 2.1 Settings\n* **Grant Types**: Select which flows your app supports\n* **Redirect URIs**: Register all allowed callback URLs\n* **Client Type**: Choose 'public' for native/SPA apps or 'confidential' for server apps\n* **Token Auth Method**: For public clients, use 'none' (PKCE required)\n\n### Step 3: Obtain Credentials\nAfter registration, you'll receive:\n* **client_id**: Your application's public identifier\n* **client_secret**: (Confidential clients only) Your application's secret key\n\n## Authorization Code Flow with PKCE\n\n### 1. Generate PKCE Challenge\n```javascript\n// Generate code_verifier (43-128 characters, URL-safe)\nconst code_verifier = generateRandomString(64);\n\n// Generate code_challenge using S256 method\nconst code_challenge = base64url(sha256(code_verifier));\n```\n\n### 2. Authorization Request\nRedirect users to our authorization endpoint:\n\n```\nGET https://api.timesheet.io/oauth2/auth\n  ?response_type=code\n  &client_id=YOUR_CLIENT_ID\n  &redirect_uri=https://yourapp.com/callback\n  &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM\n  &code_challenge_method=S256\n  &state=xyz123\n```\n\n#### Parameters\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| response_type | Yes | Must be 'code' |\n| client_id | Yes | Your application's client ID |\n| redirect_uri | Yes | Must match a registered redirect URL |\n| code_challenge | Yes | PKCE challenge (S256 hash of code_verifier) |\n| code_challenge_method | Yes | Must be 'S256' |\n| state | Recommended | Random value to prevent CSRF attacks |\n| scope | No | Space-separated list of scopes (optional) |\n| resource | No | Resource identifier for token binding |\n\n### 3. Authorization Response\nAfter user consent, we redirect to your redirect_uri with:\n```\nhttps://yourapp.com/callback?code=AUTH_CODE&state=xyz123\n```\n\n### 4. Token Exchange with PKCE Verification\nExchange the authorization code for tokens:\n\n```\nPOST https://api.timesheet.io/oauth2/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=authorization_code\n&client_id=YOUR_CLIENT_ID\n&code=AUTH_CODE\n&redirect_uri=https://yourapp.com/callback\n&code_verifier=YOUR_ORIGINAL_CODE_VERIFIER\n```\n\n#### Parameters\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| grant_type | Yes | Use 'authorization_code' |\n| client_id | Yes | Your application's client ID |\n| client_secret | Confidential only | Your application's secret key |\n| code | Yes | The authorization code received |\n| redirect_uri | Yes | Must match the original request |\n| code_verifier | Yes | Original PKCE code_verifier |\n\n#### Response\n```json\n{\n  \"access_token\": \"eyJ0eXAi...\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 3600,\n  \"refresh_token\": \"def502...\",\n  \"scope\": \"openid profile\"\n}\n```\n\n## Refresh Token Flow\n```\nPOST https://api.timesheet.io/oauth2/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=refresh_token\n&client_id=YOUR_CLIENT_ID\n&refresh_token=YOUR_REFRESH_TOKEN\n```\n\n## Client Credentials Flow\nFor server-to-server authentication without user context:\n\n```\nPOST https://api.timesheet.io/oauth2/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials\n&client_id=YOUR_CLIENT_ID\n&client_secret=YOUR_CLIENT_SECRET\n```\n\n## Additional OAuth 2.1 Endpoints\n\n### Token Introspection (RFC 7662)\n```\nPOST https://api.timesheet.io/oauth2/introspect\n```\nQuery token metadata for resource server validation.\n\n### Token Revocation (RFC 7009)\n```\nPOST https://api.timesheet.io/oauth2/revoke\n```\nInvalidate access or refresh tokens.\n\n### JWKS Endpoint\n```\nGET https://api.timesheet.io/oauth2/jwks\n```\nGet public keys for JWT signature verification.\n\n### UserInfo Endpoint\n```\nGET https://api.timesheet.io/oauth2/userinfo\nAuthorization: Bearer YOUR_ACCESS_TOKEN\n```\nGet authenticated user claims.\n\n## Dynamic Client Registration (RFC 7591)\nClients can self-register:\n```\nPOST https://api.timesheet.io/oauth2/register\nContent-Type: application/json\n\n{\n  \"redirect_uris\": [\"https://yourapp.com/callback\"],\n  \"grant_types\": [\"authorization_code\", \"refresh_token\"],\n  \"token_endpoint_auth_method\": \"none\",\n  \"client_name\": \"My App\"\n}\n```\n\n## MCP (Model Context Protocol) Integration\ntimesheet.io OAuth 2.1 implementation is fully compatible with MCP authorization specification, enabling AI agents and tools to securely access time tracking data.\n\n## Error Responses\nOAuth 2.1 error responses follow RFC 6749:\n```json\n{\n  \"error\": \"invalid_grant\",\n  \"error_description\": \"PKCE code_verifier does not match code_challenge\"\n}\n```\n\n| Error Code | Description |\n|------------|-------------|\n| invalid_request | Missing or invalid parameter |\n| invalid_client | Client authentication failed |\n| invalid_grant | Invalid authorization code or refresh token |\n| unauthorized_client | Client not authorized for this grant type |\n| access_denied | User denied authorization |\n\n## Support\n* [Documentation](https://docs.timesheet.io)\n* Email: support@timesheet.io"
  }, {
    "name" : "API Key Authentication",
    "description" : "# API Key Authentication\n\ntimesheet.io supports API Key authentication as an alternative to OAuth 2.0 for programmatic access to your timesheet data. API Keys provide a simpler authentication method for server-to-server integrations and automated scripts.\n\n## Security Requirements\n* All API requests must use HTTPS\n* API Keys must be sent in the Authorization header: `Authorization: ApiKey {api_key}`\n* API Keys are long-lived but can be revoked at any time\n* Store API Keys securely and never expose them in client-side code or version control\n* Use separate API Keys for different applications or environments\n\n## Generating API Keys\n\n### Step 1: Access Developer Settings\nNavigate to the Developer section in your Timesheet account at [https://my.timesheet.io/development/apikeys](https://my.timesheet.io/development/apikeys)\n\n### Step 2: Create New API Key\nClick \"Create API Key\" and provide:\n* **Name**: A descriptive name for identification (e.g., \"Production Integration\", \"Backup Script\")\n* **Permissions**: Scope of access for the API key (read-only, full access, etc.)\n* **Expiration**: Optional expiration date for enhanced security\n\n### Step 3: Secure Your API Key\nAfter creation, your API Key will be displayed **only once**:\n* **Format**: `ts_{prefix}.{secret}` (e.g., `ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f`)\n* **Copy and store immediately** - it cannot be retrieved later\n* **Store securely** in environment variables or secure credential storage\n\n## Making Authenticated Requests\n\n### Using ApiKey Authorization Format\nInclude your API Key in the Authorization header with the ApiKey scheme:\n\n```bash\ncurl -H \"Authorization: ApiKey ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f\" \\\n     https://api.timesheet.io/v1/projects\n```\n\n### JavaScript Example\n```javascript\nconst apiKey = 'ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f';\n\nfetch('https://api.timesheet.io/v1/tasks', {\n  headers: {\n    'Authorization': `ApiKey ${apiKey}`,\n    'Content-Type': 'application/json'\n  }\n})\n.then(response => response.json())\n.then(data => console.log(data));\n```\n\n### Python Example\n```python\nimport requests\n\napi_key = 'ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f'\nheaders = {\n    'Authorization': f'ApiKey {api_key}',\n    'Content-Type': 'application/json'\n}\n\nresponse = requests.get('https://api.timesheet.io/v1/timer', headers=headers)\ndata = response.json()\n```\n\n## API Key Management\n\n### Listing API Keys\nView all your API Keys in the developer settings to monitor usage and manage access.\n\n### Revoking API Keys\nImmediately revoke API Keys that are:\n* No longer needed\n* Potentially compromised\n* Associated with decommissioned applications\n\n### Best Practices\n* **Rotation**: Regularly rotate API Keys (recommended: every 90 days)\n* **Principle of Least Privilege**: Use read-only keys when write access isn't needed\n* **Environment Separation**: Use different keys for development, staging, and production\n* **Monitoring**: Monitor API Key usage for suspicious activity\n\n## Security Considerations\n\n### Key Storage\n* Never hardcode API Keys in source code\n* Use environment variables or secure credential management systems\n* Avoid logging API Keys in application logs\n\n### Access Control\n* Set expiration dates for enhanced security\n* Regularly audit API Key usage and permissions\n\n### Error Handling\nAPI Key authentication errors return standard HTTP status codes:\n* `401 Unauthorized`: Invalid or expired API Key\n* `403 Forbidden`: API Key lacks required permissions\n* `429 Too Many Requests`: Rate limit exceeded\n\n## Support\n* [API Key Management](https://my.timesheet.io/development/apikeys)\n* [Documentation](https://docs.timesheet.io)\n* Email: support@timesheet.io"
  }, {
    "name" : "Pagination",
    "description" : "# Pagination\n\nWhen you're making calls to the API, there'll be a lot of results to return. For that reason, we paginate the results to make sure responses are easier to handle.\n\n## Pagination Parameters\n\n| Parameter | Description |\n|-----------|-------------|\n| `limit` | Controls how many results per page (1-100). Default is 100. |\n| `page` | Specifies which page of results to retrieve (1-based). Default is 1. |\n\n## Recommended Usage\n\nWe recommend you to set the `limit` parameter in every request to ensure you know how many results per page you'll get.\n\n## Examples\n\n- If you set the `limit` to `10` and `page` to `1` you will get the results from `1-10`.\n- If you set the `limit` to `10` and `page` to `2`, you'll get the results from `11-20`.\n\n## Response Format\n\nAll paginated responses include metadata about the total count, current page, and pagination settings:\n\n```json\n{\n  \"items\": [...],\n  \"count\": 42,\n  \"page\": 1,\n  \"limit\": 10,\n  \"sort\": \"created\",\n  \"order\": \"desc\"\n}\n```"
  }, {
    "name" : "Webhook",
    "description" : "# Webhooks\n\nWebhooks allow you to receive real-time notifications about events in your Timesheet account. Instead of constantly polling our API, you can register a webhook URL that we'll call whenever specific events occur.\n\n## Event Types\n\nThe API supports notifications for various events including:\n\n- `timer.start` - When a timer is started\n- `timer.stop` - When a timer is stopped\n- `task.create` - When a new task is created\n- `task.update` - When a task is updated\n- `project.create` - When a new project is created\n\n## Creating Webhooks\n\nTo create a webhook, provide a target URL and the event type you want to monitor. The target URL must be a valid HTTPS URL that responds to our verification request.\n\n## Webhook Payloads\n\nWebhook payloads are sent as JSON in the request body. Each payload includes:\n\n- `event` - The event type that triggered the webhook\n- `timestamp` - When the event occurred\n- `data` - The full resource object related to the event\n\n## Security Considerations\n\n- Verify the authenticity of webhook requests by validating the signature in the headers\n- Implement retry logic for temporary failures\n- Respond with 2xx status codes to acknowledge receipt"
  }, {
    "name" : "Profile",
    "description" : "# Profile Management\n\nThe Profile API allows you to manage user profiles, including personal information, preferences, and account settings.\n\n## Key Capabilities\n\n- Retrieve current user profile information\n- Update profile details like name, email, and image\n- Manage account deletion and data privacy\n\n## Account Management\n\nProfiles can be associated with multiple organizations and teams. The APIs provide ways to view and manage these relationships.\n\n## Data Privacy\n\nThe API provides endpoints specifically for data privacy compliance, allowing users to exercise their right to delete personal data or their entire account."
  }, {
    "name" : "Settings",
    "description" : "# User Settings\n\nThe Settings API lets users customize their Timesheet experience by managing preferences and defaults.\n\n## Available Settings\n\n| Setting | Description |\n|---------|-------------|\n| `theme` | UI theme preference (light/dark) |\n| `timezone` | User's preferred timezone |\n| `language` | Interface language |\n| `currency` | Preferred currency for rates and amounts |\n| `dateFormat` | How dates should be displayed |\n| `timeFormat` | 12h or 24h time format |\n| `firstDay` | First day of week (0=Sunday, 1=Monday) |\n\n## Timer Settings\n\nSpecial settings control the timer behavior:\n\n- `timerRounding` - Round timer times to nearest interval\n- `timerRoundingType` - How to round (up, down, nearest)\n- `pauseRounding` - Round pause times to nearest interval"
  }, {
    "name" : "Timer",
    "description" : "# Time Tracking\n\nThe Timer API provides endpoints for managing time tracking sessions. It allows starting, pausing, resuming, and stopping timers, as well as updating timer information.\n\n## Timer States\n\nA timer can be in one of three states:\n- `running` - The timer is actively tracking time\n- `paused` - The timer is temporarily stopped (on break)\n- `stopped` - The timer is not active\n\n## Timer Operations\n\n| Operation | Description |\n|-----------|-------------|\n| `start` | Begin a new timing session |\n| `pause` | Temporarily stop the timer (for breaks) |\n| `resume` | Continue after a pause |\n| `stop` | End the timing session |\n| `update` | Modify timer details |\n\n## Date/Time Handling\n\nAll timer operations accept and return ISO 8601 formatted dates and times. The timezone of the dates is determined by the user's settings."
  }, {
    "name" : "Team",
    "description" : "# Team Management\n\nThe Team API enables managing teams and their members, crucial for collaborative time tracking and project management.\n\n## Team Structure\n\nEach team can have multiple members with different permission levels:\n- **Owner** - Full control over the team\n- **Manager** - Can manage projects and members\n- **Member** - Can track time on team projects\n\n## Teams and Organizations\n\nTeams can be associated with organizations, which provide billing and administrative structure. A team must belong to an organization or to an individual user.\n\n## Member Management\n\nThe API provides capabilities to:\n- Add members to a team\n- Update member permissions\n- Remove members\n- Search for potential team members (colleagues)"
  }, {
    "name" : "Project",
    "description" : "# Project Management\n\nThe Project API handles the creation and management of projects, which are the fundamental containers for time tracking activities.\n\n## Project Structure\n\nProjects can include:\n- Basic details (title, description, etc.)\n- Team association\n- Client/employer information\n- Color coding for visual identification\n- Members with different access levels\n\n## Project Members\n\nProject membership controls who can track time on a project. Members can have different roles:\n- **Owner** - Full control over the project\n- **Manager** - Can manage tasks and other members\n- **Member** - Can track time on the project\n\n## Project Settings\n\nProjects have configurable settings like:\n- Default billable status for tasks\n- Default rate for time entries\n- Salary visibility controls"
  }, {
    "name" : "Tag",
    "description" : "# Task Categorization\n\nThe Tag API allows for creating and managing tags to categorize tasks. Tags provide a flexible way to organize time entries beyond project structure.\n\n## Tag Features\n\n- Color coding for visual identification\n- Team-wide or personal tags\n- Usage statistics to see how tags are utilized\n- Archive capability for infrequently used tags\n\n## Tag Management\n\nTags can be:\n- Created with a name and color\n- Updated to change name or color\n- Archived to hide from active selection\n- Deleted when no longer needed\n\n## Searching and Filtering\n\nThe API provides robust search capabilities to find tags by team, project, or usage status."
  }, {
    "name" : "Rate",
    "description" : "# Billing Rates\n\nThe Rate API manages billing rates that can be applied to time entries. Rates determine how time is valued for billing purposes.\n\n## Rate Structure\n\nEach rate includes:\n- A title or name\n- A multiplier factor (e.g., 1.0 for standard, 1.5 for overtime)\n- An optional extra charge amount\n\n## Rate Scope\n\nRates can be:\n- Personal (available only to the creating user)\n- Team-wide (available to all team members)\n\n## Rate Application\n\nRates are applied to tasks during creation or can be modified later. Projects can set default rates to be applied to new tasks automatically."
  }, {
    "name" : "Task",
    "description" : "# Time Entry Management\n\nThe Task API provides endpoints to manage time entries, which represent specific periods of work on projects.\n\n## Task Components\n\nEach task includes:\n- Project association\n- Start and end times\n- Description of work performed\n- Optional location information\n- Billing status (billable, paid, billed)\n- Optional classification tags\n\n## Associated Data\n\nTasks can have related:\n- Pauses (breaks during work)\n- Expenses (costs incurred)\n- Notes (comments or documentation)\n\n## Workflow States\n\nTasks track workflow state through flags:\n- `billable` - Whether the task can be billed\n- `billed` - Whether the task has been included in an invoice\n- `paid` - Whether payment has been received"
  }, {
    "name" : "Pause",
    "description" : "# Break Tracking\n\nThe Pause API manages breaks during task execution. Pauses represent periods within a task where work was temporarily stopped.\n\n## Pause Structure\n\nEach pause includes:\n- Association with a specific task\n- Start time\n- End time (or null if still ongoing)\n- Optional description\n\n## Pause Management\n\nPauses can be:\n- Created when a break begins\n- Updated to modify times or description\n- Ended when work resumes\n- Deleted if recorded incorrectly\n\n## Time Calculation\n\nThe system automatically calculates the duration of pauses and subtracts them from the total task time to determine actual working time."
  }, {
    "name" : "Expense",
    "description" : "# Expense Tracking\n\nThe Expense API manages costs incurred during work that need to be reimbursed or passed through to clients.\n\n## Expense Structure\n\nEach expense includes:\n- Association with a specific task\n- Amount\n- Date/time\n- Description\n- Optional file attachment (receipt)\n- Refund status\n\n## File Attachments\n\nExpenses can include file attachments such as receipts or invoices. The API provides endpoints to upload, download, and manage these files.\n\n## Refund Tracking\n\nThe refund status tracks whether expenses have been reimbursed to the user. This can be updated through dedicated status endpoints."
  }, {
    "name" : "Note",
    "description" : "# Work Documentation\n\nThe Note API manages text annotations and file attachments related to tasks. Notes provide a way to document work details, decisions, or observations.\n\n## Note Structure\n\nEach note includes:\n- Association with a specific task\n- Text content\n- Date/time\n- Optional file attachment\n\n## File Management\n\nNotes can include file attachments. The API provides endpoints to upload, download, and manage these files.\n\n## Printing and Export\n\nNotes can be exported as PDF documents for reporting or sharing with clients or team members."
  }, {
    "name" : "Document",
    "description" : "# Document Management\n\nThe Document API handles the creation and management of formal documents like invoices, timesheets, and work records. These documents can incorporate tasks, expenses, and notes to create consolidated records for clients and internal use.\n\n## Document Types\n\nThe API supports three primary document types:\n- **Invoices**: For billing clients based on recorded time and expenses\n- **Timesheets**: For reporting work hours in a structured format\n- **Work Records**: For documenting completed work with details and attachments\n\n## Document Features\n\nDocuments include comprehensive information:\n- Company and customer details\n- Line items from tasks and expenses\n- Tax and discount calculations\n- Payment terms and status tracking\n- Customizable templates\n\n## Document Operations\n\nThe API supports the full document lifecycle:\n- Creating new documents from scratch or templates\n- Updating document content and status\n- Printing to PDF format with customized layouts\n- Marking documents as paid or approved\n\n## Template System\n\nDocuments can be saved as templates for reuse, maintaining consistent formatting and content structure across multiple documents."
  }, {
    "name" : "Export",
    "description" : "# Data Export\n\nThe Export API facilitates generating and delivering comprehensive reports in various formats for analysis, reporting, and integration purposes.\n\n## Export Formats\n\nThe API supports multiple export formats:\n- **Excel**: Detailed workbooks with multiple sheets\n- **CSV**: Simple tabular data for import into other systems\n- **PDF**: Formatted reports for presentation and printing\n\n## Export Content\n\nExports can include various data types:\n- Time entries with detailed breakdowns\n- Project summaries and statistics\n- Team member work reports\n- Expense reports\n- Custom filtered data sets\n\n## Delivery Methods\n\nReports can be:\n- Downloaded directly through the API\n- Sent via email to specified recipients\n- Generated in the background for later retrieval\n\n## Customization\n\nExports are highly customizable through parameters:\n- Date ranges for time filtering\n- Project, team, and user selections\n- Field selection for included data\n- Grouping and sorting options"
  }, {
    "name" : "Automation",
    "description" : "# Time Tracking Automation\n\nThe Automation API manages automated time tracking triggers based on location, network connections, or beacon detection. These automations help users start and stop time tracking without manual intervention.\n\n## Automation Types\n\nThree automation triggers are supported:\n- **Geofence**: Location-based triggers using GPS coordinates and radius\n- **WLAN**: Network-based triggers using SSID identification\n- **Beacon**: Proximity-based triggers using Bluetooth beacons\n\n## Actions\n\nAutomations can trigger different actions:\n- Starting time tracking for a project\n- Stopping active time tracking\n- Pausing active time tracking\n\n## Configuration\n\nEach automation includes:\n- Project association\n- Trigger conditions (location, network, or beacon details)\n- Action to perform\n- Activation status (enabled/disabled)\n- Sharing settings for team use\n\n## Management\n\nThe API provides endpoints to:\n- Create new automations\n- Update existing automations\n- Enable or disable automations\n- Delete automations when no longer needed"
  }, {
    "name" : "Todos",
    "description" : "# Task Management\n\nThe Todos API provides a lightweight task management system for planning and tracking work to be done. Todos serve as organizational units that can be associated with time tracking tasks when work is performed.\n\n## Todo Structure\n\nEach todo includes:\n- Name and description of the work to be done\n- Project association\n- Status tracking (open/closed)\n- Due date for scheduling\n- User assignments for responsibility\n- Estimated time for completion\n\n## Todo Lifecycle\n\nTodos follow a simple workflow:\n- Creation with initial details\n- Assignment to team members\n- Status updates as work progresses\n- Closure when work is complete\n\n## Time Tracking Integration\n\nTodos integrate with time tracking:\n- Time entries can be associated with specific todos\n- Time spent is automatically tracked against estimates\n- Todos display progress based on recorded time\n\n## Task Planning\n\nThe API supports project planning:\n- Assigning todos to multiple team members\n- Setting due dates to manage deadlines\n- Tracking estimated vs. actual time\n- Filtering and searching for specific todos"
  }, {
    "name" : "Organization",
    "description" : "# Organization Management\n\nThe Organization API handles the creation and management of organizational entities that represent businesses or departments. Organizations provide an overarching structure above teams for administrative and billing purposes.\n\n## Organization Structure\n\nOrganizations include:\n- Basic information (name, description, etc.)\n- Branding elements (image, color)\n- Membership with permission levels\n- Subscription and billing information\n\n## Permission Management\n\nOrganizations use a permission system:\n- **Admin**: Full control over the organization\n- **Invoicing**: Permission to manage invoices and documents\n- **Billing**: Permission to view and manage billing information\n\n## Member Management\n\nThe API provides endpoints to:\n- Add members to an organization\n- Update member permissions\n- Remove members\n- List and search organization members\n\n## Team Association\n\nOrganizations can contain multiple teams:\n- Teams inherit organization settings\n- Organization members can access teams based on permissions\n- Teams can be created within the organization context"
  }, {
    "name" : "API Keys",
    "description" : "Operations for managing API keys, including creation, revocation, and listing"
  }, {
    "name" : "InvoiceSeries",
    "description" : "Endpoint to manage invoice series for generating sequential invoice numbers."
  }, {
    "name" : "MFA",
    "description" : "Multi-factor authentication recovery and management"
  }, {
    "name" : "Password Weak",
    "description" : "Tracks whether the user's current password matched a breach corpus and the time it was flagged"
  }, {
    "name" : "Reminder",
    "description" : "Endpoint to retrieve and manage scheduled reminders."
  } ],
  "paths" : {
    "/v1/organizations/{orgId}/absences/{id}/approve" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Approve absence",
        "operationId" : "approveAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Absence approved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/{id}/cancel" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Cancel absence",
        "operationId" : "cancelAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Cancellation reason",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceReasonDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceReasonDto"
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Absence cancelled",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences" : {
      "get" : {
        "tags" : [ "Absences" ],
        "summary" : "List absences",
        "operationId" : "listAbsences",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Contract ID",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Items per page",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of absences",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Create absence",
        "operationId" : "createAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Absence data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created absence",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/with-file" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Create absence with file",
        "description" : "Creates a new absence with an optional file attachment in a single request. Pass the absence data as JSON in the 'data' form field and the file in the 'file' field.",
        "operationId" : "createAbsenceWithFile",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "data" ],
                "type" : "object",
                "properties" : {
                  "data" : {
                    "$ref" : "#/components/schemas/AbsenceCreateDto"
                  },
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Created absence",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/{id}" : {
      "get" : {
        "tags" : [ "Absences" ],
        "summary" : "Get absence",
        "operationId" : "getAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Absence details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Absences" ],
        "summary" : "Update absence",
        "operationId" : "updateAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated absence",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Absences" ],
        "summary" : "Remove absence",
        "operationId" : "removeAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "reason",
          "in" : "query",
          "description" : "Reason for the deletion (recorded in the audit log)",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Absence removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/getFileUrl/{id}" : {
      "get" : {
        "tags" : [ "Absences" ],
        "summary" : "Get absence file URL",
        "description" : "Retrieves a signed URL for downloading the file attachment associated with the absence.",
        "operationId" : "getAbsenceFileUrl",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "File URL response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "404" : {
            "description" : "Absence or file not found"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/{id}/reject" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Reject absence",
        "operationId" : "rejectAbsence",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Rejection reason",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceReasonDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceReasonDto"
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Absence rejected",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/search" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Search absences",
        "operationId" : "searchAbsences",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Search parameters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absences/{id}/file" : {
      "post" : {
        "tags" : [ "Absences" ],
        "summary" : "Upload file to absence",
        "description" : "Uploads a file attachment (e.g. medical certificate) to an existing absence. Supported file types include images (jpg, png, gif) and documents (pdf).",
        "operationId" : "uploadAbsenceFile",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "type" : "object",
                "properties" : {
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Updated absence with file",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absence-types" : {
      "get" : {
        "tags" : [ "Absence Types" ],
        "summary" : "List absence types",
        "operationId" : "listAbsenceTypes",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "asc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of absence types",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Absence Types" ],
        "summary" : "Create absence type",
        "operationId" : "createAbsenceType",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Absence type data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceTypeCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceTypeCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created absence type",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/absence-types/{id}" : {
      "get" : {
        "tags" : [ "Absence Types" ],
        "summary" : "Get absence type",
        "operationId" : "getAbsenceType",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence type ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Absence type details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Absence Types" ],
        "summary" : "Update absence type",
        "operationId" : "updateAbsenceType",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence type ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceTypeUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AbsenceTypeUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated absence type",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceTypeDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Absence Types" ],
        "summary" : "Remove absence type",
        "operationId" : "removeAbsenceType",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Absence type ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Absence type removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/apikeys" : {
      "get" : {
        "tags" : [ "API Keys" ],
        "summary" : "List API keys",
        "description" : "Retrieves a paginated list of API keys for the authenticated user. Supports filtering and pagination.",
        "operationId" : "listApiKeys",
        "parameters" : [ {
          "name" : "search",
          "in" : "query",
          "description" : "Search term to filter API keys by name",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "filter",
          "in" : "query",
          "description" : "Show all/active or inactive keys",
          "schema" : {
            "type" : "string",
            "default" : "active",
            "enum" : [ "all", "active", "inactive" ]
          },
          "example" : "all"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination. Pagination is 1-based (starts at 1).",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Maximum number of items per page. Value must be between 1 and 100.",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "API keys retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyList"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "post" : {
        "tags" : [ "API Keys" ],
        "summary" : "Create a new API key",
        "description" : "Creates a new API key for the authenticated user. The complete API key is returned only once and cannot be retrieved later.",
        "operationId" : "createApiKey",
        "requestBody" : {
          "description" : "API key creation details",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ApiKeyCreateRequest"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ApiKeyCreateRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "API key created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/apikeys/{keyId}" : {
      "get" : {
        "tags" : [ "API Keys" ],
        "summary" : "Get API key details",
        "description" : "Retrieves details for a specific API key. The complete API key secret is not included in the response.",
        "operationId" : "getApiKey",
        "parameters" : [ {
          "name" : "keyId",
          "in" : "path",
          "description" : "API key ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "API key details retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ApiKeyDto"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "404" : {
            "description" : "API key not found"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "delete" : {
        "tags" : [ "API Keys" ],
        "summary" : "Delete an API key",
        "description" : "Permanently deletes an API key.",
        "operationId" : "deleteApiKey",
        "parameters" : [ {
          "name" : "keyId",
          "in" : "path",
          "description" : "API key ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "API key deleted successfully"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "404" : {
            "description" : "API key not found"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/apikeys/revoke-all" : {
      "post" : {
        "tags" : [ "API Keys" ],
        "summary" : "Revoke all API keys",
        "description" : "Revokes all API keys for the authenticated user. Useful in case of a security breach.",
        "operationId" : "revokeAllApiKeys",
        "responses" : {
          "200" : {
            "description" : "All API keys revoked successfully"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/apikeys/{keyId}/revoke" : {
      "post" : {
        "tags" : [ "API Keys" ],
        "summary" : "Revoke an API key",
        "description" : "Revokes (deactivates) an API key so it can no longer be used for authentication.",
        "operationId" : "revokeApiKey",
        "parameters" : [ {
          "name" : "keyId",
          "in" : "path",
          "description" : "API key ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "API key revoked successfully"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "404" : {
            "description" : "API key not found"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/audit-logs" : {
      "get" : {
        "tags" : [ "Audit Logs" ],
        "summary" : "List audit logs",
        "operationId" : "listAuditLogs",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "created"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "desc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Filter by contract",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "entityType",
          "in" : "query",
          "description" : "Filter by entity type",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "entityId",
          "in" : "query",
          "description" : "Filter by entity id",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "userId",
          "in" : "query",
          "description" : "Filter by user id",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "action",
          "in" : "query",
          "description" : "Filter by action",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of audit logs",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AuditLogList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AuditLogList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/automations" : {
      "get" : {
        "tags" : [ "Automation" ],
        "summary" : "List automations",
        "description" : "Retrieves a paginated list of automations filtered by optional parameters. Automations can be filtered by project and status. Users will only see automations they have access to based on their permissions.",
        "operationId" : "list",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "query",
          "description" : "Filter automations by project ID",
          "schema" : {
            "type" : "string"
          },
          "example" : "proj123"
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter automations by status",
          "schema" : {
            "type" : "string",
            "enum" : [ "enabled", "disabled" ]
          },
          "example" : "enabled"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort by",
          "schema" : {
            "type" : "string",
            "default" : "created",
            "enum" : [ "project", "created" ]
          },
          "example" : "created"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order (ascending or descending)",
          "schema" : {
            "type" : "string",
            "default" : "desc",
            "enum" : [ "asc", "desc" ]
          },
          "example" : "desc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Maximum number of items per page",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          },
          "example" : 20
        } ],
        "responses" : {
          "200" : {
            "description" : "List of automations retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationList"
                },
                "example" : {
                  "items" : [ {
                    "id" : "auto123",
                    "project" : {
                      "id" : "proj123",
                      "title" : "Office Project"
                    },
                    "typeId" : 0,
                    "action" : 0,
                    "enabled" : true,
                    "shared" : false,
                    "address" : "123 Main St",
                    "latitude" : 47.6062,
                    "longitude" : -122.3321,
                    "radius" : 200,
                    "member" : {
                      "uid" : "user123",
                      "firstname" : "John",
                      "lastname" : "Doe"
                    },
                    "name" : "Office (200m)"
                  } ],
                  "count" : 1,
                  "sort" : "created",
                  "order" : "desc",
                  "page" : 1,
                  "limit" : 20
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationList"
                },
                "example" : {
                  "items" : [ {
                    "id" : "auto123",
                    "project" : {
                      "id" : "proj123",
                      "title" : "Office Project"
                    },
                    "typeId" : 0,
                    "action" : 0,
                    "enabled" : true,
                    "shared" : false,
                    "address" : "123 Main St",
                    "latitude" : 47.6062,
                    "longitude" : -122.3321,
                    "radius" : 200,
                    "member" : {
                      "uid" : "user123",
                      "firstname" : "John",
                      "lastname" : "Doe"
                    },
                    "name" : "Office (200m)"
                  } ],
                  "count" : 1,
                  "sort" : "created",
                  "order" : "desc",
                  "page" : 1,
                  "limit" : 20
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          }
        }
      },
      "post" : {
        "tags" : [ "Automation" ],
        "summary" : "Create automation",
        "description" : "Creates a new automation for automatic time tracking based on location (geofence), WLAN detection, or beacon detection. The type of automation is determined by the typeId field. Based on the typeId, different fields are required. For geofence (typeId=0): address, latitude, longitude, and radius are required. For WLAN detection (typeId=1): ssid is required. For beacon detection (typeId=2): beaconUUID is required.",
        "operationId" : "create",
        "requestBody" : {
          "description" : "Automation object to be created",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Automation created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : false,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 200,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (200m)"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : false,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 200,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (200m)"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid input, object invalid"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          }
        }
      }
    },
    "/v1/automations/{id}" : {
      "get" : {
        "tags" : [ "Automation" ],
        "summary" : "Get automation",
        "description" : "Retrieves a specific automation by its unique identifier. Users can only retrieve automations they have access to based on their permissions.",
        "operationId" : "get",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the automation",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "auto123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Automation retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : false,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 200,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (200m)"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : false,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 200,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (200m)"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          },
          "404" : {
            "description" : "Automation not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Automation" ],
        "summary" : "Update automation",
        "description" : "Updates an existing automation identified by its unique ID. Only specific fields can be updated, and the appropriate fields must be provided based on the automation type (geofence, WLAN, or beacon).",
        "operationId" : "update",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the automation to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "auto123"
        } ],
        "requestBody" : {
          "description" : "Updated automation object",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Automation updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : true,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 300,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (300m)"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationDto"
                },
                "example" : {
                  "id" : "auto123",
                  "project" : {
                    "id" : "proj123",
                    "title" : "Office Project"
                  },
                  "typeId" : 0,
                  "action" : 0,
                  "enabled" : true,
                  "shared" : true,
                  "address" : "123 Main St",
                  "latitude" : 47.6062,
                  "longitude" : -122.3321,
                  "radius" : 300,
                  "member" : {
                    "uid" : "user123",
                    "firstname" : "John",
                    "lastname" : "Doe"
                  },
                  "name" : "Office (300m)"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid input, object invalid"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          },
          "404" : {
            "description" : "Automation not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Automation" ],
        "summary" : "Remove automation",
        "description" : "Deletes an automation by marking it as deleted (soft delete). Users can only delete automations they have created or have permission to manage.",
        "operationId" : "remove",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the automation to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "auto123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Automation successfully deleted"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          },
          "404" : {
            "description" : "Automation not found"
          }
        }
      }
    },
    "/v1/automations/search" : {
      "post" : {
        "tags" : [ "Automation" ],
        "summary" : "Search automations",
        "description" : "Advanced search for automations with multiple filter criteria. Provides a more comprehensive search capability than the list endpoint, allowing filtering by project IDs, type, status, and pagination parameters.",
        "operationId" : "search",
        "requestBody" : {
          "description" : "Search parameters for automations",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/AutomationListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationList"
                },
                "example" : {
                  "items" : [ {
                    "id" : "auto123",
                    "project" : {
                      "id" : "proj123",
                      "title" : "Office Project"
                    },
                    "typeId" : 0,
                    "action" : 0,
                    "enabled" : true,
                    "shared" : false,
                    "address" : "123 Main St",
                    "latitude" : 47.6062,
                    "longitude" : -122.3321,
                    "radius" : 200,
                    "member" : {
                      "uid" : "user123",
                      "firstname" : "John",
                      "lastname" : "Doe"
                    },
                    "name" : "Office (200m)"
                  } ],
                  "count" : 1,
                  "projectIds" : [ "proj123" ],
                  "type" : 0,
                  "status" : "enabled",
                  "sort" : "created",
                  "order" : "desc",
                  "page" : 1,
                  "limit" : 20
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AutomationList"
                },
                "example" : {
                  "items" : [ {
                    "id" : "auto123",
                    "project" : {
                      "id" : "proj123",
                      "title" : "Office Project"
                    },
                    "typeId" : 0,
                    "action" : 0,
                    "enabled" : true,
                    "shared" : false,
                    "address" : "123 Main St",
                    "latitude" : 47.6062,
                    "longitude" : -122.3321,
                    "radius" : 200,
                    "member" : {
                      "uid" : "user123",
                      "firstname" : "John",
                      "lastname" : "Doe"
                    },
                    "name" : "Office (200m)"
                  } ],
                  "count" : 1,
                  "projectIds" : [ "proj123" ],
                  "type" : 0,
                  "status" : "enabled",
                  "sort" : "created",
                  "order" : "desc",
                  "page" : 1,
                  "limit" : 20
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid search parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User does not have sufficient permissions"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/activate" : {
      "put" : {
        "tags" : [ "Contracts" ],
        "summary" : "Activate contract",
        "operationId" : "activateContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract activated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/bulk" : {
      "post" : {
        "tags" : [ "Contracts" ],
        "summary" : "Bulk create contracts for several members",
        "operationId" : "bulkCreateContracts",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Bulk contract data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractBulkCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractBulkCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created contracts",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts" : {
      "get" : {
        "tags" : [ "Contracts" ],
        "summary" : "List contracts",
        "operationId" : "listContracts",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "user",
          "in" : "query",
          "description" : "Filter by user ID (use 'me' for current user)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter by status (draft, active, suspended, terminated)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "search",
          "in" : "query",
          "description" : "Search term (matches contract name and member firstname/lastname/email)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "validFrom"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "desc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of contracts",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Contracts" ],
        "summary" : "Create contract",
        "operationId" : "createContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contract data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created contract",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}" : {
      "get" : {
        "tags" : [ "Contracts" ],
        "summary" : "Get contract",
        "operationId" : "getContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Contracts" ],
        "summary" : "Update contract",
        "operationId" : "updateContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated contract",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Contracts" ],
        "summary" : "Remove contract",
        "operationId" : "removeContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/reactivate" : {
      "put" : {
        "tags" : [ "Contracts" ],
        "summary" : "Reactivate contract",
        "operationId" : "reactivateContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract reactivated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/recalculate-balances" : {
      "post" : {
        "tags" : [ "Contracts" ],
        "summary" : "Recalculate leave and overtime balances from source data (admin, audit-logged)",
        "operationId" : "recalculateContractBalances",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Recalculation started",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/reset" : {
      "post" : {
        "tags" : [ "Contracts" ],
        "summary" : "Reset (delete) a misconfigured contract incl. its absences and balances. Blocked when approved/compensated history exists. Requires a reason; fully audit-logged.",
        "operationId" : "resetContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Reset data (reason required)",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractResetDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractResetDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Contract reset"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/suspend" : {
      "put" : {
        "tags" : [ "Contracts" ],
        "summary" : "Suspend contract",
        "operationId" : "suspendContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract suspended",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contracts/{id}/terminate" : {
      "put" : {
        "tags" : [ "Contracts" ],
        "summary" : "Terminate contract",
        "operationId" : "terminateContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract terminated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contract-templates" : {
      "get" : {
        "tags" : [ "Contract Templates" ],
        "summary" : "List contract templates",
        "operationId" : "listContractTemplates",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "asc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of contract templates",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Contract Templates" ],
        "summary" : "Create contract template",
        "operationId" : "createContractTemplate",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Contract template data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractTemplateCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractTemplateCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created contract template",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/contract-templates/{id}" : {
      "get" : {
        "tags" : [ "Contract Templates" ],
        "summary" : "Get contract template",
        "operationId" : "getContractTemplate",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Contract template details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Contract Templates" ],
        "summary" : "Update contract template",
        "operationId" : "updateContractTemplate",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractTemplateUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ContractTemplateUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated contract template",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ContractTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Contract Templates" ],
        "summary" : "Remove contract template",
        "operationId" : "removeContractTemplate",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Template removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/documents" : {
      "get" : {
        "tags" : [ "Document" ],
        "summary" : "List documents",
        "description" : "Retrieves a paginated list of documents based on filter criteria. Documents can be filtered by organization, type, status, and template flag. Results can be sorted and ordered according to specified parameters.",
        "operationId" : "list_1",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Organization ID to filter documents by",
          "schema" : {
            "type" : "string"
          },
          "example" : "org-123456"
        }, {
          "name" : "type",
          "in" : "query",
          "description" : "Document type to filter by: 0 = Invoice, 1 = Timesheet, 2 = Work Record",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0,
            "enum" : [ 0, 1, 2 ]
          },
          "example" : 0
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Document status to filter by: paid, unpaid, approved, notApproved",
          "schema" : {
            "type" : "string",
            "enum" : [ "paid", "unpaid", "approved", "notApproved" ]
          },
          "example" : "unpaid"
        }, {
          "name" : "template",
          "in" : "query",
          "description" : "Filter by template flag. If true, returns only document templates",
          "schema" : {
            "type" : "boolean",
            "default" : false
          },
          "example" : false
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort results by",
          "schema" : {
            "type" : "string",
            "enum" : [ "date", "created", "name", "customer" ]
          },
          "example" : "date"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order: asc or desc",
          "schema" : {
            "type" : "string",
            "default" : "desc",
            "enum" : [ "asc", "desc" ]
          },
          "example" : "desc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Maximum number of results per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32",
            "default" : 20
          },
          "example" : 20
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved list of documents",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request parameters"
          },
          "401" : {
            "description" : "Not authorized to access documents"
          }
        }
      },
      "post" : {
        "tags" : [ "Document" ],
        "summary" : "Create document",
        "description" : "Creates a new document based on the provided data. Can create invoices, timesheets, or work records. Document can include associated tasks, expenses, and notes. A document can also be saved as a template for future use.",
        "operationId" : "create_1",
        "requestBody" : {
          "description" : "Document data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Document successfully created",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid document data provided"
          },
          "401" : {
            "description" : "Not authorized to create documents"
          }
        }
      }
    },
    "/v1/documents/{id}" : {
      "get" : {
        "tags" : [ "Document" ],
        "summary" : "Get document",
        "description" : "Retrieves a specific document by its unique identifier. The response includes all document details along with associated tasks, expenses, and notes.",
        "operationId" : "get_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Document ID to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "doc-123456"
        } ],
        "responses" : {
          "200" : {
            "description" : "Document successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Document not found"
          },
          "401" : {
            "description" : "Not authorized to access this document"
          }
        }
      },
      "put" : {
        "tags" : [ "Document" ],
        "summary" : "Update document",
        "description" : "Updates an existing document with the provided data. Can update all document properties, including status flags (paid, approved), content, and associated tasks, expenses, and notes.",
        "operationId" : "update_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Document ID to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "doc-123456"
        } ],
        "requestBody" : {
          "description" : "Updated document data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Document successfully updated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid update data or document not found"
          },
          "401" : {
            "description" : "Not authorized to update this document"
          }
        }
      },
      "delete" : {
        "tags" : [ "Document" ],
        "summary" : "Remove document",
        "description" : "Permanently deletes a document by its unique identifier. This operation also removes all associated document-task, document-expense, and document-note relationships.",
        "operationId" : "remove_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Document ID to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "doc-123456"
        } ],
        "responses" : {
          "200" : {
            "description" : "Document successfully deleted"
          },
          "400" : {
            "description" : "Document not found"
          },
          "401" : {
            "description" : "Not authorized to delete this document"
          }
        }
      }
    },
    "/v1/documents/by-reference" : {
      "get" : {
        "tags" : [ "Document" ],
        "summary" : "Get documents by reference",
        "description" : "Retrieves documents that reference a specific task or expense. Provide either taskId or expenseId query parameter to get documents that include the referenced item.",
        "operationId" : "getByReference",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "query",
          "description" : "Task ID to search for documents",
          "schema" : {
            "type" : "string"
          },
          "example" : "task-123456"
        }, {
          "name" : "expenseId",
          "in" : "query",
          "description" : "Expense ID to search for documents",
          "schema" : {
            "type" : "string"
          },
          "example" : "expense-123456"
        } ],
        "responses" : {
          "200" : {
            "description" : "Documents successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - must provide either taskId or expenseId"
          },
          "401" : {
            "description" : "Not authorized to access documents"
          }
        }
      }
    },
    "/v1/documents/print" : {
      "post" : {
        "tags" : [ "Document" ],
        "summary" : "Print document",
        "description" : "Generates a PDF printable version of a document based on the provided print settings. The document can be formatted according to template settings and can optionally include ZUGFeRD-compliant XML data for electronic invoice processing. Returns the document as a PDF binary stream.",
        "operationId" : "print",
        "requestBody" : {
          "description" : "Document print settings",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentPrint"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentPrint"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "PDF document successfully generated",
            "content" : {
              "application/pdf" : { }
            }
          },
          "400" : {
            "description" : "Document not found or invalid print settings"
          },
          "401" : {
            "description" : "Not authorized to print this document"
          }
        }
      }
    },
    "/v1/documents/search" : {
      "post" : {
        "tags" : [ "Document" ],
        "summary" : "Search documents",
        "description" : "Performs an advanced search for documents based on provided criteria. Supports full-text search across document fields (name, customer, description, invoiceId, customerId) and allows filtering by organization, type, status, and template flag. Results can be sorted, ordered, and paginated.",
        "operationId" : "search_1",
        "requestBody" : {
          "description" : "Search and filter parameters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/DocumentListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/DocumentList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid search parameters"
          },
          "401" : {
            "description" : "Not authorized to search documents"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/break-rules" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List break rules",
        "operationId" : "listBreakRules",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of break rules",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/BreakRuleDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/BreakRuleDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add break rule",
        "operationId" : "addBreakRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Break rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BreakRuleCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/BreakRuleCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created break rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BreakRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BreakRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/leave-rules" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List leave rules",
        "operationId" : "listLeaveRules",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of leave rules",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LeaveRuleDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/LeaveRuleDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add leave rule",
        "operationId" : "addLeaveRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Leave rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveRuleCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveRuleCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created leave rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/overtime-rules" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List overtime rules",
        "operationId" : "listOvertimeRules",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of overtime rules",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeRuleDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeRuleDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add overtime rule",
        "operationId" : "addOvertimeRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Overtime rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeRuleCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeRuleCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created overtime rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/overtime-rules/{ruleId}/conditions" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List overtime rule conditions",
        "operationId" : "listOvertimeRuleConditions",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Overtime rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of overtime rule conditions",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeRuleConditionDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeRuleConditionDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add overtime rule condition",
        "operationId" : "addOvertimeRuleCondition",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Overtime rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Overtime rule condition data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeRuleConditionCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeRuleConditionCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created overtime rule condition",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeRuleConditionDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeRuleConditionDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/shift-definitions" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List shift definitions",
        "operationId" : "listShiftDefinitions",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of shift definitions",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ShiftDefinitionDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/ShiftDefinitionDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add shift definition",
        "operationId" : "addShiftDefinition",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Shift definition data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ShiftDefinitionCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ShiftDefinitionCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created shift definition",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ShiftDefinitionDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ShiftDefinitionDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/surcharge-tiers" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List overtime surcharge tiers",
        "operationId" : "listSurchargeTiers",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of surcharge tiers",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeSurchargeTierDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/OvertimeSurchargeTierDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add overtime surcharge tier",
        "operationId" : "addSurchargeTier",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Surcharge tier data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeSurchargeTierCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeSurchargeTierCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created surcharge tier",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeSurchargeTierDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeSurchargeTierDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/working-time-rules" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List working time rules",
        "operationId" : "listWorkingTimeRules",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of working time rules",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Add working time rule",
        "operationId" : "addWorkingTimeRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Working time rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WorkingTimeRuleCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/WorkingTimeRuleCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created working time rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "List employment models",
        "operationId" : "listEmploymentModels",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "asc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of employment models",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Create employment model",
        "operationId" : "createEmploymentModel",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Employment model data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmploymentModelCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmploymentModelCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created employment model",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}" : {
      "get" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Get employment model",
        "operationId" : "getEmploymentModel",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Employment model details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Update employment model",
        "operationId" : "updateEmploymentModel",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmploymentModelUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmploymentModelUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated employment model",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmploymentModelDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove employment model",
        "operationId" : "removeEmploymentModel",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Employment model removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/break-rules/{ruleId}" : {
      "put" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Update break rule",
        "operationId" : "updateBreakRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Break rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Break rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/BreakRuleUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/BreakRuleUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated break rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BreakRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/BreakRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove break rule",
        "operationId" : "removeBreakRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Break rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Break rule removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/leave-rules/{ruleId}" : {
      "put" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Update leave rule",
        "operationId" : "updateLeaveRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Leave rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Leave rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveRuleUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveRuleUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated leave rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove leave rule",
        "operationId" : "removeLeaveRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Leave rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Leave rule removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/overtime-rules/{ruleId}" : {
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove overtime rule",
        "operationId" : "removeOvertimeRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Overtime rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Overtime rule removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/overtime-rules/{ruleId}/conditions/{conditionId}" : {
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove overtime rule condition",
        "operationId" : "removeOvertimeRuleCondition",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Overtime rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "conditionId",
          "in" : "path",
          "description" : "Condition ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Overtime rule condition removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/shift-definitions/{shiftId}" : {
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove shift definition",
        "operationId" : "removeShiftDefinition",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "shiftId",
          "in" : "path",
          "description" : "Shift definition ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Shift definition removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/surcharge-tiers/{tierId}" : {
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove overtime surcharge tier",
        "operationId" : "removeSurchargeTier",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "tierId",
          "in" : "path",
          "description" : "Surcharge tier ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Surcharge tier removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/employment-models/{id}/working-time-rules/{ruleId}" : {
      "put" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Update working time rule",
        "operationId" : "updateWorkingTimeRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Working time rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Working time rule data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WorkingTimeRuleUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/WorkingTimeRuleUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated working time rule",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WorkingTimeRuleDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Employment Models" ],
        "summary" : "Remove working time rule",
        "operationId" : "removeWorkingTimeRule",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Employment model ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "ruleId",
          "in" : "path",
          "description" : "Working time rule ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Working time rule removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/employment-model-templates" : {
      "get" : {
        "operationId" : "listEmploymentModelTemplates",
        "responses" : {
          "default" : {
            "description" : "default response",
            "content" : {
              "application/json" : { }
            }
          }
        }
      }
    },
    "/v1/expenses" : {
      "get" : {
        "tags" : [ "Expense" ],
        "summary" : "List expenses",
        "description" : "Retrieves a paginated list of expenses. The list can be filtered by taskId and sorted by various criteria. Pagination is 1-based.",
        "operationId" : "list_2",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "query",
          "description" : "Task ID to filter expenses by",
          "schema" : {
            "type" : "string"
          },
          "example" : "task-123"
        }, {
          "name" : "filter",
          "in" : "query",
          "description" : "Filter expenses by status: 'all', 'paid', 'unpaid'",
          "schema" : {
            "type" : "string"
          },
          "example" : "unpaid"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field: 'date' for sort by date, 'created' for sort by creation time. Default is date.",
          "schema" : {
            "type" : "string"
          },
          "example" : "date"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order: 'asc' for ascending, 'desc' for descending. Default is asc.",
          "schema" : {
            "type" : "string"
          },
          "example" : "desc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based). Default is 1.",
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page (1-100). Default is 20.",
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          },
          "example" : 20
        }, {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Organization ID. When set together with admin or invoicing permission on the organization, the response includes expenses across all teams in that organization (used by the document picker).",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of expenses",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Expense" ],
        "summary" : "Create expense",
        "description" : "Creates a new expense with the provided details. The expense will be associated with the task specified in the DTO.",
        "operationId" : "create_2",
        "requestBody" : {
          "description" : "Expense data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created expense",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      }
    },
    "/v1/expenses/with-file" : {
      "post" : {
        "tags" : [ "Expense" ],
        "summary" : "Create expense with file",
        "description" : "Creates a new expense with an optional file attachment in a single request. Pass the expense data as JSON in the 'data' form field and the file in the 'file' field. This is useful when you want to create an expense and upload a receipt in one operation.",
        "operationId" : "createWithFile",
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "data" ],
                "type" : "object",
                "properties" : {
                  "data" : {
                    "$ref" : "#/components/schemas/ExpenseCreateDto"
                  },
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Created expense",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      }
    },
    "/v1/expenses/{id}" : {
      "get" : {
        "tags" : [ "Expense" ],
        "summary" : "Get expense",
        "description" : "Retrieves detailed information about a specific expense by its ID.",
        "operationId" : "get_2",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Expense ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "exp-123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Expense details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "404" : {
            "description" : "Expense not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Expense" ],
        "summary" : "Update expense",
        "description" : "Updates an existing expense with the provided details. Only the fields included in the DTO will be updated.",
        "operationId" : "update_2",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Expense ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "exp-123"
        } ],
        "requestBody" : {
          "description" : "Updated expense data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated expense",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          },
          "404" : {
            "description" : "Expense not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Expense" ],
        "summary" : "Remove expense",
        "description" : "Deletes an expense by marking it as deleted (soft delete). Associated data like file attachments are preserved but no longer accessible.",
        "operationId" : "remove_2",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Expense ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "exp-123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Expense successfully deleted"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          },
          "404" : {
            "description" : "Expense not found"
          }
        }
      }
    },
    "/v1/expenses/getFileUrl/{id}" : {
      "get" : {
        "tags" : [ "Expense" ],
        "summary" : "Get expense file URL",
        "description" : "Retrieves a signed URL for downloading the file attachment associated with the expense. The URL is time-limited and secure.",
        "operationId" : "getFileUrl",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Expense ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "exp-123"
        } ],
        "responses" : {
          "200" : {
            "description" : "File URL response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "404" : {
            "description" : "Expense or file not found"
          }
        }
      }
    },
    "/v1/expenses/search" : {
      "post" : {
        "tags" : [ "Expense" ],
        "summary" : "Search expenses",
        "description" : "Performs an advanced search for expenses based on the provided search parameters. Supports filtering by multiple criteria, date ranges, and full-text search.",
        "operationId" : "search_2",
        "requestBody" : {
          "description" : "Search parameters for expenses",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of matching expenses",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid search parameters"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/expenses/updateStatus" : {
      "put" : {
        "tags" : [ "Expense" ],
        "summary" : "Update expense refund status",
        "description" : "Updates the refund status of an expense. This is typically used to mark expenses as refunded after payment has been processed.",
        "operationId" : "updateStatus",
        "requestBody" : {
          "description" : "Expense status update data containing ID and refund status",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseStatus"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExpenseStatus"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated expense",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          },
          "404" : {
            "description" : "Expense not found"
          }
        }
      }
    },
    "/v1/expenses/{id}/file" : {
      "post" : {
        "tags" : [ "Expense" ],
        "summary" : "Upload file to expense",
        "description" : "Uploads a file attachment to an existing expense. The file will be stored in cloud storage and associated with the expense. Supported file types include images (jpg, png, gif) and documents (pdf). Maximum file size is 10MB.",
        "operationId" : "uploadFile",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Expense ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "exp-123"
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "type" : "object",
                "properties" : {
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Updated expense with file",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ExpenseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid file or expense not found"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      }
    },
    "/v1/export/data" : {
      "post" : {
        "tags" : [ "Export" ],
        "summary" : "Generate and download a timesheet export",
        "description" : "Creates an export file based on the provided parameters and returns a signed URL to download it. Supports various formats (Excel, CSV, PDF), report types, date ranges, and filtering options. The export can include task data, project summaries, team member summaries, and more based on the report type selection.",
        "operationId" : "data",
        "requestBody" : {
          "description" : "Configuration parameters for the export, including format, report type, date range, filtering options, etc.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExportParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExportParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Export successfully created",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid export parameters"
          },
          "401" : {
            "description" : "User not authorized to access this data"
          },
          "500" : {
            "description" : "Internal server error occurred during export creation"
          }
        }
      }
    },
    "/v1/export/send" : {
      "post" : {
        "tags" : [ "Export" ],
        "summary" : "Generate and email a timesheet export",
        "description" : "Creates an export file based on the provided parameters and sends it via email to the specified address. This endpoint uses the same export generation logic as the /data endpoint but delivers the result via email instead of returning a download URL. The email field in exportParams must be provided.",
        "operationId" : "send",
        "requestBody" : {
          "description" : "Configuration parameters for the export to be sent via email. Must include a valid email address in the 'email' field along with format, report type, date range, and other filtering options.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExportParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ExportParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Export successfully sent via email"
          },
          "400" : {
            "description" : "Invalid export parameters or missing email address"
          },
          "401" : {
            "description" : "User not authorized to access this data"
          },
          "500" : {
            "description" : "Internal server error occurred during export creation or sending"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/holiday-collections" : {
      "get" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "List holiday collections",
        "operationId" : "listHolidayCollections",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "asc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of holiday collections",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "Create holiday collection",
        "operationId" : "createHolidayCollection",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Holiday collection data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created holiday collection",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/holiday-collections/{id}" : {
      "get" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "Get holiday collection",
        "operationId" : "getHolidayCollection",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Holiday collection details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "Update holiday collection",
        "operationId" : "updateHolidayCollection",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated holiday collection",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "Remove holiday collection",
        "operationId" : "removeHolidayCollection",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Collection removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/holiday-collections/search" : {
      "post" : {
        "tags" : [ "Holiday Collections" ],
        "summary" : "Search holiday collections",
        "operationId" : "searchHolidayCollections",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Search parameters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/countries" : {
      "get" : {
        "tags" : [ "Holiday Countries" ],
        "summary" : "List countries in collection",
        "operationId" : "listHolidayCountries",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of countries",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/HolidayCollectionCountryDto"
                  }
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/HolidayCollectionCountryDto"
                  }
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Holiday Countries" ],
        "summary" : "Add country to collection",
        "operationId" : "addHolidayCountry",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Country data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionCountryCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayCollectionCountryCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Country added",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionCountryDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayCollectionCountryDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/countries/{countryCode}" : {
      "delete" : {
        "tags" : [ "Holiday Countries" ],
        "summary" : "Remove country from collection",
        "operationId" : "removeHolidayCountry",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "countryCode",
          "in" : "path",
          "description" : "Country code",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Country removed"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/events/{id}" : {
      "put" : {
        "tags" : [ "Holiday Events" ],
        "summary" : "Update a holiday event (name, type)",
        "operationId" : "updateHolidayEvent",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Event ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayEventUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayEventUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated event",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Holiday Events" ],
        "summary" : "Delete a holiday event",
        "operationId" : "deleteHolidayEvent",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Event ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Event deleted"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/events" : {
      "get" : {
        "tags" : [ "Holiday Events" ],
        "summary" : "List holiday events",
        "operationId" : "listHolidayEvents",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "year",
          "in" : "query",
          "description" : "Year",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of events",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/events/search" : {
      "post" : {
        "tags" : [ "Holiday Events" ],
        "summary" : "Search holiday events",
        "operationId" : "searchHolidayEvents",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Search parameters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayEventListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayEventListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayEventList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/templates/{id}/activate" : {
      "put" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Activate holiday template",
        "operationId" : "activateHolidayTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Template activated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/templates" : {
      "get" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "List holiday templates",
        "operationId" : "listHolidayTemplates",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "active",
          "in" : "query",
          "description" : "Filter by active state",
          "schema" : {
            "type" : "boolean"
          }
        }, {
          "name" : "sourceType",
          "in" : "query",
          "description" : "Filter by source type (public, custom)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "countryCode",
          "in" : "query",
          "description" : "Filter by country code",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "asc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of templates",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Create custom holiday template",
        "operationId" : "createCustomTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Template data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayTemplateCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayTemplateCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created template",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/templates/{id}/deactivate" : {
      "put" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Deactivate holiday template",
        "operationId" : "deactivateHolidayTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Template deactivated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holiday-collections/{collectionId}/templates/{id}" : {
      "get" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Get holiday template",
        "operationId" : "getHolidayTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Template details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "put" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Update holiday template",
        "operationId" : "updateHolidayTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayTemplateUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/HolidayTemplateUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated template",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/HolidayTemplateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "delete" : {
        "tags" : [ "Holiday Templates" ],
        "summary" : "Delete a holiday template",
        "operationId" : "deleteHolidayTemplate",
        "parameters" : [ {
          "name" : "collectionId",
          "in" : "path",
          "description" : "Collection ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Template ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Template deleted"
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/hr-warnings" : {
      "get" : {
        "tags" : [ "HR Warnings" ],
        "summary" : "Get current HR warnings for the authenticated user",
        "description" : "Returns real-time work-limit warnings based on the user's contract, employment model, and current working time. Includes contract target warnings, legal maximum warnings, and break reminders. Accounts for overlapping tasks and the currently running timer. No parameters needed — the endpoint resolves the running timer and computes all durations server-side.",
        "operationId" : "getHrWarnings",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "HR warnings with effective working time totals"
          },
          "401" : {
            "description" : "Unauthorized — invalid user, teams not activated, or business plan required"
          }
        }
      }
    },
    "/v1/invoice-series" : {
      "get" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "List invoice series",
        "description" : "Retrieves a paginated list of invoice series. Returns user's own series plus series from organizations where the user holds admin or invoicing permission. Results can be filtered by organization and status.",
        "operationId" : "list_3",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Filter by organization ID",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter by status",
          "schema" : {
            "type" : "string",
            "default" : "active",
            "enum" : [ "all", "active", "inactive" ]
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "name",
            "enum" : [ "name", "created", "lastUsed" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of invoice series",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Create invoice series",
        "description" : "Creates a new invoice series. The pattern must contain at least one counter placeholder ({N}, {NNN}, {NNNN}, or {NNNNN}). Supported placeholders: {YYYY}, {YY}, {MM}, {DD}, {PREFIX}, {N}, {NNN}, {NNNN}, {NNNNN}.",
        "operationId" : "create_3",
        "requestBody" : {
          "description" : "Invoice series data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Invoice series created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid invoice series data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Caller lacks admin or invoicing permission on the specified organization"
          }
        }
      }
    },
    "/v1/invoice-series/{id}/generate" : {
      "post" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Generate next invoice number",
        "description" : "Generates and consumes the next sequential invoice number. This operation is atomic and uses pessimistic locking to prevent duplicate numbers in concurrent scenarios.",
        "operationId" : "generate",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Invoice series ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Invoice number generated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string",
                  "example" : "RE-2024-0001"
                }
              },
              "application/xml" : {
                "schema" : {
                  "type" : "string",
                  "example" : "RE-2024-0001"
                }
              }
            }
          },
          "400" : {
            "description" : "Invoice series not available or inactive"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "No access to this invoice series"
          },
          "404" : {
            "description" : "Invoice series not found"
          }
        }
      }
    },
    "/v1/invoice-series/{id}" : {
      "get" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Get invoice series",
        "description" : "Retrieves a specific invoice series by its ID. User must own the series or be a member of the organization.",
        "operationId" : "get_3",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Invoice series ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Invoice series found",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "No access to this invoice series"
          },
          "404" : {
            "description" : "Invoice series not found"
          }
        }
      },
      "put" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Update invoice series",
        "description" : "Updates an existing invoice series. Counter can only be increased, not decreased. Organization ownership can be reassigned: pass an organizationId to share the series with that organization, or null to make it personal. The caller must hold admin or invoicing permission on both the current and the target organization.",
        "operationId" : "update_3",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Invoice series ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated invoice series data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Invoice series updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid data or counter decrease attempted"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "No access to this invoice series"
          },
          "404" : {
            "description" : "Invoice series not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Remove invoice series",
        "description" : "Soft-deletes an invoice series. The series will no longer appear in lists or be usable for generation.",
        "operationId" : "remove_3",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Invoice series ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Invoice series successfully deleted"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "No access to this invoice series"
          },
          "404" : {
            "description" : "Invoice series not found"
          }
        }
      }
    },
    "/v1/invoice-series/{id}/preview" : {
      "get" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Preview next invoice number",
        "description" : "Previews what the next invoice number would be without consuming it. Useful for showing users what number will be assigned before creating an invoice.",
        "operationId" : "preview",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Invoice series ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Preview of next invoice number",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceNumberPreviewDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceNumberPreviewDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invoice series not available"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "No access to this invoice series"
          },
          "404" : {
            "description" : "Invoice series not found"
          }
        }
      }
    },
    "/v1/invoice-series/search" : {
      "post" : {
        "tags" : [ "InvoiceSeries" ],
        "summary" : "Search invoice series",
        "description" : "Performs an advanced search for invoice series based on the provided parameters. Supports filtering by organization and status. Results are paginated and can be sorted.",
        "operationId" : "search_3",
        "requestBody" : {
          "description" : "Search parameters including filters, pagination, and sorting",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/InvoiceSeriesListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of matching invoice series",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/InvoiceSeriesList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/leave-balances/{id}/adjust" : {
      "post" : {
        "tags" : [ "Leave Balances" ],
        "summary" : "Adjust leave balance",
        "operationId" : "adjustLeaveBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Leave balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Adjustment data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveBalanceAdjustDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/LeaveBalanceAdjustDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Adjusted leave balance",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/leave-balances/contract/{contractId}" : {
      "get" : {
        "tags" : [ "Leave Balances" ],
        "summary" : "Get leave balance by contract and year",
        "operationId" : "getLeaveBalanceByContract",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "contractId",
          "in" : "path",
          "description" : "Contract ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "year",
          "in" : "query",
          "description" : "Year",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Leave balance details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/leave-balances" : {
      "get" : {
        "tags" : [ "Leave Balances" ],
        "summary" : "List leave balances by organization",
        "operationId" : "listLeaveBalances",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "year",
          "in" : "query",
          "description" : "Year",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Filter by contract",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of leave balances",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/auth/mfa/recovery-codes/generate" : {
      "post" : {
        "tags" : [ "MFA" ],
        "summary" : "Generate MFA recovery codes",
        "description" : "Generates 10 one-time recovery codes for the authenticated user. Any previously issued codes are invalidated. Plaintext codes are returned exactly once; the server stores only bcrypt hashes.",
        "operationId" : "generateMfaRecoveryCodes",
        "responses" : {
          "200" : {
            "description" : "Recovery codes generated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MfaRecoveryCodesResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MfaRecoveryCodesResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthenticated"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/auth/mfa/recovery" : {
      "post" : {
        "tags" : [ "MFA" ],
        "summary" : "Recover account via MFA recovery code",
        "description" : "Validates a recovery code. The code is a high-entropy secret that identifies its owner on its own, so no email is required. On success, marks the code used and returns a Firebase custom token. Clients should call signInWithCustomToken and immediately force re-enrollment of TOTP.",
        "operationId" : "mfaRecovery",
        "requestBody" : {
          "description" : "Recovery payload",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/MfaRecoveryRequest"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/MfaRecoveryRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Recovery successful",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MfaRecoveryResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MfaRecoveryResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Invalid recovery code"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/notes" : {
      "get" : {
        "tags" : [ "Note" ],
        "summary" : "List notes with pagination and sorting",
        "description" : "Retrieves a paginated list of notes with optional filtering by task ID and customizable sorting. Supports both ascending and descending order. Notes are filtered based on the authenticated user's permissions and can be limited to notes for a specific task.",
        "operationId" : "list_4",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "query",
          "description" : "ID of the task to filter notes by. If provided, only notes for this task will be returned.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort the notes by",
          "schema" : {
            "type" : "string",
            "example" : "date",
            "default" : "date",
            "enum" : [ "date", "created" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "example" : 1,
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Maximum number of notes to return per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "example" : 20,
            "default" : 20
          }
        }, {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Organization ID. When set together with admin or invoicing permission on the organization, the response includes notes across all teams in that organization (used by the document picker).",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved list of notes",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteList"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to access notes"
          },
          "400" : {
            "description" : "Invalid parameters provided"
          }
        }
      },
      "post" : {
        "tags" : [ "Note" ],
        "summary" : "Create a new note",
        "description" : "Creates a new note entry in the system. The note can be associated with a task and include text content and optional file attachments. Users can only create notes for tasks they have permission to access. The created note will inherit permissions from its associated task.",
        "operationId" : "create_4",
        "requestBody" : {
          "description" : "Note data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Note successfully created",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to create notes"
          },
          "400" : {
            "description" : "Invalid note data provided - Missing required fields or invalid data format"
          }
        }
      }
    },
    "/v1/notes/with-file" : {
      "post" : {
        "tags" : [ "Note" ],
        "summary" : "Create note with file",
        "description" : "Creates a new note with an optional file attachment in a single request. Pass the note data as JSON in the 'data' form field and the file in the 'file' field. This is useful when you want to create a note and attach a document in one operation.",
        "operationId" : "createWithFile_1",
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "required" : [ "data" ],
                "type" : "object",
                "properties" : {
                  "data" : {
                    "$ref" : "#/components/schemas/NoteCreateDto"
                  },
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Created note",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      }
    },
    "/v1/notes/{id}" : {
      "get" : {
        "tags" : [ "Note" ],
        "summary" : "Get note by ID",
        "description" : "Retrieves detailed information about a specific note using its unique identifier. Returns the complete note object including metadata, content, and file information if available. Users can only access notes they have permission to view based on project membership and role.",
        "operationId" : "get_4",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the note to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Note successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to access this note"
          },
          "404" : {
            "description" : "Note not found or user doesn't have permission to view it"
          }
        }
      },
      "put" : {
        "tags" : [ "Note" ],
        "summary" : "Update an existing note",
        "description" : "Modifies an existing note's content, metadata, or attachments. Partial updates are supported through the NoteUpdateDto object. Only the note owner or users with project manager/owner roles can update notes. The note's last update timestamp will be automatically updated.",
        "operationId" : "update_4",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the note to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Note data for update",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Note successfully updated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to update this note"
          },
          "404" : {
            "description" : "Note not found"
          },
          "400" : {
            "description" : "Invalid update data provided or note validation failed"
          }
        }
      },
      "delete" : {
        "tags" : [ "Note" ],
        "summary" : "Delete a note",
        "description" : "Permanently removes a note and its associated data (including attachments) from the system. This action cannot be undone. Only the note owner or users with project manager/owner roles can delete notes. The deletion is a soft delete that marks the note as deleted rather than physically removing it.",
        "operationId" : "remove_4",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the note to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Note successfully deleted"
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to delete this note"
          },
          "404" : {
            "description" : "Note not found or user doesn't have permission to delete it"
          }
        }
      }
    },
    "/v1/notes/getFileUrl/{id}" : {
      "get" : {
        "tags" : [ "Note" ],
        "summary" : "Get URL for note attachment",
        "description" : "Generates and returns a signed URL to access the file attachment associated with a specific note. The URL may be temporary and require authentication. If the note has no file attachment or the user doesn't have permission to access it, an empty URL will be returned. The system handles file permissions and may create copies for shared access.",
        "operationId" : "getFileUrl_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the note whose file URL should be retrieved",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "File URL successfully generated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FileResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to access this file"
          },
          "404" : {
            "description" : "Note or file not found"
          }
        }
      }
    },
    "/v1/notes/search" : {
      "post" : {
        "tags" : [ "Note" ],
        "summary" : "Advanced note search",
        "description" : "Performs an advanced search across notes using multiple criteria defined in NoteListParams. Supports filtering by task IDs, date range, document ID, and text search. Results can be sorted and paginated. This endpoint is more flexible than the basic list endpoint and allows for complex queries.",
        "operationId" : "search_4",
        "requestBody" : {
          "description" : "Search parameters for filtering notes",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/NoteListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteList"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required - User is not authorized to search notes"
          },
          "400" : {
            "description" : "Invalid search parameters provided"
          }
        }
      }
    },
    "/v1/notes/{id}/file" : {
      "post" : {
        "tags" : [ "Note" ],
        "summary" : "Upload file to note",
        "description" : "Uploads a file attachment to an existing note. The file will be stored in cloud storage and associated with the note. Supported file types include images (jpg, png, gif) and documents (pdf). Maximum file size is 10MB.",
        "operationId" : "uploadFile_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Note ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "multipart/form-data" : {
              "schema" : {
                "type" : "object",
                "properties" : {
                  "file" : {
                    "$ref" : "#/components/schemas/FormDataContentDisposition"
                  }
                }
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Updated note with file",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/NoteDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid file or note not found"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      }
    },
    "/v1/organizations/{organizationId}/members" : {
      "post" : {
        "tags" : [ "Organization" ],
        "summary" : "Add organization member",
        "description" : "Adds a user to an organization with specified permissions. If the user already exists in the system, they will be added to the organization. If not, an invitation will be prepared. Requires admin permission in the organization. Permission flags control what actions the user can perform in the organization - 'admin' grants full control, 'invoicing' allows invoice management, and 'billing' allows access to billing information.",
        "operationId" : "addOrganizationMember",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        } ],
        "requestBody" : {
          "description" : "Member creation details including email, name, and permission flags",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created member/permission details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (e.g., user not found/invited, already member, invalid email)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      }
    },
    "/v1/organizations" : {
      "get" : {
        "tags" : [ "Organization" ],
        "summary" : "List organizations",
        "description" : "Retrieves a paginated list of organizations accessible to the current user. The list includes organizations where the user has direct permissions or permissions through team membership. Results can be sorted and paginated.",
        "operationId" : "listOrganizations",
        "parameters" : [ {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "permission",
            "enum" : [ "alpha", "permission", "created" ]
          },
          "example" : "alpha"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          },
          "example" : "asc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based)",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "required" : true,
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          },
          "example" : 20
        }, {
          "name" : "permission",
          "in" : "query",
          "description" : "Restrict results to organizations where the caller holds the named permission. Team-only membership does not satisfy this filter.",
          "schema" : {
            "type" : "string",
            "enum" : [ "admin", "invoicing", "billing", "invoicingOrAdmin" ]
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of organizations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Organization" ],
        "summary" : "Create organization",
        "description" : "Creates a new organization with the current user as the administrator. The user must be authorized to create organizations based on their account type and subscription. The organization will be initially created with the current user as the only member with admin permissions.",
        "operationId" : "createOrganization",
        "requestBody" : {
          "description" : "Organization details for creation including name and optional properties. Name is required.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created organization",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (e.g., missing properties)"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{organizationId}/members/{permissionId}/invited" : {
      "delete" : {
        "tags" : [ "Organization" ],
        "summary" : "Delete invited organization member",
        "description" : "Permanently deletes an invited organization member and their profile. Only organization admins can delete invited members. The member must still be in invited status (not yet activated their account).",
        "operationId" : "deleteInvitedOrganizationMember",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        }, {
          "name" : "permissionId",
          "in" : "path",
          "description" : "Permission ID (unique identifier for the user-organization relationship)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "perm-67890"
        } ],
        "responses" : {
          "200" : {
            "description" : "Invited organization member and profile successfully deleted"
          },
          "400" : {
            "description" : "Member is not in invited status or cannot be deleted"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      }
    },
    "/v1/organizations/{id}" : {
      "get" : {
        "tags" : [ "Organization" ],
        "summary" : "Get organization",
        "description" : "Retrieves detailed information about a specific organization by its ID. The user must have permissions to access the organization, either directly or through team membership. Returns a 401 if the organization doesn't exist or the user doesn't have access.",
        "operationId" : "getOrganization",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        } ],
        "responses" : {
          "200" : {
            "description" : "Organization details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized or not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Organization" ],
        "summary" : "Update organization",
        "description" : "Updates an existing organization's details. Only users with administrator permissions in the organization can update it. Supports partial updates - only fields included in the request will be modified.",
        "operationId" : "updateOrganization",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        } ],
        "requestBody" : {
          "description" : "Updated organization details. Only included fields will be updated.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated organization",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (e.g., validation error, organization not found)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      },
      "delete" : {
        "tags" : [ "Organization" ],
        "summary" : "Remove organization",
        "description" : "Soft deletes an organization by its ID. The organization will be marked as deleted but data will be preserved. Only organization administrators can perform this operation. Any associated permissions, subscriptions, and references from teams and documents will be handled appropriately.",
        "operationId" : "removeOrganization",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        } ],
        "responses" : {
          "200" : {
            "description" : "Organization removed successfully"
          },
          "400" : {
            "description" : "Bad request (e.g., organization not found)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      }
    },
    "/v1/organizations/{organizationId}/members/{permissionId}" : {
      "get" : {
        "tags" : [ "Organization" ],
        "summary" : "Get organization member",
        "description" : "Retrieves details of a specific member's permissions within an organization. Includes user profile information and permission flags. The permission ID is unique to the organization-user relationship. Requires the user to be a member of the organization with appropriate permissions.",
        "operationId" : "getOrganizationMember",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        }, {
          "name" : "permissionId",
          "in" : "path",
          "description" : "Permission ID (unique identifier for the user-organization relationship)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "perm-67890"
        } ],
        "responses" : {
          "200" : {
            "description" : "Member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (e.g., member not found in org)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission"
          }
        }
      },
      "put" : {
        "tags" : [ "Organization" ],
        "summary" : "Update organization member/permission",
        "description" : "Updates a specific user's permission flags within an organization. Can modify admin, invoicing, and billing permission flags. Requires admin access in the organization. Cannot remove the last admin of an organization - at least one admin must remain.",
        "operationId" : "updateOrganizationMember",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        }, {
          "name" : "permissionId",
          "in" : "path",
          "description" : "Permission ID (unique identifier for the user-organization relationship)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "perm-67890"
        } ],
        "requestBody" : {
          "description" : "Updated permission flags (admin, invoicing, billing)",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated member/permission details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request (e.g., permission not found, cannot remove last admin)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      },
      "delete" : {
        "tags" : [ "Organization" ],
        "summary" : "Remove organization member",
        "description" : "Removes a user's membership/permission from an organization (soft delete). The user will lose access to the organization and its resources. Requires admin access in the organization. Cannot remove the last admin of an organization - at least one admin must remain.",
        "operationId" : "removeOrganizationMember",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        }, {
          "name" : "permissionId",
          "in" : "path",
          "description" : "Permission ID (unique identifier for the user-organization relationship)",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "perm-67890"
        } ],
        "responses" : {
          "200" : {
            "description" : "Member/Permission removed successfully"
          },
          "400" : {
            "description" : "Bad request (e.g., permission not found, cannot remove last admin)"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not admin)"
          }
        }
      }
    },
    "/v1/organizations/{organizationId}/members/list" : {
      "post" : {
        "tags" : [ "Organization" ],
        "summary" : "List organization members",
        "description" : "Retrieves a paginated list of all members (users) within a specific organization with their permission details. Supports filtering by status (active/deleted) and searching by name or email. The user must have permission to view the organization's members.",
        "operationId" : "listOrganizationMembers",
        "parameters" : [ {
          "name" : "organizationId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "org-12345"
        } ],
        "requestBody" : {
          "description" : "Member list parameters including sort, order, pagination, search, and status filters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationMemberListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of members",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationMemberList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Invalid permission (e.g., not part of the organization)"
          }
        }
      }
    },
    "/v1/organizations/search" : {
      "post" : {
        "tags" : [ "Organization" ],
        "summary" : "Search organizations",
        "description" : "Searches organizations accessible to the current user based on the provided parameters. Supports advanced filtering and pagination. Uses the same parameter structure as the list operation but allows more complex search criteria through the request body.",
        "operationId" : "searchOrganizations",
        "requestBody" : {
          "description" : "Search parameters including sort, order, pagination, and custom filters",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OrganizationListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of matching organizations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OrganizationList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances/{balanceId}/adjust" : {
      "post" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "Manually adjust overtime balance (admin correction, audit-logged)",
        "operationId" : "adjustOvertimeBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "balanceId",
          "in" : "path",
          "description" : "Balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Adjustment data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeAdjustDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeAdjustDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Adjusted overtime balance",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances/{balanceId}/approve" : {
      "post" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "Approve overtime balance",
        "operationId" : "approveOvertimeBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "balanceId",
          "in" : "path",
          "description" : "Balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Approval data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeApprovalDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeApprovalDto"
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Overtime balance approved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances/{balanceId}/compensate" : {
      "post" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "Compensate overtime balance",
        "operationId" : "compensateOvertimeBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "balanceId",
          "in" : "path",
          "description" : "Balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Compensation data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeCompensateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeCompensateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Overtime balance compensated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances/{balanceId}" : {
      "get" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "Get overtime balance",
        "operationId" : "getOvertimeBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "balanceId",
          "in" : "path",
          "description" : "Balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Overtime balance details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances" : {
      "get" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "List overtime balances",
        "operationId" : "listOvertimeBalances",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Filter by contract",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "user",
          "in" : "query",
          "description" : "Filter by user ('me' or user id)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter by status",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "startDate",
          "in" : "query",
          "description" : "Filter by period start date (inclusive, yyyy-MM-dd)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "Filter by period start date (inclusive, yyyy-MM-dd)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "month",
          "in" : "query",
          "description" : "Filter by month of period start (1-12), independent of year",
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of overtime balances",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/overtime-balances/{balanceId}/reject" : {
      "post" : {
        "tags" : [ "Overtime Balances" ],
        "summary" : "Reject overtime balance",
        "operationId" : "rejectOvertimeBalance",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "balanceId",
          "in" : "path",
          "description" : "Balance ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Rejection data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeApprovalDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/OvertimeApprovalDto"
              }
            }
          }
        },
        "responses" : {
          "200" : {
            "description" : "Overtime balance rejected",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/auth/password-weak/clear" : {
      "post" : {
        "tags" : [ "Password Weak" ],
        "summary" : "Clear the password weak flag",
        "description" : "Clears passwordWeakSince. Called by clients after the user successfully rotates to a HIBP-clean password.",
        "operationId" : "clearPasswordWeak",
        "responses" : {
          "200" : {
            "description" : "Cleared"
          },
          "401" : {
            "description" : "Unauthenticated"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/auth/password-weak/flag" : {
      "post" : {
        "tags" : [ "Password Weak" ],
        "summary" : "Flag the current password as weak",
        "description" : "Sets passwordWeakSince to the current time if not already set. Called by clients after a HIBP check on login finds the user's password in the breach corpus.",
        "operationId" : "flagPasswordWeak",
        "responses" : {
          "200" : {
            "description" : "Flagged"
          },
          "401" : {
            "description" : "Unauthenticated"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/auth/password-weak" : {
      "get" : {
        "tags" : [ "Password Weak" ],
        "summary" : "Get password weak status",
        "description" : "Returns the millisecond timestamp at which the user's current password was first flagged as weak, or null if it is not flagged.",
        "operationId" : "getPasswordWeakStatus",
        "responses" : {
          "200" : {
            "description" : "Status retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PasswordWeakResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PasswordWeakResponse"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthenticated"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/pauses" : {
      "get" : {
        "tags" : [ "Pause" ],
        "summary" : "List pauses",
        "description" : "Retrieves a paginated list of pauses with sorting options. Filtered by task ID if provided. Results are paginated and can be sorted by various fields.",
        "operationId" : "list_5",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "query",
          "description" : "Filter pauses by task ID. If not provided, all accessible pauses will be returned.",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort results by.",
          "schema" : {
            "type" : "string",
            "default" : "date",
            "enum" : [ "date", "created" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction.",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination. Pagination is 1-based (starts at 1).",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Maximum number of items per page. Value must be between 1 and 100.",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successful operation. Returns a paginated list of pauses.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseList"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          }
        }
      },
      "post" : {
        "tags" : [ "Pause" ],
        "summary" : "Create pause",
        "description" : "Creates a new pause record with start and end times. A pause must be associated with a task and contains the time period when work was paused.",
        "operationId" : "create_5",
        "requestBody" : {
          "description" : "Pause data for creating a new pause. Must include taskId, startDateTime, and endDateTime.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Pause successfully created. Returns the created pause object.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request. The pause data is invalid or incomplete."
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          },
          "403" : {
            "description" : "Forbidden. User does not have permission to create a pause for this task."
          }
        }
      }
    },
    "/v1/pauses/{id}" : {
      "get" : {
        "tags" : [ "Pause" ],
        "summary" : "Get pause",
        "description" : "Retrieves a specific pause by its unique identifier. Returns detailed information about the pause including associated task.",
        "operationId" : "get_5",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the pause to retrieve.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successful operation. Returns the requested pause.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          },
          "404" : {
            "description" : "Not found. The specified pause does not exist or is not accessible."
          }
        }
      },
      "put" : {
        "tags" : [ "Pause" ],
        "summary" : "Update pause",
        "description" : "Updates an existing pause with new information. Can modify pause times, description, or other properties.",
        "operationId" : "update_5",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the pause to update.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "New pause data for updating. Only provided fields will be updated.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Pause successfully updated. Returns the updated pause object.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request. The pause data is invalid or incomplete."
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          },
          "403" : {
            "description" : "Forbidden. User does not have permission to update this pause."
          },
          "404" : {
            "description" : "Not found. The specified pause does not exist or is not accessible."
          }
        }
      },
      "delete" : {
        "tags" : [ "Pause" ],
        "summary" : "Remove pause",
        "description" : "Deletes a pause record. This is typically a soft delete that marks the pause as deleted rather than removing it from the database.",
        "operationId" : "remove_5",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the pause to delete.",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Pause successfully deleted."
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          },
          "403" : {
            "description" : "Forbidden. User does not have permission to delete this pause."
          },
          "404" : {
            "description" : "Not found. The specified pause does not exist or is not accessible."
          }
        }
      }
    },
    "/v1/pauses/search" : {
      "post" : {
        "tags" : [ "Pause" ],
        "summary" : "Search pauses",
        "description" : "Advanced search for pauses with various filtering options. Provides more sophisticated search capabilities than the list endpoint.",
        "operationId" : "search_5",
        "requestBody" : {
          "description" : "Search parameters for filtering pauses. Can include task ID, date ranges, sorting options, and pagination.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/PauseListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Successful operation. Returns a list of pauses matching the search criteria.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PauseList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request. The search parameters are invalid."
          },
          "401" : {
            "description" : "Unauthorized. Authentication is required to access this resource."
          }
        }
      }
    },
    "/v1/profiles/me/email-change" : {
      "get" : {
        "tags" : [ "Profile" ],
        "summary" : "Get pending email change status",
        "description" : "Returns the address awaiting verification and its expiry, or empty fields if no change is pending or the existing one has expired.",
        "operationId" : "getEmailChangeStatus",
        "responses" : {
          "200" : {
            "description" : "Status retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmailChangeStatusDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmailChangeStatusDto"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "post" : {
        "tags" : [ "Profile" ],
        "summary" : "Initiate email address change",
        "description" : "Stores the requested address as a pending change and dispatches a verification mail to that address. The current email continues to work as the login until the change is confirmed via the verification link.",
        "operationId" : "initiateEmailChange",
        "requestBody" : {
          "description" : "The new email address to verify and switch to",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmailChangeRequestDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmailChangeRequestDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Verification mail dispatched"
          },
          "400" : {
            "description" : "Invalid email or address already in use"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "delete" : {
        "tags" : [ "Profile" ],
        "summary" : "Cancel a pending email change",
        "description" : "Drops the pending email-change request without applying it. Safe to call when no change is pending.",
        "operationId" : "cancelEmailChange",
        "responses" : {
          "200" : {
            "description" : "Pending change cleared"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/profiles/email-change/confirm" : {
      "post" : {
        "tags" : [ "Profile" ],
        "summary" : "Confirm a pending email change",
        "description" : "Validates the verification token from the email link and promotes the pending address to the live email. Unauthenticated because the user may click the link from a device where they are not signed in.",
        "operationId" : "confirmEmailChange",
        "parameters" : [ {
          "name" : "token",
          "in" : "query",
          "description" : "Verification token from the confirmation email link",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Email address updated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid or expired token"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/profiles/me" : {
      "get" : {
        "tags" : [ "Profile" ],
        "summary" : "Get current user profile",
        "description" : "Retrieves the profile information of the authenticated user. This is typically called upon login to get user details and subscription status.",
        "operationId" : "get_6",
        "parameters" : [ {
          "name" : "referrer",
          "in" : "query",
          "description" : "The referrer URL where the user came from, used for analytics",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "newsletter",
          "in" : "query",
          "description" : "Controls whether to include newsletter subscription status in the response or update subscription preference",
          "schema" : {
            "type" : "boolean"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Profile retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "put" : {
        "tags" : [ "Profile" ],
        "summary" : "Update current user profile",
        "description" : "Updates the profile information of the authenticated user. This can include personal details, preferences, and settings.",
        "operationId" : "update_6",
        "requestBody" : {
          "description" : "The updated profile information",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PublicProfileUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/PublicProfileUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Profile updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid profile data provided"
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/profiles/me/segments" : {
      "get" : {
        "tags" : [ "Profile" ],
        "summary" : "Get current user segment state",
        "description" : "Retrieves on-demand segment-driven UI state for the authenticated user, such as checkout recovery (abandoned or failed checkout). Kept separate from the profile payload so the login path stays fast; call it only where segment-driven UI exists.",
        "operationId" : "getSegments",
        "responses" : {
          "200" : {
            "description" : "Segment state retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProfileSegments"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProfileSegments"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authorized to access this endpoint"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/projects/{projectId}/members" : {
      "put" : {
        "tags" : [ "Project" ],
        "summary" : "Update project members",
        "description" : "Updates the list of members for a specific project. Can add new members, update existing ones, or remove members not included in the list. Only users with manager or owner permissions can update members. When adding new members, they must already be members of the associated team. Each member can be assigned different roles (owner, manager, member) and salary rates. The project owner cannot be removed or downgraded through this endpoint.",
        "operationId" : "updateMembers",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project to update members for",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "List of project member registrations. Members not included in this list will be removed from the project. Each registration includes user ID, role, and salary settings.",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ProjectRegistrationDto"
                }
              }
            },
            "application/xml" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ProjectRegistrationDto"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Project members updated successfully"
          },
          "400" : {
            "description" : "Invalid request data, project ID, or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to update project members"
          },
          "404" : {
            "description" : "Project not found or has been deleted"
          }
        }
      },
      "post" : {
        "tags" : [ "Project" ],
        "summary" : "Add project member",
        "description" : "Adds a new member to a project. Project owners and managers can add new members. The new member must already be a member of the associated team if the project belongs to a team. Provides different levels of permissions: Member (1), Manager (2), Owner (3).",
        "operationId" : "addProjectMember",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project to add a member to",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "Project member details including user identifier and permission level",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created project member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to add members to this project"
          },
          "404" : {
            "description" : "Project not found"
          }
        }
      }
    },
    "/v1/projects/{projectId}/members/batch" : {
      "post" : {
        "tags" : [ "Project" ],
        "summary" : "Batch add project members",
        "description" : "Adds multiple members to a project in a single operation. This is useful for bulk imports or when setting up a new project with multiple team members. All members must already be part of the associated team if the project belongs to a team. If any member in the batch fails validation, the entire operation will fail.",
        "operationId" : "batchProjectMembers",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project to add members to",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "List of project member creation objects",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ProjectMemberCreateDto"
                }
              }
            },
            "application/xml" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "$ref" : "#/components/schemas/ProjectMemberCreateDto"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "All project members successfully added"
          },
          "400" : {
            "description" : "Invalid request - validation errors in one or more member objects"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to add members to this project"
          },
          "404" : {
            "description" : "Project not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Project" ],
        "summary" : "Batch remove project members",
        "description" : "Removes multiple members from a project in a single operation. This is useful for cleanup operations or when removing access for multiple users at once. The project owner cannot be removed through this endpoint. If any member removal fails, the entire operation will fail.",
        "operationId" : "batchRemoveProjectMembers",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project to remove members from",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "List of member IDs to remove from the project",
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "type" : "string"
                }
              }
            },
            "application/xml" : {
              "schema" : {
                "type" : "array",
                "items" : {
                  "type" : "string"
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "All project members successfully removed"
          },
          "400" : {
            "description" : "Invalid request - cannot remove project owner or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to remove members from this project"
          },
          "404" : {
            "description" : "Project not found"
          }
        }
      }
    },
    "/v1/projects" : {
      "get" : {
        "tags" : [ "Project" ],
        "summary" : "List projects",
        "description" : "Retrieves a paginated list of projects. Results can be filtered by team and status, and sorted by different criteria. This endpoint supports pagination with 1-based page numbering.",
        "operationId" : "list_6",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "query",
          "description" : "Filter projects by team ID",
          "schema" : {
            "type" : "string"
          },
          "example" : "team-123"
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter projects by status",
          "schema" : {
            "type" : "string",
            "default" : "active",
            "enum" : [ "all", "active", "inactive" ]
          },
          "example" : "active"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field for the results",
          "schema" : {
            "type" : "string",
            "default" : "alpha",
            "enum" : [ "alpha", "alphaNum", "client", "duration", "created", "status" ]
          },
          "example" : "created"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          },
          "example" : "desc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number for pagination (1-based)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          },
          "example" : 20
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved list of projects",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectList"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to list projects"
          }
        }
      },
      "post" : {
        "tags" : [ "Project" ],
        "summary" : "Create project",
        "description" : "Creates a new project with the provided details. The authenticated user becomes the owner of the project and is automatically added as a project member with full permissions. If a team ID is provided, the project will be associated with that team and visible to team members according to their permissions.",
        "operationId" : "create_6",
        "requestBody" : {
          "description" : "Project data to create a new project. Must include title and can include team association, employer, description, and other settings.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Project successfully created",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to create a project in the specified team"
          }
        }
      }
    },
    "/v1/projects/{id}" : {
      "get" : {
        "tags" : [ "Project" ],
        "summary" : "Get project details",
        "description" : "Retrieves detailed information about a specific project by its ID. The response includes project metadata, settings, and statistics if the user has appropriate permissions. Project visibility depends on team membership and permission settings.",
        "operationId" : "get_7",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "responses" : {
          "200" : {
            "description" : "Project successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to view this project"
          },
          "404" : {
            "description" : "Project not found or has been deleted"
          }
        }
      },
      "put" : {
        "tags" : [ "Project" ],
        "summary" : "Update project",
        "description" : "Updates an existing project with the provided details. Only the project owner, team owner, or users with manager permissions can update project details. Fields not included in the request will retain their current values. The project ID cannot be changed, and team association changes may affect member permissions.",
        "operationId" : "update_7",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "Updated project data. Any fields not included will remain unchanged.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Project successfully updated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request data or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to update this project"
          },
          "404" : {
            "description" : "Project not found or has been deleted"
          }
        }
      },
      "delete" : {
        "tags" : [ "Project" ],
        "summary" : "Remove project",
        "description" : "Soft deletes a project and all its associated data including tasks, expenses, pauses, notes, and project members. Only the project owner, team owner, or users with appropriate permissions can delete projects. This is a soft delete operation - data remains in the database but is marked as deleted and won't appear in regular queries. Administrators can restore deleted projects if needed.",
        "operationId" : "remove_6",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "responses" : {
          "200" : {
            "description" : "Project successfully deleted"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to delete this project"
          },
          "404" : {
            "description" : "Project not found or already deleted"
          }
        }
      }
    },
    "/v1/projects/{projectId}/members/{id}" : {
      "get" : {
        "tags" : [ "Project" ],
        "summary" : "Get project member",
        "description" : "Retrieves detailed information about a specific project member by their unique identifier within a project.",
        "operationId" : "getProjectMember",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project member to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "member-456"
        } ],
        "responses" : {
          "200" : {
            "description" : "Project member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to view this project member"
          },
          "404" : {
            "description" : "Project or project member not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Project" ],
        "summary" : "Update project member",
        "description" : "Updates an existing project member's information, including permission level and salary settings. Only project owners can change permissions to owner level.",
        "operationId" : "updateProjectMember",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project member to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "member-456"
        } ],
        "requestBody" : {
          "description" : "Updated project member details including permission level and salary settings",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated project member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to update this project member"
          },
          "404" : {
            "description" : "Project or project member not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Project" ],
        "summary" : "Remove project member",
        "description" : "Removes a member from a project. Project owners can remove any member, and managers can remove regular members. The project owner cannot be removed through this endpoint.",
        "operationId" : "removeProjectMember",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the project member to remove",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "member-456"
        } ],
        "responses" : {
          "200" : {
            "description" : "Project member successfully removed"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to remove this project member"
          },
          "404" : {
            "description" : "Project or project member not found"
          }
        }
      }
    },
    "/v1/projects/{projectId}/members/list" : {
      "post" : {
        "tags" : [ "Project" ],
        "summary" : "List project members",
        "description" : "Retrieves a paginated list of members associated with a specific project. Supports filtering by status and search terms. The response includes each member's user ID, role, permissions, and salary rates (if visible based on permissions). Project members can have different roles such as owner, manager, or member, with corresponding permission levels. The authenticated user must have at least member-level access to the project to view its members.",
        "operationId" : "listMembers",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "path",
          "description" : "Unique identifier of the project to get members for",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "proj-12345"
        } ],
        "requestBody" : {
          "description" : "Parameters for filtering, pagination, and sorting project members",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectMemberListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Paginated list of project members",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectMemberList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid project ID format"
          },
          "401" : {
            "description" : "Authentication required"
          },
          "403" : {
            "description" : "Insufficient permissions to view project members"
          },
          "404" : {
            "description" : "Project not found or has been deleted"
          }
        }
      }
    },
    "/v1/projects/search" : {
      "post" : {
        "tags" : [ "Project" ],
        "summary" : "Search projects",
        "description" : "Performs an advanced search for projects using the provided parameters. Supports filtering by team, status, date ranges, and other criteria. Returns a paginated list of projects matching the search criteria. This endpoint offers more sophisticated filtering capabilities than the standard list endpoint. The search results respect user permissions - only projects visible to the user will be returned.",
        "operationId" : "search_6",
        "requestBody" : {
          "description" : "Search parameters including team filters, project filters, date ranges, and pagination settings. Supports complex filtering criteria beyond the basic list endpoint.",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ProjectListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ProjectList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid search parameters"
          },
          "401" : {
            "description" : "Authentication required"
          }
        }
      }
    },
    "/v1/rates" : {
      "get" : {
        "tags" : [ "Rate" ],
        "summary" : "List rates",
        "description" : "Retrieves a paginated list of billing rates with optional filtering by team, project and status. Results can be sorted by different criteria and are subject to user permission checks. Users can only see rates they have access to based on team membership.",
        "operationId" : "list_7",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "query",
          "description" : "Filter rates by team ID",
          "schema" : {
            "type" : "string"
          },
          "example" : "team123"
        }, {
          "name" : "projectId",
          "in" : "query",
          "description" : "Filter rates by project ID - if provided, will also resolve the associated teamId",
          "schema" : {
            "type" : "string"
          },
          "example" : "project456"
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter rates by status",
          "schema" : {
            "type" : "string",
            "default" : "active",
            "enum" : [ "all", "active", "inactive" ]
          },
          "example" : "active"
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort results by",
          "schema" : {
            "type" : "string",
            "default" : "alpha",
            "enum" : [ "alpha", "status", "created" ]
          },
          "example" : "alpha"
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          },
          "example" : "asc"
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based pagination)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          },
          "example" : 1
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          },
          "example" : 20
        } ],
        "responses" : {
          "200" : {
            "description" : "List of rates retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access rates"
          }
        }
      },
      "post" : {
        "tags" : [ "Rate" ],
        "summary" : "Create rate",
        "description" : "Creates a new billing rate. The rate can be associated with a team if the teamId is provided, otherwise it will be a personal rate. User must have appropriate team permissions to create team rates. The rate includes a title, billing factor and optional extra charge.",
        "operationId" : "create_7",
        "requestBody" : {
          "description" : "Rate data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Rate created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid rate data provided"
          },
          "401" : {
            "description" : "Not authorized to create rates"
          },
          "403" : {
            "description" : "Insufficient permissions to create team rates"
          }
        }
      }
    },
    "/v1/rates/{id}" : {
      "get" : {
        "tags" : [ "Rate" ],
        "summary" : "Get rate",
        "description" : "Retrieves a specific billing rate by its unique identifier. User must have appropriate permissions to view the rate. For team rates, user must be a team member with appropriate permissions.",
        "operationId" : "get_8",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the rate",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "rate789"
        } ],
        "responses" : {
          "200" : {
            "description" : "Rate retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access this rate"
          },
          "404" : {
            "description" : "Rate not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Rate" ],
        "summary" : "Update rate",
        "description" : "Updates an existing billing rate. Only fields included in the request will be modified. User must have appropriate permissions to modify the rate. For team rates, user must be a team manager or owner.",
        "operationId" : "update_8",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the rate to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "rate789"
        } ],
        "requestBody" : {
          "description" : "Updated rate data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Rate updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid rate data provided"
          },
          "401" : {
            "description" : "Not authorized to update rates"
          },
          "403" : {
            "description" : "Insufficient permissions to update this rate"
          },
          "404" : {
            "description" : "Rate not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Rate" ],
        "summary" : "Remove rate",
        "description" : "Soft-deletes a billing rate by marking it as deleted. Associated tasks will have their rate references cleared. User must have appropriate permissions to delete the rate. For team rates, user must be a team manager or owner.",
        "operationId" : "remove_7",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the rate to remove",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "rate789"
        } ],
        "responses" : {
          "200" : {
            "description" : "Rate successfully removed"
          },
          "401" : {
            "description" : "Not authorized to remove rates"
          },
          "403" : {
            "description" : "Insufficient permissions to remove this rate"
          },
          "404" : {
            "description" : "Rate not found"
          }
        }
      }
    },
    "/v1/rates/search" : {
      "post" : {
        "tags" : [ "Rate" ],
        "summary" : "Search rates",
        "description" : "Provides advanced search capabilities for rates with full filtering options. This endpoint accepts a RateListParams object that can include complex filtering criteria such as text search, team filtering, status filtering, and pagination options.",
        "operationId" : "search_7",
        "requestBody" : {
          "description" : "Search parameters for filtering rates",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/RateListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RateList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid search parameters"
          },
          "401" : {
            "description" : "Not authorized to search rates"
          }
        }
      }
    },
    "/v1/reminders" : {
      "get" : {
        "tags" : [ "Reminder" ],
        "summary" : "List reminders",
        "description" : "Retrieves a paginated list of reminders for the authenticated user with optional filtering by status.",
        "operationId" : "list_8",
        "parameters" : [ {
          "name" : "status",
          "in" : "query",
          "description" : "Filter reminders by status",
          "schema" : {
            "type" : "string",
            "enum" : [ "active", "paused", "completed", "cancelled" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based pagination)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of reminders retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access reminders"
          }
        }
      },
      "post" : {
        "tags" : [ "Reminder" ],
        "summary" : "Create reminder",
        "description" : "Creates a new scheduled reminder. Supports one-time and recurring (RRULE) schedules. Maximum 50 active reminders per user.",
        "operationId" : "create_8",
        "requestBody" : {
          "description" : "Reminder data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReminderCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReminderCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Reminder created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid reminder data provided"
          },
          "401" : {
            "description" : "Not authorized to create reminders"
          }
        }
      }
    },
    "/v1/reminders/{id}" : {
      "get" : {
        "tags" : [ "Reminder" ],
        "summary" : "Get reminder",
        "description" : "Retrieves a specific reminder by its unique identifier.",
        "operationId" : "get_9",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the reminder",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Reminder retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access this reminder"
          },
          "404" : {
            "description" : "Reminder not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Reminder" ],
        "summary" : "Update reminder",
        "description" : "Updates an existing reminder. Only fields included in the request will be modified. If the schedule is changed, the next fire time will be recomputed.",
        "operationId" : "update_9",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the reminder to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated reminder data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReminderUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ReminderUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Reminder updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ReminderDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid reminder data provided"
          },
          "401" : {
            "description" : "Not authorized to update reminders"
          },
          "404" : {
            "description" : "Reminder not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Reminder" ],
        "summary" : "Remove reminder",
        "description" : "Soft-deletes a reminder by marking it as deleted and cancelled.",
        "operationId" : "remove_8",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the reminder to remove",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Reminder successfully removed"
          },
          "401" : {
            "description" : "Not authorized to remove reminders"
          },
          "404" : {
            "description" : "Reminder not found"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/rest-period-violations/{id}/acknowledge" : {
      "post" : {
        "tags" : [ "Rest Period Violations" ],
        "summary" : "Acknowledge rest period violation",
        "operationId" : "acknowledgeRestPeriodViolation",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Violation ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Acknowledged rest period violation",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/rest-period-violations/{id}" : {
      "get" : {
        "tags" : [ "Rest Period Violations" ],
        "summary" : "Get rest period violation",
        "operationId" : "getRestPeriodViolation",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Violation ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Rest period violation details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/rest-period-violations" : {
      "get" : {
        "tags" : [ "Rest Period Violations" ],
        "summary" : "List rest period violations",
        "operationId" : "listRestPeriodViolations",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "workEndAt"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "desc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Filter by contract",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter by status",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "violationType",
          "in" : "query",
          "description" : "Filter by violation type",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of rest period violations",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/RestPeriodViolationList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/settings" : {
      "get" : {
        "tags" : [ "Settings" ],
        "summary" : "Get current user settings",
        "description" : "Retrieves all settings for the currently authenticated user. Returns preferences like theme, timezone, language, and display formats.",
        "operationId" : "get_10",
        "responses" : {
          "200" : {
            "description" : "User settings retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SettingsDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SettingsDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized - Authentication required"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      },
      "put" : {
        "tags" : [ "Settings" ],
        "summary" : "Update current user settings",
        "description" : "Updates settings for the currently authenticated user. This includes preferences like theme, timezone, language, currency, display formats, and timer behaviors.",
        "operationId" : "update_10",
        "requestBody" : {
          "description" : "Settings object containing user preferences to update",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/SettingsDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/SettingsDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Settings updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SettingsDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SettingsDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - Malformed settings data"
          },
          "401" : {
            "description" : "Not authorized - Authentication required"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/substitute-rest-days/{id}" : {
      "get" : {
        "tags" : [ "Substitute Rest Days" ],
        "summary" : "Get substitute rest day",
        "operationId" : "getSubstituteRestDay",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Substitute rest day ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Substitute rest day details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SubstituteRestDayDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SubstituteRestDayDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/organizations/{orgId}/substitute-rest-days" : {
      "get" : {
        "tags" : [ "Substitute Rest Days" ],
        "summary" : "List substitute rest days",
        "operationId" : "listSubstituteRestDays",
        "parameters" : [ {
          "name" : "orgId",
          "in" : "path",
          "description" : "Organization ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "workDate"
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order",
          "schema" : {
            "type" : "string",
            "default" : "desc"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Page size",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Filter by contract",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter by status",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of substitute rest days",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SubstituteRestDayList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/SubstituteRestDayList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/tags" : {
      "get" : {
        "tags" : [ "Tag" ],
        "summary" : "List tags",
        "description" : "Retrieves a paginated list of tags. The results can be filtered by team, project and status.",
        "operationId" : "list_9",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "query",
          "description" : "Filter tags by team ID",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "projectId",
          "in" : "query",
          "description" : "Filter tags by project ID",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter tags by status",
          "schema" : {
            "type" : "string",
            "default" : "active",
            "enum" : [ "all", "active", "inactive" ]
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Sort field",
          "schema" : {
            "type" : "string",
            "default" : "alpha",
            "enum" : [ "alpha", "status", "created" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort order direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of tags",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      },
      "post" : {
        "tags" : [ "Tag" ],
        "summary" : "Create tag",
        "description" : "Creates a new tag. The tag can be associated with a team and have a color assigned. Tags are used to categorize tasks and can be used for filtering and reporting.",
        "operationId" : "create_9",
        "requestBody" : {
          "description" : "Tag data for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Tag created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid tag data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Insufficient permission to create tag"
          }
        }
      }
    },
    "/v1/tags/{id}" : {
      "get" : {
        "tags" : [ "Tag" ],
        "summary" : "Get tag",
        "description" : "Retrieves a specific tag by its ID. Includes all tag details and, if available, team information.",
        "operationId" : "get_11",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Tag ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Tag found",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          },
          "404" : {
            "description" : "Tag not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Tag" ],
        "summary" : "Update tag",
        "description" : "Updates an existing tag. Can modify tag name, color, and archived status. Requires appropriate team permissions if the tag is associated with a team.",
        "operationId" : "update_11",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Tag ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated tag data",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Tag updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid tag data"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Insufficient permission to update tag"
          },
          "404" : {
            "description" : "Tag not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Tag" ],
        "summary" : "Remove tag",
        "description" : "Removes (soft-deletes) a tag by its ID. The tag will no longer appear in lists, but can potentially be restored by administrators. All tag associations with tasks will also be marked as deleted.",
        "operationId" : "remove_9",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Tag ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Tag successfully deleted"
          },
          "401" : {
            "description" : "Not authorized"
          },
          "403" : {
            "description" : "Insufficient permission to delete tag"
          },
          "404" : {
            "description" : "Tag not found"
          }
        }
      }
    },
    "/v1/tags/search" : {
      "post" : {
        "tags" : [ "Tag" ],
        "summary" : "Search tags",
        "description" : "Performs an advanced search for tags based on the provided parameters. Supports filtering by team, project, status, and search text. Results are paginated and can be sorted.",
        "operationId" : "search_8",
        "requestBody" : {
          "description" : "Search parameters including filters, pagination, and sorting",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TagListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of matching tags",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TagList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/tasks" : {
      "get" : {
        "tags" : [ "Task" ],
        "summary" : "List tasks",
        "description" : "Retrieves a paginated list of tasks with optional sorting. The response includes task details and statistics.",
        "operationId" : "list_10",
        "parameters" : [ {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort by",
          "schema" : {
            "type" : "string",
            "default" : "dateTime",
            "enum" : [ "dateTime", "time", "created" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort direction",
          "schema" : {
            "type" : "string",
            "default" : "desc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        }, {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Organization ID. When set together with admin or invoicing permission on the organization, the response includes tasks across all teams in that organization (used by the document picker).",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of tasks with statistics",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid parameters"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          }
        }
      },
      "post" : {
        "tags" : [ "Task" ],
        "summary" : "Create task",
        "description" : "Creates a new task with the provided details. Required fields include project ID, start date/time, and description. Returns the created task with its assigned ID and metadata.",
        "operationId" : "create_10",
        "requestBody" : {
          "description" : "Task details for creation",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Task created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - missing required fields or validation error"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions for the specified project"
          }
        }
      }
    },
    "/v1/tasks/statistics" : {
      "post" : {
        "tags" : [ "Task" ],
        "summary" : "Get task statistics",
        "description" : "Retrieves aggregated statistics for tasks matching the provided criteria. Returns totals for duration, salary, expenses, and mileage without returning individual task data.",
        "operationId" : "statistics",
        "requestBody" : {
          "description" : "Filter parameters for calculating statistics",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Task statistics",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskStatistic"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskStatistic"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid parameters"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          }
        }
      }
    },
    "/v1/tasks/summary" : {
      "post" : {
        "tags" : [ "Task" ],
        "summary" : "Get task day summary",
        "description" : "Retrieves per-day task totals for the provided criteria. Overnight tasks are split at midnight so each calendar day reports the time worked on that day.",
        "operationId" : "summary",
        "requestBody" : {
          "description" : "Filter parameters for calculating the day summary",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Per-day task totals",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskSummaryList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskSummaryList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid parameters"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          }
        }
      }
    },
    "/v1/tasks/{id}" : {
      "get" : {
        "tags" : [ "Task" ],
        "summary" : "Get task",
        "description" : "Retrieves detailed information about a specific task by its ID. The response includes all task properties, associated project details, tags, expenses, notes, and other related information.",
        "operationId" : "get_12",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Task identifier",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Task details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Task" ],
        "summary" : "Update task",
        "description" : "Updates an existing task with the provided details. All fields in the request body will overwrite existing values. Returns the updated task with all its properties.",
        "operationId" : "update_12",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Task identifier",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "description" : "Updated task details",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Task updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - validation error"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to update this task"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Task" ],
        "summary" : "Remove task",
        "description" : "Permanently deletes a task and all its associated records (expenses, notes, pauses, tags). This operation cannot be undone.",
        "operationId" : "remove_10",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Task identifier",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Task deleted successfully"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to delete this task"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      }
    },
    "/v1/tasks/print/{id}" : {
      "get" : {
        "tags" : [ "Task" ],
        "summary" : "Generate printable work record",
        "description" : "Generates a PDF document containing a formatted work record for the specified task, including all details, times, expenses, and notes.",
        "operationId" : "print_1",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Task identifier",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "PDF document containing the work record",
            "content" : {
              "application/pdf" : { }
            }
          },
          "400" : {
            "description" : "Bad request - invalid task ID"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      }
    },
    "/v1/tasks/search" : {
      "post" : {
        "tags" : [ "Task" ],
        "summary" : "Search tasks",
        "description" : "Searches for tasks based on the provided criteria. Allows filtering by date range, project, team, status, tags, and more. Returns paginated results with statistics.",
        "operationId" : "search_9",
        "requestBody" : {
          "description" : "Search parameters including filters, sorting, and pagination options",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results with statistics",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid search parameters"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          }
        }
      }
    },
    "/v1/tasks/updateStatus" : {
      "put" : {
        "tags" : [ "Task" ],
        "summary" : "Update task status",
        "description" : "Updates the billing status of a task (billable, paid, billed). This focused update allows changing payment-related flags without modifying other task properties.",
        "operationId" : "updateStatus_1",
        "requestBody" : {
          "description" : "Task ID and status flags to update",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskStatusDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskStatusDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Task status updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid status combination"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to update this task"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      }
    },
    "/v1/tasks/updateTimes" : {
      "put" : {
        "tags" : [ "Task" ],
        "summary" : "Update task times",
        "description" : "Updates the start and end times of a specific task. This is a focused update that only affects the time fields without changing other task properties.",
        "operationId" : "updateTimes",
        "requestBody" : {
          "description" : "Task ID and updated time values",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskTimesDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TaskTimesDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Task times updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid time format or duration"
          },
          "401" : {
            "description" : "Not authorized - invalid or missing authentication"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to update this task"
          },
          "404" : {
            "description" : "Task not found"
          }
        }
      }
    },
    "/v1/teams/activate/{teamName}" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Activate teams",
        "description" : "Activates the team feature for the current user and creates a default team with the specified name. If team feature is already activated, only updates the user profile.",
        "operationId" : "activate",
        "parameters" : [ {
          "name" : "teamName",
          "in" : "path",
          "description" : "Name for the default team to be created",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "My Team"
        } ],
        "responses" : {
          "200" : {
            "description" : "Updated user profile with team feature activated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PublicProfileDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid team name or activation error"
          },
          "401" : {
            "description" : "Not authorized to activate team feature"
          }
        }
      }
    },
    "/v1/teams" : {
      "get" : {
        "tags" : [ "Team" ],
        "summary" : "List teams",
        "description" : "Retrieves a paginated list of teams accessible to the current user. Supports sorting.",
        "operationId" : "list_11",
        "parameters" : [ {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort by",
          "schema" : {
            "type" : "string",
            "default" : "permission",
            "enum" : [ "alpha", "permission", "created" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based pagination)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of teams with pagination information",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access teams"
          }
        }
      },
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Create team",
        "description" : "Creates a new team with the current user as owner. The team name must be unique for the user.",
        "operationId" : "create_11",
        "requestBody" : {
          "description" : "Team creation details including name, description, and other properties",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created team details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Not authorized to create teams"
          }
        }
      }
    },
    "/v1/teams/{teamId}/members/{id}/invited" : {
      "delete" : {
        "tags" : [ "Team" ],
        "summary" : "Delete invited team member",
        "description" : "Permanently deletes an invited team member and their profile. Only team managers and owners can delete invited members. The member must still be in invited status (not yet activated their account).",
        "operationId" : "deleteInvitedMember",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the invited team member to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0"
        } ],
        "responses" : {
          "200" : {
            "description" : "Invited team member and profile successfully deleted"
          },
          "400" : {
            "description" : "Member is not in invited status or cannot be deleted"
          },
          "401" : {
            "description" : "Not authorized - must be team manager or owner"
          },
          "404" : {
            "description" : "Team or team member not found"
          }
        }
      }
    },
    "/v1/teams/{teamId}/members/{id}" : {
      "get" : {
        "tags" : [ "Team" ],
        "summary" : "Get team member",
        "description" : "Retrieves detailed information about a specific team member by their unique identifier within a team.",
        "operationId" : "getMember",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team member to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0"
        } ],
        "responses" : {
          "200" : {
            "description" : "Team member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to view this team member"
          },
          "404" : {
            "description" : "Team or team member not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Team" ],
        "summary" : "Update team member",
        "description" : "Updates an existing team member's information, including permission level. Only team owners can change permissions to owner level.",
        "operationId" : "updateMember",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team member to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0"
        } ],
        "requestBody" : {
          "description" : "Updated team member details including permission level",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated team member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Not authorized to update this team member"
          },
          "404" : {
            "description" : "Team or team member not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Team" ],
        "summary" : "Remove team member",
        "description" : "Removes a member from a team. Team owners can remove any member, and managers can remove regular members.",
        "operationId" : "removeMember",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        }, {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team member to remove",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "7a1c6e32-89f4-42d3-a5ea-e6c2120ec5c0"
        } ],
        "responses" : {
          "200" : {
            "description" : "Team member successfully removed"
          },
          "401" : {
            "description" : "Not authorized to remove this team member"
          },
          "404" : {
            "description" : "Team or team member not found"
          }
        }
      }
    },
    "/v1/teams/getColleagues" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Get colleagues",
        "description" : "Retrieves a list of colleagues (other team members) for the current user across all their teams, or filtered by a specific team. Used for user selection in UI components. Supports pagination and search.",
        "operationId" : "getColleagues",
        "requestBody" : {
          "description" : "Parameters for filtering colleagues by team, project, search terms, and pagination settings",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Paginated list of colleague profiles",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ColleagueList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ColleagueList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to view colleagues"
          }
        }
      }
    },
    "/v1/teams/getMemberStatus" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Get member status",
        "description" : "Retrieves a list of team members with their current activity status. Shows whether members are actively working (have a running timer) and their last activity. Results are automatically sorted with currently working members appearing first, followed by idle members, all alphabetically by name.",
        "operationId" : "getMemberStatus",
        "requestBody" : {
          "description" : "Parameters for filtering members by organization, team, project, specific users, and activity status. Status values: 'all' (no filter), 'active' (not deleted members), 'inactive' (deleted members), 'running' (members with active timer), 'idle' (members without active timer)",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/MemberStatusParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/MemberStatusParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "List of members with their activity status",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MemberStatusList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MemberStatusList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to view member status"
          }
        }
      }
    },
    "/v1/teams/{id}" : {
      "get" : {
        "tags" : [ "Team" ],
        "summary" : "Get team",
        "description" : "Retrieves detailed information about a specific team by its unique identifier.",
        "operationId" : "get_13",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team to retrieve",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        } ],
        "responses" : {
          "200" : {
            "description" : "Team details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access this team"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Team" ],
        "summary" : "Update team",
        "description" : "Updates an existing team's information. Only team owners can update team details.",
        "operationId" : "update_13",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        } ],
        "requestBody" : {
          "description" : "Updated team details",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Updated team details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Not authorized to update this team"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Team" ],
        "summary" : "Remove team",
        "description" : "Soft-deletes a team and all associated data (rates, tags, projects, etc). Only team owners can delete teams.",
        "operationId" : "remove_11",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team to remove",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        } ],
        "responses" : {
          "200" : {
            "description" : "Team successfully deleted"
          },
          "401" : {
            "description" : "Not authorized to delete this team"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      }
    },
    "/v1/teams/{teamId}/members/list" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "List team members",
        "description" : "Retrieves a paginated list of team members for a specific team. Supports filtering by status and search terms.",
        "operationId" : "listMembers_1",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        } ],
        "requestBody" : {
          "description" : "Parameters for filtering, pagination, and sorting team members",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Paginated list of team members",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to view team members"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      }
    },
    "/v1/teams/{teamId}/members" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Register team member",
        "description" : "Adds a new member to a team. Team owners and managers can add new members. Provides different levels of permissions: Member (1), Manager (2), Owner (3).",
        "operationId" : "registerTeamMember",
        "parameters" : [ {
          "name" : "teamId",
          "in" : "path",
          "description" : "Unique identifier of the team to add a member to",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        } ],
        "requestBody" : {
          "description" : "Team member details including user identifier and permission level",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamMemberCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Created team member details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamMemberDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request - missing required fields or validation errors"
          },
          "401" : {
            "description" : "Not authorized to add members to this team"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      }
    },
    "/v1/teams/search" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Search teams",
        "description" : "Performs an advanced search for teams based on supplied parameters, with pagination and sorting options.",
        "operationId" : "search_10",
        "requestBody" : {
          "description" : "Search parameters including filters, pagination, and sorting options",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TeamListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Paginated list of teams matching search criteria",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to search teams"
          }
        }
      }
    },
    "/v1/teams/{id}/transferOwnership/{memberId}" : {
      "post" : {
        "tags" : [ "Team" ],
        "summary" : "Transfer team ownership",
        "description" : "Transfers team ownership to another active member. Only the current team owner can transfer ownership; the previous owner stays in the team as a manager. Required before an owner can delete their account while the team still has members.",
        "operationId" : "transferOwnership",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the team to transfer",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "b0742508-7291-45e1-b32a-29f03edd55f9"
        }, {
          "name" : "memberId",
          "in" : "path",
          "description" : "TeamMember identifier of the new owner",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "c9631407-6180-34d0-a21b-18e02dcc44e8"
        } ],
        "responses" : {
          "200" : {
            "description" : "Updated team details",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TeamDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Member not active, still invited, or already the owner"
          },
          "401" : {
            "description" : "Not authorized to transfer this team"
          },
          "404" : {
            "description" : "Team not found"
          }
        }
      }
    },
    "/v1/timer" : {
      "get" : {
        "tags" : [ "Timer" ],
        "summary" : "Get current timer state",
        "description" : "Retrieves the current timer state for the authenticated user. Returns information about the active timer including status (running, paused, stopped), associated task, and any active pause.",
        "operationId" : "get_14",
        "responses" : {
          "200" : {
            "description" : "Timer state retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/timer/pause" : {
      "post" : {
        "tags" : [ "Timer" ],
        "summary" : "Pause the current timer",
        "description" : "Pauses an active timing session. Creates a new pause record associated with the current task and sets the timer to paused state. Returns the updated timer information with pause details.",
        "operationId" : "pause",
        "requestBody" : {
          "description" : "Timer pause parameters including pause start date/time",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerPauseDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerPauseDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Timer paused successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - Timer not running or invalid parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User doesn't have permission to pause this timer"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/timer/resume" : {
      "post" : {
        "tags" : [ "Timer" ],
        "summary" : "Resume a paused timer",
        "description" : "Resumes a paused timing session. Ends the associated pause with the specified end time and sets the timer back to running state. Returns the updated timer information.",
        "operationId" : "resume",
        "requestBody" : {
          "description" : "Timer resume parameters including pause end date/time",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerResumeDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerResumeDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Timer resumed successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - Timer not paused or invalid parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User doesn't have permission to resume this timer"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/timer/start" : {
      "post" : {
        "tags" : [ "Timer" ],
        "summary" : "Start a new timer",
        "description" : "Starts a new timing session for the authenticated user on the specified project. Creates a new task for the timer and sets the timer to running state. Returns the updated timer information.",
        "operationId" : "start",
        "requestBody" : {
          "description" : "Timer start parameters including project ID and start date/time",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerStartDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerStartDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Timer started successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - Timer already running or invalid parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User doesn't have permission to start a timer for this project"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/timer/stop" : {
      "post" : {
        "tags" : [ "Timer" ],
        "summary" : "Stop the current timer",
        "description" : "Ends an active timing session. Finalizes the associated task with the specified end time and ends any active pause. Sets the timer to stopped state and returns the updated timer information.",
        "operationId" : "stop",
        "requestBody" : {
          "description" : "Timer stop parameters including end date/time",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerStopDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerStopDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Timer stopped successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - Timer not running/paused or invalid parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User doesn't have permission to stop this timer"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/timer/update" : {
      "put" : {
        "tags" : [ "Timer" ],
        "summary" : "Update the current timer",
        "description" : "Updates an active timing session with new information. Can modify the task details of the currently running or paused timer. Returns the updated timer information.",
        "operationId" : "update_14",
        "requestBody" : {
          "description" : "Timer update parameters including task information and optional project changes",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/TimerUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Timer updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TimerDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - Timer not active or invalid parameters"
          },
          "401" : {
            "description" : "User is not authenticated"
          },
          "403" : {
            "description" : "User doesn't have permission to update this timer"
          },
          "500" : {
            "description" : "Internal server error"
          }
        }
      }
    },
    "/v1/todos" : {
      "get" : {
        "tags" : [ "Todos" ],
        "summary" : "List todos",
        "description" : "Retrieves a paginated list of todos with optional filtering by project and status. Results can be sorted and ordered according to specified parameters.",
        "operationId" : "list_12",
        "parameters" : [ {
          "name" : "projectId",
          "in" : "query",
          "description" : "Filter todos by project identifier",
          "schema" : {
            "type" : "string"
          },
          "example" : "proj123"
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filter todos by status",
          "schema" : {
            "type" : "string",
            "default" : "open",
            "enum" : [ "all", "open", "closed" ]
          }
        }, {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort by",
          "schema" : {
            "type" : "string",
            "default" : "alpha",
            "enum" : [ "alpha", "dueDate", "created", "status" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort direction",
          "schema" : {
            "type" : "string",
            "default" : "asc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based pagination)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved list of todos",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access todos"
          }
        }
      },
      "post" : {
        "tags" : [ "Todos" ],
        "summary" : "Create todo",
        "description" : "Creates a new todo item with the provided details. Required fields include name and projectId. Optional fields include description, status, dueDate, assignedUsers, and estimated time.",
        "operationId" : "create_12",
        "requestBody" : {
          "description" : "Todo item details to create",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Todo successfully created",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request due to missing required fields or validation failures"
          },
          "401" : {
            "description" : "Not authorized to create todos"
          },
          "403" : {
            "description" : "Insufficient permissions to create todos in the specified project"
          }
        }
      }
    },
    "/v1/todos/{id}" : {
      "get" : {
        "tags" : [ "Todos" ],
        "summary" : "Get todo",
        "description" : "Retrieves detailed information about a specific todo item by its unique identifier. The response includes all todo properties as well as related statistics like time spent.",
        "operationId" : "get_15",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the todo",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "todo123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Todo successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access this todo"
          },
          "404" : {
            "description" : "Todo with the specified ID was not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Todos" ],
        "summary" : "Update todo",
        "description" : "Updates an existing todo item with the provided details. All fields in the request body will overwrite the existing values. Fields not included in the request will remain unchanged.",
        "operationId" : "update_15",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the todo to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "todo123"
        } ],
        "requestBody" : {
          "description" : "Updated todo details",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Todo successfully updated",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid request due to validation failures"
          },
          "401" : {
            "description" : "Not authorized to update todos"
          },
          "403" : {
            "description" : "Insufficient permissions to update this todo"
          },
          "404" : {
            "description" : "Todo with the specified ID was not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Todos" ],
        "summary" : "Remove todo",
        "description" : "Soft-deletes a todo item by its identifier. This operation marks the todo as deleted in the database but does not physically remove it. Associated tasks will have their todo reference cleared.",
        "operationId" : "remove_12",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the todo to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "todo123"
        } ],
        "responses" : {
          "200" : {
            "description" : "Todo successfully deleted"
          },
          "401" : {
            "description" : "Not authorized to delete todos"
          },
          "403" : {
            "description" : "Insufficient permissions to delete this todo"
          },
          "404" : {
            "description" : "Todo with the specified ID was not found"
          }
        }
      }
    },
    "/v1/todos/search" : {
      "post" : {
        "tags" : [ "Todos" ],
        "summary" : "Search todos",
        "description" : "Performs an advanced search for todos based on multiple criteria specified in the request body. This endpoint supports more complex filtering than the standard list endpoint, including filtering by multiple projects and assigned users.",
        "operationId" : "search_11",
        "requestBody" : {
          "description" : "Search parameters including filters, sorting options, and pagination",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/ToDoListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results with matching todos",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ToDoList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid search parameters"
          },
          "401" : {
            "description" : "Not authorized to search todos"
          }
        }
      }
    },
    "/v1/user/absences" : {
      "get" : {
        "tags" : [ "User Absences" ],
        "summary" : "List current user's absences",
        "operationId" : "listMyAbsences",
        "parameters" : [ {
          "name" : "startDate",
          "in" : "query",
          "description" : "Start date (yyyy-MM-dd)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "endDate",
          "in" : "query",
          "description" : "End date (yyyy-MM-dd)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "contractId",
          "in" : "query",
          "description" : "Contract ID",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Items per page",
          "schema" : {
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of absences",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbsenceList"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/holidays" : {
      "get" : {
        "tags" : [ "User Holidays" ],
        "summary" : "List current user's holidays",
        "operationId" : "listUserHolidays",
        "parameters" : [ {
          "name" : "start",
          "in" : "query",
          "description" : "Start date (yyyy-MM-dd)",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "end",
          "in" : "query",
          "description" : "End date (yyyy-MM-dd)",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of holidays for the current user"
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/user/leave-balances" : {
      "get" : {
        "tags" : [ "User Leave Balances" ],
        "summary" : "List current user's leave balances",
        "operationId" : "listMyLeaveBalances",
        "parameters" : [ {
          "name" : "year",
          "in" : "query",
          "description" : "Year",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int32"
          }
        }, {
          "name" : "organizationId",
          "in" : "query",
          "description" : "Filter by organization",
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of leave balances",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaveBalanceList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/users/{userId}/overtime/summary" : {
      "get" : {
        "tags" : [ "User Overtime" ],
        "summary" : "Get user overtime summary",
        "operationId" : "getUserOvertimeSummary",
        "parameters" : [ {
          "name" : "userId",
          "in" : "path",
          "description" : "User ID",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "User overtime balances",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OvertimeBalanceDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized"
          }
        }
      }
    },
    "/v1/webhooks" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "List webhooks",
        "description" : "Retrieves a paginated list of webhooks belonging to the authenticated user. The list can be sorted and ordered using the provided parameters.",
        "operationId" : "list_13",
        "parameters" : [ {
          "name" : "sort",
          "in" : "query",
          "description" : "Field to sort by",
          "schema" : {
            "type" : "string",
            "default" : "created",
            "enum" : [ "created", "lastUpdate", "target", "event" ]
          }
        }, {
          "name" : "order",
          "in" : "query",
          "description" : "Sort direction",
          "schema" : {
            "type" : "string",
            "default" : "desc",
            "enum" : [ "asc", "desc" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "Page number (1-based pagination)",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "example" : 1,
            "default" : 1
          }
        }, {
          "name" : "limit",
          "in" : "query",
          "description" : "Number of items per page",
          "schema" : {
            "maximum" : 100,
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64",
            "example" : 20,
            "default" : 20
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of webhooks successfully retrieved",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access webhooks"
          }
        }
      },
      "post" : {
        "tags" : [ "Webhook" ],
        "summary" : "Create webhook",
        "description" : "Creates a new webhook for the authenticated user. The webhook will send notifications to the specified target URL when the specified event occurs. The webhook URL must be a valid HTTP or HTTPS URL. The response carries the signing secret used to verify deliveries; this is the only time it is returned, so store it when you receive it.",
        "operationId" : "create_13",
        "requestBody" : {
          "description" : "Webhook creation data containing target URL and event type",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookCreateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookCreateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Webhook created successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookCreateResponse"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookCreateResponse"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid webhook details provided"
          },
          "401" : {
            "description" : "Not authorized to create webhooks"
          }
        }
      }
    },
    "/v1/webhooks/{id}" : {
      "get" : {
        "tags" : [ "Webhook" ],
        "summary" : "Get webhook",
        "description" : "Retrieves a specific webhook by its unique identifier. Only webhooks owned by the authenticated user can be retrieved.",
        "operationId" : "get_16",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the webhook",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "wh-123456789"
        } ],
        "responses" : {
          "200" : {
            "description" : "Webhook retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookDto"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to access this webhook"
          },
          "404" : {
            "description" : "Webhook not found"
          }
        }
      },
      "put" : {
        "tags" : [ "Webhook" ],
        "summary" : "Update webhook",
        "description" : "Updates an existing webhook identified by its unique ID. Only webhooks owned by the authenticated user can be updated. This endpoint allows changing the target URL and event type.",
        "operationId" : "update_16",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the webhook to update",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "wh-123456789"
        } ],
        "requestBody" : {
          "description" : "Webhook update data containing the new target URL and/or event type",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookUpdateDto"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookUpdateDto"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Webhook updated successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookDto"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookDto"
                }
              }
            }
          },
          "400" : {
            "description" : "Bad request - invalid webhook details provided"
          },
          "401" : {
            "description" : "Not authorized to update this webhook"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to update this webhook"
          },
          "404" : {
            "description" : "Webhook not found"
          }
        }
      },
      "delete" : {
        "tags" : [ "Webhook" ],
        "summary" : "Remove webhook",
        "description" : "Permanently deletes a webhook identified by its unique ID. Only webhooks owned by the authenticated user can be deleted. This operation cannot be undone.",
        "operationId" : "remove_13",
        "parameters" : [ {
          "name" : "id",
          "in" : "path",
          "description" : "Unique identifier of the webhook to delete",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "example" : "wh-123456789"
        } ],
        "responses" : {
          "200" : {
            "description" : "Webhook deleted successfully"
          },
          "401" : {
            "description" : "Not authorized to delete this webhook"
          },
          "403" : {
            "description" : "Forbidden - insufficient permissions to delete this webhook"
          },
          "404" : {
            "description" : "Webhook not found"
          }
        }
      }
    },
    "/v1/webhooks/search" : {
      "post" : {
        "tags" : [ "Webhook" ],
        "summary" : "Search webhooks",
        "description" : "Searches for webhooks matching the specified criteria. This endpoint provides more advanced filtering options than the list endpoint, such as filtering by event type. Only webhooks owned by the authenticated user will be included in results.",
        "operationId" : "search_12",
        "requestBody" : {
          "description" : "Search parameters including pagination, sorting, and filtering criteria",
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookListParams"
              }
            },
            "application/xml" : {
              "schema" : {
                "$ref" : "#/components/schemas/WebhookListParams"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "Search results retrieved successfully",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookList"
                }
              },
              "application/xml" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WebhookList"
                }
              }
            }
          },
          "401" : {
            "description" : "Not authorized to search webhooks"
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "AbsenceDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "absenceTypeId" : {
            "type" : "string"
          },
          "absenceType" : {
            "$ref" : "#/components/schemas/AbsenceTypeDto"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "fullDay" : {
            "type" : "boolean"
          },
          "totalDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "totalHours" : {
            "type" : "string",
            "format" : "decimal"
          },
          "reason" : {
            "type" : "string"
          },
          "documentationUrl" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "fileUri" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "requestedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "requestedBy" : {
            "type" : "string"
          },
          "requestedByMember" : {
            "$ref" : "#/components/schemas/Member"
          },
          "approvedBy" : {
            "type" : "string"
          },
          "approvedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "rejectionReason" : {
            "type" : "string"
          },
          "cancelledAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "cancelledBy" : {
            "type" : "string"
          },
          "cancellationReason" : {
            "type" : "string"
          },
          "canApprove" : {
            "type" : "boolean"
          },
          "canReject" : {
            "type" : "boolean"
          },
          "canCancel" : {
            "type" : "boolean"
          },
          "canEdit" : {
            "type" : "boolean"
          },
          "documentationStatus" : {
            "type" : "string"
          },
          "documentationDueDate" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "AbsenceTypeDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "code" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "descriptionI18nKey" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "icon" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "requiresApproval" : {
            "type" : "boolean"
          },
          "requiresDocumentation" : {
            "type" : "boolean"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "affectsOvertime" : {
            "type" : "boolean"
          },
          "deductsFromQuota" : {
            "type" : "boolean"
          },
          "maxConsecutiveDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minNoticeDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "systemType" : {
            "type" : "boolean"
          },
          "active" : {
            "type" : "boolean"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "Activity" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "projectTitle" : {
            "type" : "string"
          },
          "projectColor" : {
            "type" : "integer",
            "format" : "int32"
          },
          "taskId" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "running" : {
            "type" : "boolean"
          }
        }
      },
      "Member" : {
        "type" : "object",
        "properties" : {
          "uid" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "employeeId" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "activity" : {
            "$ref" : "#/components/schemas/Activity"
          },
          "displayName" : {
            "type" : "string"
          },
          "initials" : {
            "type" : "string"
          }
        }
      },
      "AbsenceReasonDto" : {
        "type" : "object",
        "properties" : {
          "reason" : {
            "type" : "string"
          }
        }
      },
      "AbsenceCreateDto" : {
        "type" : "object",
        "properties" : {
          "contractId" : {
            "type" : "string"
          },
          "absenceTypeId" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "fullDay" : {
            "type" : "boolean"
          },
          "reason" : {
            "type" : "string"
          },
          "documentationUrl" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "fileUri" : {
            "type" : "string"
          }
        }
      },
      "FormDataContentDisposition" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string"
          },
          "parameters" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          },
          "fileName" : {
            "type" : "string"
          },
          "creationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "modificationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "readDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "size" : {
            "type" : "integer",
            "format" : "int64"
          },
          "name" : {
            "type" : "string"
          }
        }
      },
      "FileResponse" : {
        "type" : "object",
        "properties" : {
          "url" : {
            "type" : "string"
          }
        }
      },
      "AbsenceList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AbsenceDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/AbsenceListParams"
          }
        }
      },
      "AbsenceListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "absenceTypeId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "contractIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "statuses" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "teamId" : {
            "type" : "string"
          },
          "teamIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "excludeRejectedCancelled" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "AbsenceUpdateDto" : {
        "type" : "object",
        "properties" : {
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "fullDay" : {
            "type" : "boolean"
          },
          "reason" : {
            "type" : "string"
          },
          "documentationUrl" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "fileUri" : {
            "type" : "string"
          }
        }
      },
      "AbsenceTypeCreateDto" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "icon" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "requiresApproval" : {
            "type" : "boolean"
          },
          "requiresDocumentation" : {
            "type" : "boolean"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "affectsOvertime" : {
            "type" : "boolean"
          },
          "deductsFromQuota" : {
            "type" : "boolean"
          },
          "maxConsecutiveDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minNoticeDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "AbsenceTypeList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AbsenceTypeDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/AbsenceListParams"
          }
        }
      },
      "AbsenceTypeUpdateDto" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "icon" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "requiresApproval" : {
            "type" : "boolean"
          },
          "requiresDocumentation" : {
            "type" : "boolean"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "affectsOvertime" : {
            "type" : "boolean"
          },
          "deductsFromQuota" : {
            "type" : "boolean"
          },
          "maxConsecutiveDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minNoticeDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ApiKeyResponse" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "key" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          },
          "expiresAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "permissions" : {
            "type" : "string"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ApiKeyCreateRequest" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "permissions" : {
            "type" : "string"
          },
          "expirationDays" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ApiKeyDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "prefix" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUsed" : {
            "type" : "string",
            "format" : "date-time"
          },
          "expiresAt" : {
            "type" : "string",
            "format" : "date-time"
          },
          "usageCount" : {
            "type" : "integer",
            "format" : "int32"
          },
          "permissions" : {
            "type" : "string"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ApiKeyList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ApiKeyDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ApiKeyListParams"
          }
        }
      },
      "ApiKeyListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "filter" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "AuditLogDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "affectedUserId" : {
            "type" : "string"
          },
          "affectedMember" : {
            "$ref" : "#/components/schemas/Member"
          },
          "entityType" : {
            "type" : "string"
          },
          "entityId" : {
            "type" : "string"
          },
          "action" : {
            "type" : "string"
          },
          "fieldChanges" : {
            "type" : "string"
          },
          "reason" : {
            "type" : "string"
          },
          "ipAddress" : {
            "type" : "string"
          },
          "userAgent" : {
            "type" : "string"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "AuditLogList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AuditLogDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/AuditLogListParams"
          }
        }
      },
      "AuditLogListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "contractId" : {
            "type" : "string"
          },
          "entityType" : {
            "type" : "string"
          },
          "entityId" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "action" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "AutomationDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "project" : {
            "$ref" : "#/components/schemas/ProjectDto"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "action" : {
            "type" : "integer",
            "format" : "int32"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "shared" : {
            "type" : "boolean"
          },
          "ssid" : {
            "type" : "string"
          },
          "address" : {
            "type" : "string"
          },
          "latitude" : {
            "type" : "number",
            "format" : "double"
          },
          "longitude" : {
            "type" : "number",
            "format" : "double"
          },
          "radius" : {
            "type" : "number",
            "format" : "double"
          },
          "beaconUUID" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "name" : {
            "type" : "string"
          }
        }
      },
      "CustomerSubscriptionDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "expires" : {
            "type" : "integer",
            "format" : "int64"
          },
          "status" : {
            "type" : "integer",
            "format" : "int64"
          },
          "plan" : {
            "type" : "integer",
            "format" : "int64"
          },
          "licenses" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paymentOption" : {
            "type" : "string"
          },
          "business" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "vatId" : {
            "type" : "string"
          },
          "displayName" : {
            "type" : "string"
          },
          "street" : {
            "type" : "string"
          },
          "city" : {
            "type" : "string"
          },
          "state" : {
            "type" : "string"
          },
          "zip" : {
            "type" : "string"
          },
          "country" : {
            "type" : "string"
          },
          "countryIso" : {
            "type" : "string"
          },
          "language" : {
            "type" : "string"
          },
          "includeTaxForBusiness" : {
            "type" : "boolean"
          },
          "activated" : {
            "type" : "boolean"
          },
          "pastDue" : {
            "type" : "boolean"
          },
          "cancellationOffer" : {
            "type" : "boolean"
          },
          "subscriptionActive" : {
            "type" : "boolean"
          },
          "subscriptionCancelled" : {
            "type" : "boolean"
          },
          "subscriptionInactive" : {
            "type" : "boolean"
          },
          "paymentProviderActive" : {
            "type" : "boolean"
          },
          "startedTestimonial" : {
            "type" : "string",
            "format" : "date-time"
          },
          "activationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "cancellationDate" : {
            "type" : "string",
            "format" : "date-time"
          },
          "permissionAdmin" : {
            "type" : "boolean"
          },
          "valid" : {
            "type" : "boolean"
          },
          "expired" : {
            "type" : "boolean"
          },
          "validAndActivated" : {
            "type" : "boolean"
          },
          "payPalPayment" : {
            "type" : "boolean"
          },
          "stripePayment" : {
            "type" : "boolean"
          },
          "invoicePayment" : {
            "type" : "boolean"
          },
          "googlePlayPayment" : {
            "type" : "boolean"
          },
          "appleStorePayment" : {
            "type" : "boolean"
          },
          "currency" : {
            "type" : "string"
          },
          "businessCustomer" : {
            "type" : "boolean"
          },
          "euCustomer" : {
            "type" : "boolean"
          },
          "eu" : {
            "type" : "boolean"
          },
          "at" : {
            "type" : "boolean"
          },
          "ch" : {
            "type" : "boolean"
          },
          "uk" : {
            "type" : "boolean"
          },
          "product" : {
            "type" : "string"
          },
          "licenseQuantity" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          },
          "trial" : {
            "type" : "boolean"
          },
          "cancelled" : {
            "type" : "boolean"
          },
          "member" : {
            "type" : "boolean"
          },
          "businessOrTrial" : {
            "type" : "boolean"
          },
          "pro" : {
            "type" : "boolean"
          },
          "planEnterprise" : {
            "type" : "boolean"
          },
          "planBusiness" : {
            "type" : "boolean"
          },
          "planPro" : {
            "type" : "boolean"
          },
          "planPlus" : {
            "type" : "boolean"
          },
          "planBasic" : {
            "type" : "boolean"
          },
          "monthlyPlan" : {
            "type" : "boolean"
          },
          "yearlyPlan" : {
            "type" : "boolean"
          },
          "organization" : {
            "type" : "boolean"
          }
        }
      },
      "OrganizationDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "subscription" : {
            "$ref" : "#/components/schemas/CustomerSubscriptionDto"
          },
          "user" : {
            "type" : "string"
          },
          "aiChatEnabled" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/OrganizationPermissionDto"
          }
        }
      },
      "OrganizationPermissionDto" : {
        "type" : "object",
        "properties" : {
          "invoicing" : {
            "type" : "boolean"
          },
          "billing" : {
            "type" : "boolean"
          },
          "admin" : {
            "type" : "boolean"
          }
        }
      },
      "ProjectDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "title" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "employer" : {
            "type" : "string"
          },
          "office" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "taskDefaultBillable" : {
            "type" : "boolean"
          },
          "archived" : {
            "type" : "boolean"
          },
          "salaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salary" : {
            "type" : "string",
            "format" : "decimal"
          },
          "team" : {
            "$ref" : "#/components/schemas/TeamDto"
          },
          "permission" : {
            "$ref" : "#/components/schemas/ProjectPermissionDto"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "durationBreak" : {
            "type" : "integer",
            "format" : "int64"
          },
          "salaryTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "salaryBreak" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expenses" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesPaid" : {
            "type" : "string",
            "format" : "decimal"
          },
          "mileage" : {
            "type" : "string",
            "format" : "decimal"
          },
          "todoEstimatedDuration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "todoTrackedDuration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "todoCount" : {
            "type" : "integer",
            "format" : "int64"
          },
          "titleAndClient" : {
            "type" : "string"
          },
          "salaryVisible" : {
            "type" : "boolean"
          }
        }
      },
      "ProjectPermissionDto" : {
        "type" : "object",
        "properties" : {
          "role" : {
            "type" : "string"
          },
          "managerOrOwner" : {
            "type" : "boolean"
          },
          "owner" : {
            "type" : "boolean"
          },
          "manager" : {
            "type" : "boolean"
          },
          "member" : {
            "type" : "boolean"
          }
        }
      },
      "TeamDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organization" : {
            "$ref" : "#/components/schemas/OrganizationDto"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectSalaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/TeamPermissionDto"
          },
          "projects" : {
            "type" : "integer",
            "format" : "int32"
          },
          "members" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectSalaryVisible" : {
            "type" : "boolean"
          }
        }
      },
      "TeamPermissionDto" : {
        "type" : "object",
        "properties" : {
          "role" : {
            "type" : "string"
          },
          "managerOrOwner" : {
            "type" : "boolean"
          },
          "owner" : {
            "type" : "boolean"
          },
          "manager" : {
            "type" : "boolean"
          },
          "member" : {
            "type" : "boolean"
          }
        }
      },
      "AutomationCreateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "action" : {
            "type" : "integer",
            "format" : "int32"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "shared" : {
            "type" : "boolean"
          },
          "ssid" : {
            "type" : "string"
          },
          "address" : {
            "type" : "string"
          },
          "latitude" : {
            "type" : "number",
            "format" : "double"
          },
          "longitude" : {
            "type" : "number",
            "format" : "double"
          },
          "radius" : {
            "type" : "number",
            "format" : "double"
          },
          "beaconUUID" : {
            "type" : "string"
          }
        }
      },
      "AutomationList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AutomationDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/AutomationListParams"
          }
        }
      },
      "AutomationListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "type" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "AutomationUpdateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "action" : {
            "type" : "integer",
            "format" : "int32"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "shared" : {
            "type" : "boolean"
          },
          "ssid" : {
            "type" : "string"
          },
          "address" : {
            "type" : "string"
          },
          "latitude" : {
            "type" : "number",
            "format" : "double"
          },
          "longitude" : {
            "type" : "number",
            "format" : "double"
          },
          "radius" : {
            "type" : "number",
            "format" : "double"
          },
          "beaconUUID" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "ContractDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "validFrom" : {
            "type" : "string"
          },
          "validTo" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "salaryAmount" : {
            "type" : "number"
          },
          "salaryCurrency" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "vacationDaysCarriedOver" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "employmentModelName" : {
            "type" : "string"
          },
          "overtimeEnabled" : {
            "type" : "boolean"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "holidayCollectionName" : {
            "type" : "string"
          },
          "exemptStatus" : {
            "type" : "string"
          },
          "workweekStartDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "timezone" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ContractBulkCreateDto" : {
        "type" : "object",
        "properties" : {
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "contract" : {
            "$ref" : "#/components/schemas/ContractCreateDto"
          }
        }
      },
      "ContractCreateDto" : {
        "type" : "object",
        "properties" : {
          "userId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "validFrom" : {
            "type" : "string"
          },
          "validTo" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "salaryAmount" : {
            "type" : "number"
          },
          "salaryCurrency" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "vacationDaysCarriedOver" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "overtimeEnabled" : {
            "type" : "boolean"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "exemptStatus" : {
            "type" : "string"
          },
          "workweekStartDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "timezone" : {
            "type" : "string"
          }
        }
      },
      "ContractList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ContractDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ContractListParams"
          }
        }
      },
      "ContractListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "userId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ContractResetDto" : {
        "type" : "object",
        "properties" : {
          "reason" : {
            "type" : "string"
          }
        }
      },
      "ContractUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "validFrom" : {
            "type" : "string"
          },
          "validTo" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "salaryAmount" : {
            "type" : "number"
          },
          "salaryCurrency" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "vacationDaysCarriedOver" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "overtimeEnabled" : {
            "type" : "boolean"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "exemptStatus" : {
            "type" : "string"
          },
          "workweekStartDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "timezone" : {
            "type" : "string"
          }
        }
      },
      "ContractTemplateDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "systemTemplate" : {
            "type" : "boolean"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ContractTemplateCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          }
        }
      },
      "ContractTemplateList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ContractTemplateDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ContractListParams"
          }
        }
      },
      "ContractTemplateUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "workDays" : {
            "type" : "string"
          },
          "weeklyHours" : {
            "type" : "number"
          },
          "dailyHours" : {
            "type" : "number"
          },
          "breakMinutesRequired" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryType" : {
            "type" : "string"
          },
          "vacationDaysAnnual" : {
            "type" : "number"
          },
          "sickLeavePaidDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "holidayCollectionId" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          }
        }
      },
      "DocumentDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "organization" : {
            "$ref" : "#/components/schemas/OrganizationDto"
          },
          "organizationId" : {
            "type" : "string"
          },
          "category" : {
            "type" : "integer",
            "format" : "int32"
          },
          "name" : {
            "type" : "string"
          },
          "date" : {
            "type" : "string"
          },
          "invoiceId" : {
            "type" : "string"
          },
          "invoiceSeriesId" : {
            "type" : "string"
          },
          "headline" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "terms" : {
            "type" : "string"
          },
          "signature" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "company" : {
            "type" : "string"
          },
          "companyDescription" : {
            "type" : "string"
          },
          "companyAddressLine1" : {
            "type" : "string"
          },
          "companyAddressLine2" : {
            "type" : "string"
          },
          "companyAddressLine3" : {
            "type" : "string"
          },
          "companyAddressLine4" : {
            "type" : "string"
          },
          "customer" : {
            "type" : "string"
          },
          "customerId" : {
            "type" : "string"
          },
          "customerAddressLine1" : {
            "type" : "string"
          },
          "customerAddressLine2" : {
            "type" : "string"
          },
          "customerAddressLine3" : {
            "type" : "string"
          },
          "customerAddressLine4" : {
            "type" : "string"
          },
          "taskSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expenseSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "subtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "tax" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecond" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "total" : {
            "type" : "string",
            "format" : "decimal"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "showQrCode" : {
            "type" : "boolean"
          },
          "qrCodeType" : {
            "type" : "string"
          },
          "qrCodeContent" : {
            "type" : "string"
          },
          "qrCodeDescription" : {
            "type" : "string"
          },
          "payment" : {
            "type" : "string",
            "format" : "decimal"
          },
          "paymentDate" : {
            "type" : "string"
          },
          "paymentMethod" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "approved" : {
            "type" : "boolean"
          },
          "fullyPaid" : {
            "type" : "boolean"
          },
          "partiallyPaid" : {
            "type" : "boolean"
          },
          "templateId" : {
            "type" : "string"
          },
          "templateName" : {
            "type" : "string"
          },
          "template" : {
            "type" : "boolean"
          },
          "saveAsTemplate" : {
            "type" : "boolean"
          },
          "refreshTemplate" : {
            "type" : "boolean"
          },
          "includeExpenses" : {
            "type" : "boolean"
          },
          "includeNotes" : {
            "type" : "boolean"
          },
          "useRelatives" : {
            "type" : "boolean"
          },
          "hideTaxes" : {
            "type" : "boolean"
          },
          "hideSummation" : {
            "type" : "boolean"
          },
          "showSecondTax" : {
            "type" : "boolean"
          },
          "showDiscount" : {
            "type" : "boolean"
          },
          "showDiscountSecond" : {
            "type" : "boolean"
          },
          "showMemberName" : {
            "type" : "boolean"
          },
          "showProjectTitle" : {
            "type" : "boolean"
          },
          "showTags" : {
            "type" : "boolean"
          },
          "showSignature" : {
            "type" : "boolean"
          },
          "hideTaskTime" : {
            "type" : "boolean"
          },
          "hideRate" : {
            "type" : "boolean"
          },
          "hideExpenseDateTime" : {
            "type" : "boolean"
          },
          "fieldTitle" : {
            "type" : "string"
          },
          "fieldItem" : {
            "type" : "string"
          },
          "fieldDescription" : {
            "type" : "string"
          },
          "fieldRate" : {
            "type" : "string"
          },
          "fieldQuantity" : {
            "type" : "string"
          },
          "fieldTotal" : {
            "type" : "string"
          },
          "fieldTotalSum" : {
            "type" : "string"
          },
          "fieldSubTotal" : {
            "type" : "string"
          },
          "fieldTax" : {
            "type" : "string"
          },
          "fieldSecondTax" : {
            "type" : "string"
          },
          "fieldDiscount" : {
            "type" : "string"
          },
          "fieldDiscountSecond" : {
            "type" : "string"
          },
          "fieldExpenseTitle" : {
            "type" : "string"
          },
          "fieldExpenseTotal" : {
            "type" : "string"
          },
          "tasks" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TaskDto"
            }
          },
          "expenses" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExpenseDto"
            }
          },
          "notes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/NoteDto"
            }
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "invoiceTypeCode" : {
            "type" : "string"
          },
          "companyVatId" : {
            "type" : "string"
          },
          "companyTaxNumber" : {
            "type" : "string"
          },
          "companyRegistrationNumber" : {
            "type" : "string"
          },
          "companyBankAccount" : {
            "type" : "string"
          },
          "companyBankBIC" : {
            "type" : "string"
          },
          "customerVatId" : {
            "type" : "string"
          },
          "customerTaxNumber" : {
            "type" : "string"
          },
          "customerOrderNumber" : {
            "type" : "string"
          },
          "taxExemptionReason" : {
            "type" : "string"
          },
          "reverseChargeRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "isReverseCharge" : {
            "type" : "boolean"
          },
          "cashDiscountRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "cashDiscountDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paymentTermDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deliveryDate" : {
            "type" : "string"
          },
          "dueDate" : {
            "type" : "string"
          },
          "paymentReference" : {
            "type" : "string"
          },
          "orderReference" : {
            "type" : "string"
          },
          "projectReference" : {
            "type" : "string"
          },
          "costCenter" : {
            "type" : "string"
          },
          "isGovernmentInvoice" : {
            "type" : "boolean"
          },
          "procurementReference" : {
            "type" : "string"
          },
          "contractReference" : {
            "type" : "string"
          },
          "originalInvoiceNumber" : {
            "type" : "string"
          },
          "originalInvoiceDate" : {
            "type" : "string"
          },
          "invoice" : {
            "type" : "boolean"
          },
          "timesheet" : {
            "type" : "boolean"
          },
          "workRecord" : {
            "type" : "boolean"
          },
          "eInvoiceDocumentType" : {
            "type" : "string"
          },
          "eInvoiceType" : {
            "type" : "string"
          },
          "eInvoiceCurrency" : {
            "type" : "string"
          }
        }
      },
      "ExpenseDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "description" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "amount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "refunded" : {
            "type" : "boolean"
          },
          "fileUri" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "task" : {
            "$ref" : "#/components/schemas/TaskDto"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "invoiceId" : {
            "type" : "string"
          }
        }
      },
      "NoteDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "text" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "uri" : {
            "type" : "string"
          },
          "driveId" : {
            "type" : "string"
          },
          "task" : {
            "$ref" : "#/components/schemas/TaskDto"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          }
        }
      },
      "PauseDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "running" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "description" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "task" : {
            "$ref" : "#/components/schemas/TaskDto"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          }
        }
      },
      "RateDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "title" : {
            "type" : "string"
          },
          "factor" : {
            "type" : "string",
            "format" : "decimal"
          },
          "extra" : {
            "type" : "string",
            "format" : "decimal"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "archived" : {
            "type" : "boolean"
          },
          "team" : {
            "$ref" : "#/components/schemas/TeamDto"
          }
        }
      },
      "TagDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "name" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "archived" : {
            "type" : "boolean"
          },
          "team" : {
            "$ref" : "#/components/schemas/TeamDto"
          },
          "totalTime" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "TaskDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "running" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "description" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "locationEnd" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "feeling" : {
            "type" : "integer",
            "format" : "int32"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "billed" : {
            "type" : "boolean"
          },
          "billable" : {
            "type" : "boolean"
          },
          "phoneNumber" : {
            "type" : "string"
          },
          "distance" : {
            "type" : "string",
            "format" : "decimal"
          },
          "signature" : {
            "type" : "string"
          },
          "project" : {
            "$ref" : "#/components/schemas/ProjectDto"
          },
          "todo" : {
            "$ref" : "#/components/schemas/ToDoDto"
          },
          "rate" : {
            "$ref" : "#/components/schemas/RateDto"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "invoiceId" : {
            "type" : "string"
          },
          "tags" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagDto"
            }
          },
          "pauses" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PauseDto"
            }
          },
          "expenses" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExpenseDto"
            }
          },
          "notes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/NoteDto"
            }
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "durationBreak" : {
            "type" : "integer",
            "format" : "int64"
          },
          "salaryTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "salaryBreak" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesPaid" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesCount" : {
            "type" : "integer",
            "format" : "int32"
          },
          "expensesPaidCount" : {
            "type" : "integer",
            "format" : "int32"
          },
          "mileage" : {
            "type" : "string",
            "format" : "decimal"
          },
          "notesTotal" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryVisible" : {
            "type" : "boolean"
          }
        }
      },
      "ToDoDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "project" : {
            "$ref" : "#/components/schemas/ProjectDto"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "dueDate" : {
            "type" : "string"
          },
          "assignedUsers" : {
            "type" : "string"
          },
          "assignedMembers" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Member"
            }
          },
          "estimatedHours" : {
            "type" : "integer",
            "format" : "int32"
          },
          "estimatedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "durationBreak" : {
            "type" : "integer",
            "format" : "int64"
          },
          "salaryTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "salaryBreak" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expenses" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesPaid" : {
            "type" : "string",
            "format" : "decimal"
          },
          "mileage" : {
            "type" : "string",
            "format" : "decimal"
          },
          "progress" : {
            "type" : "number",
            "format" : "double"
          }
        }
      },
      "DocumentCreateDto" : {
        "type" : "object",
        "properties" : {
          "organizationId" : {
            "type" : "string"
          },
          "category" : {
            "type" : "integer",
            "format" : "int32"
          },
          "name" : {
            "type" : "string"
          },
          "date" : {
            "type" : "string"
          },
          "invoiceId" : {
            "type" : "string"
          },
          "invoiceSeriesId" : {
            "type" : "string"
          },
          "headline" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "terms" : {
            "type" : "string"
          },
          "signature" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "company" : {
            "type" : "string"
          },
          "companyDescription" : {
            "type" : "string"
          },
          "companyAddressLine1" : {
            "type" : "string"
          },
          "companyAddressLine2" : {
            "type" : "string"
          },
          "companyAddressLine3" : {
            "type" : "string"
          },
          "companyAddressLine4" : {
            "type" : "string"
          },
          "customer" : {
            "type" : "string"
          },
          "customerId" : {
            "type" : "string"
          },
          "customerAddressLine1" : {
            "type" : "string"
          },
          "customerAddressLine2" : {
            "type" : "string"
          },
          "customerAddressLine3" : {
            "type" : "string"
          },
          "customerAddressLine4" : {
            "type" : "string"
          },
          "taskSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expenseSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "subtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "tax" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecond" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "total" : {
            "type" : "string",
            "format" : "decimal"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "showQrCode" : {
            "type" : "boolean"
          },
          "qrCodeType" : {
            "type" : "string"
          },
          "qrCodeContent" : {
            "type" : "string"
          },
          "qrCodeDescription" : {
            "type" : "string"
          },
          "payment" : {
            "type" : "string",
            "format" : "decimal"
          },
          "paymentDate" : {
            "type" : "string"
          },
          "paymentMethod" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "approved" : {
            "type" : "boolean"
          },
          "templateId" : {
            "type" : "string"
          },
          "templateName" : {
            "type" : "string"
          },
          "template" : {
            "type" : "boolean"
          },
          "saveAsTemplate" : {
            "type" : "boolean"
          },
          "refreshTemplate" : {
            "type" : "boolean"
          },
          "includeExpenses" : {
            "type" : "boolean"
          },
          "includeNotes" : {
            "type" : "boolean"
          },
          "useRelatives" : {
            "type" : "boolean"
          },
          "hideTaxes" : {
            "type" : "boolean"
          },
          "hideSummation" : {
            "type" : "boolean"
          },
          "showSecondTax" : {
            "type" : "boolean"
          },
          "showDiscount" : {
            "type" : "boolean"
          },
          "showDiscountSecond" : {
            "type" : "boolean"
          },
          "showMemberName" : {
            "type" : "boolean"
          },
          "showProjectTitle" : {
            "type" : "boolean"
          },
          "showTags" : {
            "type" : "boolean"
          },
          "showSignature" : {
            "type" : "boolean"
          },
          "hideTaskTime" : {
            "type" : "boolean"
          },
          "hideRate" : {
            "type" : "boolean"
          },
          "hideExpenseDateTime" : {
            "type" : "boolean"
          },
          "fieldTitle" : {
            "type" : "string"
          },
          "fieldItem" : {
            "type" : "string"
          },
          "fieldDescription" : {
            "type" : "string"
          },
          "fieldRate" : {
            "type" : "string"
          },
          "fieldQuantity" : {
            "type" : "string"
          },
          "fieldTotal" : {
            "type" : "string"
          },
          "fieldTotalSum" : {
            "type" : "string"
          },
          "fieldSubTotal" : {
            "type" : "string"
          },
          "fieldTax" : {
            "type" : "string"
          },
          "fieldSecondTax" : {
            "type" : "string"
          },
          "fieldDiscount" : {
            "type" : "string"
          },
          "fieldDiscountSecond" : {
            "type" : "string"
          },
          "fieldExpenseTitle" : {
            "type" : "string"
          },
          "fieldExpenseTotal" : {
            "type" : "string"
          },
          "taskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "expenseIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "noteIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "invoiceTypeCode" : {
            "type" : "string"
          },
          "companyVatId" : {
            "type" : "string"
          },
          "companyTaxNumber" : {
            "type" : "string"
          },
          "companyRegistrationNumber" : {
            "type" : "string"
          },
          "companyBankAccount" : {
            "type" : "string"
          },
          "companyBankBIC" : {
            "type" : "string"
          },
          "customerVatId" : {
            "type" : "string"
          },
          "customerTaxNumber" : {
            "type" : "string"
          },
          "customerOrderNumber" : {
            "type" : "string"
          },
          "taxExemptionReason" : {
            "type" : "string"
          },
          "reverseChargeRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "isReverseCharge" : {
            "type" : "boolean"
          },
          "cashDiscountRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "cashDiscountDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paymentTermDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deliveryDate" : {
            "type" : "string"
          },
          "dueDate" : {
            "type" : "string"
          },
          "paymentReference" : {
            "type" : "string"
          },
          "orderReference" : {
            "type" : "string"
          },
          "projectReference" : {
            "type" : "string"
          },
          "costCenter" : {
            "type" : "string"
          },
          "isGovernmentInvoice" : {
            "type" : "boolean"
          },
          "procurementReference" : {
            "type" : "string"
          },
          "contractReference" : {
            "type" : "string"
          },
          "originalInvoiceNumber" : {
            "type" : "string"
          },
          "originalInvoiceDate" : {
            "type" : "string"
          },
          "eInvoiceDocumentType" : {
            "type" : "string"
          },
          "eInvoiceType" : {
            "type" : "string"
          },
          "eInvoiceCurrency" : {
            "type" : "string"
          }
        }
      },
      "DocumentList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/DocumentDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "ListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "DocumentPrint" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "zugferd" : {
            "type" : "boolean"
          }
        }
      },
      "DocumentListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "organizationUnassigned" : {
            "type" : "boolean"
          },
          "category" : {
            "type" : "integer",
            "format" : "int32"
          },
          "status" : {
            "type" : "string"
          },
          "template" : {
            "type" : "boolean"
          },
          "empty" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "DocumentUpdateDto" : {
        "type" : "object",
        "properties" : {
          "deleted" : {
            "type" : "boolean"
          },
          "category" : {
            "type" : "integer",
            "format" : "int32"
          },
          "name" : {
            "type" : "string"
          },
          "date" : {
            "type" : "string"
          },
          "invoiceId" : {
            "type" : "string"
          },
          "invoiceSeriesId" : {
            "type" : "string"
          },
          "headline" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "terms" : {
            "type" : "string"
          },
          "signature" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "company" : {
            "type" : "string"
          },
          "companyDescription" : {
            "type" : "string"
          },
          "companyAddressLine1" : {
            "type" : "string"
          },
          "companyAddressLine2" : {
            "type" : "string"
          },
          "companyAddressLine3" : {
            "type" : "string"
          },
          "companyAddressLine4" : {
            "type" : "string"
          },
          "customer" : {
            "type" : "string"
          },
          "customerId" : {
            "type" : "string"
          },
          "customerAddressLine1" : {
            "type" : "string"
          },
          "customerAddressLine2" : {
            "type" : "string"
          },
          "customerAddressLine3" : {
            "type" : "string"
          },
          "customerAddressLine4" : {
            "type" : "string"
          },
          "taskSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expenseSubtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "subtotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "tax" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecond" : {
            "type" : "string",
            "format" : "decimal"
          },
          "taxSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "discountSecondValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "total" : {
            "type" : "string",
            "format" : "decimal"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "showQrCode" : {
            "type" : "boolean"
          },
          "qrCodeType" : {
            "type" : "string"
          },
          "qrCodeContent" : {
            "type" : "string"
          },
          "qrCodeDescription" : {
            "type" : "string"
          },
          "payment" : {
            "type" : "string",
            "format" : "decimal"
          },
          "paymentDate" : {
            "type" : "string"
          },
          "paymentMethod" : {
            "type" : "string"
          },
          "paid" : {
            "type" : "boolean"
          },
          "approved" : {
            "type" : "boolean"
          },
          "templateId" : {
            "type" : "string"
          },
          "templateName" : {
            "type" : "string"
          },
          "template" : {
            "type" : "boolean"
          },
          "saveAsTemplate" : {
            "type" : "boolean"
          },
          "refreshTemplate" : {
            "type" : "boolean"
          },
          "includeExpenses" : {
            "type" : "boolean"
          },
          "includeNotes" : {
            "type" : "boolean"
          },
          "useRelatives" : {
            "type" : "boolean"
          },
          "hideTaxes" : {
            "type" : "boolean"
          },
          "hideSummation" : {
            "type" : "boolean"
          },
          "showSecondTax" : {
            "type" : "boolean"
          },
          "showDiscount" : {
            "type" : "boolean"
          },
          "showDiscountSecond" : {
            "type" : "boolean"
          },
          "showMemberName" : {
            "type" : "boolean"
          },
          "showProjectTitle" : {
            "type" : "boolean"
          },
          "showTags" : {
            "type" : "boolean"
          },
          "showSignature" : {
            "type" : "boolean"
          },
          "hideTaskTime" : {
            "type" : "boolean"
          },
          "hideRate" : {
            "type" : "boolean"
          },
          "hideExpenseDateTime" : {
            "type" : "boolean"
          },
          "fieldTitle" : {
            "type" : "string"
          },
          "fieldItem" : {
            "type" : "string"
          },
          "fieldDescription" : {
            "type" : "string"
          },
          "fieldRate" : {
            "type" : "string"
          },
          "fieldQuantity" : {
            "type" : "string"
          },
          "fieldTotal" : {
            "type" : "string"
          },
          "fieldTotalSum" : {
            "type" : "string"
          },
          "fieldSubTotal" : {
            "type" : "string"
          },
          "fieldTax" : {
            "type" : "string"
          },
          "fieldSecondTax" : {
            "type" : "string"
          },
          "fieldDiscount" : {
            "type" : "string"
          },
          "fieldDiscountSecond" : {
            "type" : "string"
          },
          "fieldExpenseTitle" : {
            "type" : "string"
          },
          "fieldExpenseTotal" : {
            "type" : "string"
          },
          "taskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "expenseIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "noteIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "invoiceTypeCode" : {
            "type" : "string"
          },
          "companyVatId" : {
            "type" : "string"
          },
          "companyTaxNumber" : {
            "type" : "string"
          },
          "companyRegistrationNumber" : {
            "type" : "string"
          },
          "companyBankAccount" : {
            "type" : "string"
          },
          "companyBankBIC" : {
            "type" : "string"
          },
          "customerVatId" : {
            "type" : "string"
          },
          "customerTaxNumber" : {
            "type" : "string"
          },
          "customerOrderNumber" : {
            "type" : "string"
          },
          "taxExemptionReason" : {
            "type" : "string"
          },
          "reverseChargeRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "isReverseCharge" : {
            "type" : "boolean"
          },
          "cashDiscountRate" : {
            "type" : "string",
            "format" : "decimal"
          },
          "cashDiscountDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paymentTermDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deliveryDate" : {
            "type" : "string"
          },
          "dueDate" : {
            "type" : "string"
          },
          "paymentReference" : {
            "type" : "string"
          },
          "orderReference" : {
            "type" : "string"
          },
          "projectReference" : {
            "type" : "string"
          },
          "costCenter" : {
            "type" : "string"
          },
          "isGovernmentInvoice" : {
            "type" : "boolean"
          },
          "procurementReference" : {
            "type" : "string"
          },
          "contractReference" : {
            "type" : "string"
          },
          "originalInvoiceNumber" : {
            "type" : "string"
          },
          "originalInvoiceDate" : {
            "type" : "string"
          },
          "eInvoiceDocumentType" : {
            "type" : "string"
          },
          "eInvoiceType" : {
            "type" : "string"
          },
          "eInvoiceCurrency" : {
            "type" : "string"
          }
        }
      },
      "BreakRuleDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "afterWorkMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakDurationMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMaxSplit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMinPartMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tierOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "BreakRuleCreateDto" : {
        "type" : "object",
        "properties" : {
          "active" : {
            "type" : "boolean"
          },
          "afterWorkMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakDurationMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMaxSplit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMinPartMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tierOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          }
        }
      },
      "LeaveRuleDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "leaveType" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "minDaysAnnual" : {
            "type" : "number"
          },
          "basisWorkDaysPerWeek" : {
            "type" : "integer",
            "format" : "int32"
          },
          "accrualMethod" : {
            "type" : "string"
          },
          "probationMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverAllowed" : {
            "type" : "boolean"
          },
          "carryOverMaxDays" : {
            "type" : "number"
          },
          "carryOverExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverExpiryDate" : {
            "type" : "string"
          },
          "carryOverExtendedOnIllness" : {
            "type" : "boolean"
          },
          "carryOverIllnessExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tenureScalingEnabled" : {
            "type" : "boolean"
          },
          "paidByEmployerDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paidByEmployerPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "waitingDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sameIllnessResetMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksBefore" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksAfter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paternityDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeaveMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeavePaidPercent" : {
            "type" : "number"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "LeaveRuleCreateDto" : {
        "type" : "object",
        "properties" : {
          "leaveType" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "minDaysAnnual" : {
            "type" : "number"
          },
          "basisWorkDaysPerWeek" : {
            "type" : "integer",
            "format" : "int32"
          },
          "accrualMethod" : {
            "type" : "string"
          },
          "probationMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverAllowed" : {
            "type" : "boolean"
          },
          "carryOverMaxDays" : {
            "type" : "number"
          },
          "carryOverExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverExpiryDate" : {
            "type" : "string"
          },
          "carryOverExtendedOnIllness" : {
            "type" : "boolean"
          },
          "carryOverIllnessExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tenureScalingEnabled" : {
            "type" : "boolean"
          },
          "paidByEmployerDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paidByEmployerPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "waitingDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sameIllnessResetMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksBefore" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksAfter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paternityDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeaveMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeavePaidPercent" : {
            "type" : "number"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "OvertimeRuleDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "conditionType" : {
            "type" : "string"
          },
          "conditionOperator" : {
            "type" : "string"
          },
          "conditionValue" : {
            "type" : "string"
          },
          "conditionValue2" : {
            "type" : "string"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "surchargeFixedAmount" : {
            "type" : "number"
          },
          "surchargeCurrency" : {
            "type" : "string"
          },
          "stackingMode" : {
            "type" : "string"
          },
          "stackingGroup" : {
            "type" : "string"
          },
          "maxOvertimeDaily" : {
            "type" : "number"
          },
          "maxOvertimeWeekly" : {
            "type" : "number"
          },
          "maxOvertimeMonthly" : {
            "type" : "number"
          },
          "maxOvertimeYearly" : {
            "type" : "number"
          },
          "compensationAllowed" : {
            "type" : "string"
          },
          "timeOffFactor" : {
            "type" : "number"
          },
          "hourReductionEnabled" : {
            "type" : "boolean"
          },
          "hourReductionFactor" : {
            "type" : "number"
          },
          "priority" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "OvertimeRuleCreateDto" : {
        "type" : "object",
        "properties" : {
          "active" : {
            "type" : "boolean"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "conditionType" : {
            "type" : "string"
          },
          "conditionOperator" : {
            "type" : "string"
          },
          "conditionValue" : {
            "type" : "string"
          },
          "conditionValue2" : {
            "type" : "string"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "surchargeFixedAmount" : {
            "type" : "number"
          },
          "surchargeCurrency" : {
            "type" : "string"
          },
          "stackingMode" : {
            "type" : "string"
          },
          "stackingGroup" : {
            "type" : "string"
          },
          "maxOvertimeDaily" : {
            "type" : "number"
          },
          "maxOvertimeWeekly" : {
            "type" : "number"
          },
          "maxOvertimeMonthly" : {
            "type" : "number"
          },
          "maxOvertimeYearly" : {
            "type" : "number"
          },
          "compensationAllowed" : {
            "type" : "string"
          },
          "timeOffFactor" : {
            "type" : "number"
          },
          "hourReductionEnabled" : {
            "type" : "boolean"
          },
          "hourReductionFactor" : {
            "type" : "number"
          },
          "priority" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OvertimeRuleConditionDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "overtimeRuleId" : {
            "type" : "string"
          },
          "conditionGroup" : {
            "type" : "integer",
            "format" : "int32"
          },
          "conditionType" : {
            "type" : "string"
          },
          "conditionOperator" : {
            "type" : "string"
          },
          "conditionValue" : {
            "type" : "string"
          },
          "conditionValue2" : {
            "type" : "string"
          },
          "negate" : {
            "type" : "boolean"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "OvertimeRuleConditionCreateDto" : {
        "type" : "object",
        "properties" : {
          "conditionGroup" : {
            "type" : "integer",
            "format" : "int32"
          },
          "conditionType" : {
            "type" : "string"
          },
          "conditionOperator" : {
            "type" : "string"
          },
          "conditionValue" : {
            "type" : "string"
          },
          "conditionValue2" : {
            "type" : "string"
          },
          "negate" : {
            "type" : "boolean"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ShiftDefinitionDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "code" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "startTime" : {
            "type" : "string"
          },
          "endTime" : {
            "type" : "string"
          },
          "crossesMidnight" : {
            "type" : "boolean"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "nightShift" : {
            "type" : "boolean"
          },
          "minRestHours" : {
            "type" : "number"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ShiftDefinitionCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "code" : {
            "type" : "string"
          },
          "startTime" : {
            "type" : "string"
          },
          "endTime" : {
            "type" : "string"
          },
          "crossesMidnight" : {
            "type" : "boolean"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "nightShift" : {
            "type" : "boolean"
          },
          "minRestHours" : {
            "type" : "number"
          },
          "sortOrder" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OvertimeSurchargeTierDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "tierOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "fromMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "toMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "periodBasis" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "OvertimeSurchargeTierCreateDto" : {
        "type" : "object",
        "properties" : {
          "tierOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "fromMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "toMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "surchargePercent" : {
            "type" : "number"
          },
          "periodBasis" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "WorkingTimeRuleDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "employmentModelId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxDailyHoursExtended" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxWeeklyHoursAverage" : {
            "type" : "number"
          },
          "averagingPeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minDailyRestHours" : {
            "type" : "number"
          },
          "minWeeklyRestHours" : {
            "type" : "number"
          },
          "nightWorkStart" : {
            "type" : "string"
          },
          "nightWorkEnd" : {
            "type" : "string"
          },
          "nightWorkerMaxDailyHours" : {
            "type" : "number"
          },
          "youthMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantNightWorkProhibited" : {
            "type" : "boolean"
          },
          "priority" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "WorkingTimeRuleCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxDailyHoursExtended" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxWeeklyHoursAverage" : {
            "type" : "number"
          },
          "averagingPeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minDailyRestHours" : {
            "type" : "number"
          },
          "minWeeklyRestHours" : {
            "type" : "number"
          },
          "nightWorkStart" : {
            "type" : "string"
          },
          "nightWorkEnd" : {
            "type" : "string"
          },
          "nightWorkerMaxDailyHours" : {
            "type" : "number"
          },
          "youthMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantNightWorkProhibited" : {
            "type" : "boolean"
          },
          "priority" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "EmploymentModelDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "sourceProfileId" : {
            "type" : "string"
          },
          "calculationBasis" : {
            "type" : "string"
          },
          "referencePeriod" : {
            "type" : "string"
          },
          "dailyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "weeklyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "monthlyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxOvertimeHoursMonth" : {
            "type" : "number"
          },
          "maxOvertimeHoursYear" : {
            "type" : "number"
          },
          "flextimeEnabled" : {
            "type" : "boolean"
          },
          "flextimeFrameStart" : {
            "type" : "string"
          },
          "flextimeFrameEnd" : {
            "type" : "string"
          },
          "flextimeDailyMaxHours" : {
            "type" : "number"
          },
          "flextimePeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "coreTimeEnabled" : {
            "type" : "boolean"
          },
          "coreTimeStart" : {
            "type" : "string"
          },
          "coreTimeEnd" : {
            "type" : "string"
          },
          "flextimeAccountMaxPlus" : {
            "type" : "number"
          },
          "flextimeAccountMaxMinus" : {
            "type" : "number"
          },
          "tieredSurchargesEnabled" : {
            "type" : "boolean"
          },
          "undertimeEnabled" : {
            "type" : "boolean"
          },
          "undertimeCarryOver" : {
            "type" : "boolean"
          },
          "undertimeMaxMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "undertimeDeductVacation" : {
            "type" : "boolean"
          },
          "overtimeExpires" : {
            "type" : "boolean"
          },
          "overtimeExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeExpiryAction" : {
            "type" : "string"
          },
          "overtimeDeadlineDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "allInEnabled" : {
            "type" : "boolean"
          },
          "allInHoursMonthly" : {
            "type" : "number"
          },
          "allInExcessCompensation" : {
            "type" : "string"
          },
          "roundingEnabled" : {
            "type" : "boolean"
          },
          "roundingIntervalMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "roundingMethod" : {
            "type" : "string"
          },
          "roundingAppliesTo" : {
            "type" : "string"
          },
          "approvalMode" : {
            "type" : "string"
          },
          "autoApproveThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "approvalDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "unapprovedAction" : {
            "type" : "string"
          },
          "standbyEnabled" : {
            "type" : "boolean"
          },
          "standbyCountPercent" : {
            "type" : "number"
          },
          "standbyActivationFull" : {
            "type" : "boolean"
          },
          "standbySurchargePercent" : {
            "type" : "number"
          },
          "shiftWorkEnabled" : {
            "type" : "boolean"
          },
          "payoutCycle" : {
            "type" : "string"
          },
          "payoutAuto" : {
            "type" : "boolean"
          },
          "payoutMinHours" : {
            "type" : "number"
          },
          "payoutMaxHoursPerCycle" : {
            "type" : "number"
          },
          "antiPyramidingEnabled" : {
            "type" : "boolean"
          },
          "compTimeAllowed" : {
            "type" : "string"
          },
          "compTimeMaxHours" : {
            "type" : "number"
          },
          "restPeriodTrackingEnabled" : {
            "type" : "boolean"
          },
          "minDailyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWeeklyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sundayWorkSubstituteRestEnabled" : {
            "type" : "boolean"
          },
          "sundaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "holidaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWorkFreeSundaysPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryPaymentsPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeBaseIncludesSonderzahlung" : {
            "type" : "boolean"
          },
          "compensationType" : {
            "type" : "string"
          },
          "payoutFactor" : {
            "type" : "number"
          },
          "timeOffFactor" : {
            "type" : "number"
          },
          "nightSurchargeEnabled" : {
            "type" : "boolean"
          },
          "nightStartTime" : {
            "type" : "string"
          },
          "nightEndTime" : {
            "type" : "string"
          },
          "nightSurchargePercent" : {
            "type" : "number"
          },
          "weekendSurchargeEnabled" : {
            "type" : "boolean"
          },
          "saturdaySurchargePercent" : {
            "type" : "number"
          },
          "sundaySurchargePercent" : {
            "type" : "number"
          },
          "holidaySurchargePercent" : {
            "type" : "number"
          },
          "systemModel" : {
            "type" : "boolean"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "EmploymentModelCreateDto" : {
        "type" : "object",
        "properties" : {
          "active" : {
            "type" : "boolean"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "calculationBasis" : {
            "type" : "string"
          },
          "referencePeriod" : {
            "type" : "string"
          },
          "dailyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "weeklyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "monthlyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxOvertimeHoursMonth" : {
            "type" : "number"
          },
          "maxOvertimeHoursYear" : {
            "type" : "number"
          },
          "flextimeEnabled" : {
            "type" : "boolean"
          },
          "flextimeFrameStart" : {
            "type" : "string"
          },
          "flextimeFrameEnd" : {
            "type" : "string"
          },
          "flextimeDailyMaxHours" : {
            "type" : "number"
          },
          "flextimePeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "coreTimeEnabled" : {
            "type" : "boolean"
          },
          "coreTimeStart" : {
            "type" : "string"
          },
          "coreTimeEnd" : {
            "type" : "string"
          },
          "flextimeAccountMaxPlus" : {
            "type" : "number"
          },
          "flextimeAccountMaxMinus" : {
            "type" : "number"
          },
          "tieredSurchargesEnabled" : {
            "type" : "boolean"
          },
          "undertimeEnabled" : {
            "type" : "boolean"
          },
          "undertimeCarryOver" : {
            "type" : "boolean"
          },
          "undertimeMaxMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "undertimeDeductVacation" : {
            "type" : "boolean"
          },
          "overtimeExpires" : {
            "type" : "boolean"
          },
          "overtimeExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeExpiryAction" : {
            "type" : "string"
          },
          "overtimeDeadlineDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "allInEnabled" : {
            "type" : "boolean"
          },
          "allInHoursMonthly" : {
            "type" : "number"
          },
          "allInExcessCompensation" : {
            "type" : "string"
          },
          "roundingEnabled" : {
            "type" : "boolean"
          },
          "roundingIntervalMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "roundingMethod" : {
            "type" : "string"
          },
          "roundingAppliesTo" : {
            "type" : "string"
          },
          "approvalMode" : {
            "type" : "string"
          },
          "autoApproveThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "approvalDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "unapprovedAction" : {
            "type" : "string"
          },
          "standbyEnabled" : {
            "type" : "boolean"
          },
          "standbyCountPercent" : {
            "type" : "number"
          },
          "standbyActivationFull" : {
            "type" : "boolean"
          },
          "standbySurchargePercent" : {
            "type" : "number"
          },
          "shiftWorkEnabled" : {
            "type" : "boolean"
          },
          "payoutCycle" : {
            "type" : "string"
          },
          "payoutAuto" : {
            "type" : "boolean"
          },
          "payoutMinHours" : {
            "type" : "number"
          },
          "payoutMaxHoursPerCycle" : {
            "type" : "number"
          },
          "antiPyramidingEnabled" : {
            "type" : "boolean"
          },
          "sourceProfileId" : {
            "type" : "string"
          },
          "compTimeAllowed" : {
            "type" : "string"
          },
          "compTimeMaxHours" : {
            "type" : "number"
          },
          "restPeriodTrackingEnabled" : {
            "type" : "boolean"
          },
          "minDailyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWeeklyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sundayWorkSubstituteRestEnabled" : {
            "type" : "boolean"
          },
          "sundaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "holidaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWorkFreeSundaysPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryPaymentsPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeBaseIncludesSonderzahlung" : {
            "type" : "boolean"
          },
          "compensationType" : {
            "type" : "string"
          },
          "payoutFactor" : {
            "type" : "number"
          },
          "timeOffFactor" : {
            "type" : "number"
          },
          "nightSurchargeEnabled" : {
            "type" : "boolean"
          },
          "nightStartTime" : {
            "type" : "string"
          },
          "nightEndTime" : {
            "type" : "string"
          },
          "nightSurchargePercent" : {
            "type" : "number"
          },
          "weekendSurchargeEnabled" : {
            "type" : "boolean"
          },
          "saturdaySurchargePercent" : {
            "type" : "number"
          },
          "sundaySurchargePercent" : {
            "type" : "number"
          },
          "holidaySurchargePercent" : {
            "type" : "number"
          }
        }
      },
      "EmploymentModelList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmploymentModelDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/EmploymentModelListParams"
          }
        }
      },
      "EmploymentModelListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "BreakRuleUpdateDto" : {
        "type" : "object",
        "properties" : {
          "active" : {
            "type" : "boolean"
          },
          "afterWorkMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakDurationMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMaxSplit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakMinPartMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tierOrder" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          }
        }
      },
      "EmploymentModelUpdateDto" : {
        "type" : "object",
        "properties" : {
          "active" : {
            "type" : "boolean"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "calculationBasis" : {
            "type" : "string"
          },
          "referencePeriod" : {
            "type" : "string"
          },
          "dailyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "weeklyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "monthlyThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxOvertimeHoursMonth" : {
            "type" : "number"
          },
          "maxOvertimeHoursYear" : {
            "type" : "number"
          },
          "flextimeEnabled" : {
            "type" : "boolean"
          },
          "flextimeFrameStart" : {
            "type" : "string"
          },
          "flextimeFrameEnd" : {
            "type" : "string"
          },
          "flextimeDailyMaxHours" : {
            "type" : "number"
          },
          "flextimePeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "coreTimeEnabled" : {
            "type" : "boolean"
          },
          "coreTimeStart" : {
            "type" : "string"
          },
          "coreTimeEnd" : {
            "type" : "string"
          },
          "flextimeAccountMaxPlus" : {
            "type" : "number"
          },
          "flextimeAccountMaxMinus" : {
            "type" : "number"
          },
          "tieredSurchargesEnabled" : {
            "type" : "boolean"
          },
          "undertimeEnabled" : {
            "type" : "boolean"
          },
          "undertimeCarryOver" : {
            "type" : "boolean"
          },
          "undertimeMaxMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "undertimeDeductVacation" : {
            "type" : "boolean"
          },
          "overtimeExpires" : {
            "type" : "boolean"
          },
          "overtimeExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeExpiryAction" : {
            "type" : "string"
          },
          "overtimeDeadlineDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "allInEnabled" : {
            "type" : "boolean"
          },
          "allInHoursMonthly" : {
            "type" : "number"
          },
          "allInExcessCompensation" : {
            "type" : "string"
          },
          "roundingEnabled" : {
            "type" : "boolean"
          },
          "roundingIntervalMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "roundingMethod" : {
            "type" : "string"
          },
          "roundingAppliesTo" : {
            "type" : "string"
          },
          "approvalMode" : {
            "type" : "string"
          },
          "autoApproveThresholdMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "approvalDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "unapprovedAction" : {
            "type" : "string"
          },
          "standbyEnabled" : {
            "type" : "boolean"
          },
          "standbyCountPercent" : {
            "type" : "number"
          },
          "standbyActivationFull" : {
            "type" : "boolean"
          },
          "standbySurchargePercent" : {
            "type" : "number"
          },
          "shiftWorkEnabled" : {
            "type" : "boolean"
          },
          "payoutCycle" : {
            "type" : "string"
          },
          "payoutAuto" : {
            "type" : "boolean"
          },
          "payoutMinHours" : {
            "type" : "number"
          },
          "payoutMaxHoursPerCycle" : {
            "type" : "number"
          },
          "antiPyramidingEnabled" : {
            "type" : "boolean"
          },
          "compTimeAllowed" : {
            "type" : "string"
          },
          "compTimeMaxHours" : {
            "type" : "number"
          },
          "restPeriodTrackingEnabled" : {
            "type" : "boolean"
          },
          "minDailyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWeeklyRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sundayWorkSubstituteRestEnabled" : {
            "type" : "boolean"
          },
          "sundaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "holidaySubstituteRestDeadlineDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minWorkFreeSundaysPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salaryPaymentsPerYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeBaseIncludesSonderzahlung" : {
            "type" : "boolean"
          },
          "compensationType" : {
            "type" : "string"
          },
          "payoutFactor" : {
            "type" : "number"
          },
          "timeOffFactor" : {
            "type" : "number"
          },
          "nightSurchargeEnabled" : {
            "type" : "boolean"
          },
          "nightStartTime" : {
            "type" : "string"
          },
          "nightEndTime" : {
            "type" : "string"
          },
          "nightSurchargePercent" : {
            "type" : "number"
          },
          "weekendSurchargeEnabled" : {
            "type" : "boolean"
          },
          "saturdaySurchargePercent" : {
            "type" : "number"
          },
          "sundaySurchargePercent" : {
            "type" : "number"
          },
          "holidaySurchargePercent" : {
            "type" : "number"
          }
        }
      },
      "LeaveRuleUpdateDto" : {
        "type" : "object",
        "properties" : {
          "leaveType" : {
            "type" : "string"
          },
          "i18nKey" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "minDaysAnnual" : {
            "type" : "number"
          },
          "basisWorkDaysPerWeek" : {
            "type" : "integer",
            "format" : "int32"
          },
          "accrualMethod" : {
            "type" : "string"
          },
          "probationMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverAllowed" : {
            "type" : "boolean"
          },
          "carryOverMaxDays" : {
            "type" : "number"
          },
          "carryOverExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "carryOverExpiryDate" : {
            "type" : "string"
          },
          "carryOverExtendedOnIllness" : {
            "type" : "boolean"
          },
          "carryOverIllnessExpiryMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "tenureScalingEnabled" : {
            "type" : "boolean"
          },
          "paidByEmployerDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paidByEmployerPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfPercent" : {
            "type" : "number"
          },
          "paidByEmployerHalfDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "documentationRequiredAfterDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "waitingDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "sameIllnessResetMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksBefore" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maternityWeeksAfter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paternityDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeaveMonths" : {
            "type" : "integer",
            "format" : "int32"
          },
          "parentalLeavePaidPercent" : {
            "type" : "number"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "WorkingTimeRuleUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "maxDailyHours" : {
            "type" : "number"
          },
          "maxDailyHoursExtended" : {
            "type" : "number"
          },
          "maxWeeklyHours" : {
            "type" : "number"
          },
          "maxWeeklyHoursAverage" : {
            "type" : "number"
          },
          "averagingPeriodWeeks" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minDailyRestHours" : {
            "type" : "number"
          },
          "minWeeklyRestHours" : {
            "type" : "number"
          },
          "nightWorkStart" : {
            "type" : "string"
          },
          "nightWorkEnd" : {
            "type" : "string"
          },
          "nightWorkerMaxDailyHours" : {
            "type" : "number"
          },
          "youthMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantMaxDailyHours" : {
            "type" : "number"
          },
          "pregnantNightWorkProhibited" : {
            "type" : "boolean"
          },
          "priority" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "ExpenseCreateDto" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "amount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "refunded" : {
            "type" : "boolean"
          },
          "fileUri" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          },
          "taskId" : {
            "type" : "string"
          }
        }
      },
      "ExpenseList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExpenseDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "ExpenseListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "taskId" : {
            "type" : "string"
          },
          "documentId" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "filter" : {
            "type" : "string"
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "taskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ExpenseUpdateDto" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "amount" : {
            "type" : "string",
            "format" : "decimal"
          },
          "refunded" : {
            "type" : "boolean"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "fileUri" : {
            "type" : "string"
          },
          "fileName" : {
            "type" : "string"
          }
        }
      },
      "ExpenseStatus" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "refunded" : {
            "type" : "boolean"
          }
        }
      },
      "ExportParams" : {
        "type" : "object",
        "properties" : {
          "report" : {
            "type" : "integer",
            "format" : "int32"
          },
          "email" : {
            "type" : "string"
          },
          "filename" : {
            "type" : "string"
          },
          "teamIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "tagIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "absenceTypeIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "absenceStatuses" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "overtimeStatuses" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "periodType" : {
            "type" : "string"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "type" : {
            "type" : "string"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "format" : {
            "type" : "string"
          },
          "filter" : {
            "type" : "string"
          },
          "splitTask" : {
            "type" : "boolean"
          },
          "summarize" : {
            "type" : "boolean"
          },
          "saveAsTemplate" : {
            "type" : "boolean"
          },
          "templateName" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "exportedFields" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ExportedField"
            }
          },
          "fileExtension" : {
            "type" : "string"
          },
          "pdf" : {
            "type" : "boolean"
          },
          "xls" : {
            "type" : "boolean"
          },
          "csv" : {
            "type" : "boolean"
          },
          "xls1904" : {
            "type" : "boolean"
          },
          "dateRange" : {
            "type" : "string"
          },
          "mimeType" : {
            "type" : "string"
          },
          "fileType" : {
            "type" : "string"
          }
        }
      },
      "ExportedField" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "position" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectField" : {
            "type" : "boolean"
          },
          "teamField" : {
            "type" : "boolean"
          },
          "customField" : {
            "type" : "boolean"
          },
          "customValue" : {
            "type" : "string"
          },
          "customFormula" : {
            "type" : "string"
          },
          "customType" : {
            "type" : "string"
          }
        }
      },
      "HolidayCollectionCountryDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "collectionId" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "HolidayCollectionDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "countries" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HolidayCollectionCountryDto"
            }
          }
        }
      },
      "HolidayCollectionCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          }
        }
      },
      "HolidayCollectionList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HolidayCollectionDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/HolidayCollectionListParams"
          }
        }
      },
      "HolidayCollectionListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "contractIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "userId" : {
            "type" : "string"
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "teamId" : {
            "type" : "string"
          },
          "active" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "HolidayCollectionUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "HolidayCollectionCountryCreateDto" : {
        "type" : "object",
        "properties" : {
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          }
        }
      },
      "HolidayEventDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "templateId" : {
            "type" : "string"
          },
          "collectionId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "date" : {
            "type" : "string"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "type" : {
            "type" : "string"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "HolidayEventList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HolidayEventDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/HolidayEventListParams"
          }
        }
      },
      "HolidayEventListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "collectionId" : {
            "type" : "string"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "HolidayEventUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          }
        }
      },
      "HolidayTemplateDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "collectionId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "sourceType" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "regionCode" : {
            "type" : "string"
          },
          "jollidayKey" : {
            "type" : "string"
          },
          "recurring" : {
            "type" : "boolean"
          },
          "customDate" : {
            "type" : "string"
          },
          "customMonth" : {
            "type" : "integer",
            "format" : "int32"
          },
          "customDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "HolidayTemplateCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "customDate" : {
            "type" : "string"
          },
          "customMonth" : {
            "type" : "integer",
            "format" : "int32"
          },
          "customDay" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "HolidayTemplateList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/HolidayTemplateDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/HolidayTemplateListParams"
          }
        }
      },
      "HolidayTemplateListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "collectionId" : {
            "type" : "string"
          },
          "sourceType" : {
            "type" : "string"
          },
          "countryCode" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "HolidayTemplateUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          }
        }
      },
      "InvoiceSeriesDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "pattern" : {
            "type" : "string"
          },
          "prefix" : {
            "type" : "string"
          },
          "currentCounter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "resetBehavior" : {
            "type" : "string"
          },
          "lastResetYear" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lastResetMonth" : {
            "type" : "integer",
            "format" : "int32"
          },
          "active" : {
            "type" : "boolean"
          },
          "lastInvoiceNumber" : {
            "type" : "string"
          },
          "lastUsedTimestamp" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "InvoiceSeriesCreateDto" : {
        "type" : "object",
        "properties" : {
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "pattern" : {
            "type" : "string"
          },
          "prefix" : {
            "type" : "string"
          },
          "startingCounter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "resetBehavior" : {
            "type" : "string"
          }
        }
      },
      "InvoiceSeriesList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/InvoiceSeriesDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "InvoiceNumberPreviewDto" : {
        "type" : "object",
        "properties" : {
          "seriesId" : {
            "type" : "string"
          },
          "seriesName" : {
            "type" : "string"
          },
          "nextInvoiceNumber" : {
            "type" : "string"
          },
          "currentCounter" : {
            "type" : "integer",
            "format" : "int32"
          },
          "nextCounter" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "InvoiceSeriesListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "InvoiceSeriesUpdateDto" : {
        "type" : "object",
        "properties" : {
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "pattern" : {
            "type" : "string"
          },
          "prefix" : {
            "type" : "string"
          },
          "resetBehavior" : {
            "type" : "string"
          },
          "active" : {
            "type" : "boolean"
          },
          "setCounterTo" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "LeaveBalanceDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "entitledDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "carriedOverDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "additionalDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "totalAvailableDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "usedDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "pendingDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "remainingDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "carryOverExpiresAt" : {
            "type" : "string"
          },
          "expiredDays" : {
            "type" : "string",
            "format" : "decimal"
          },
          "calculatedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "LeaveBalanceAdjustDto" : {
        "type" : "object",
        "properties" : {
          "adjustmentDays" : {
            "type" : "number"
          },
          "reason" : {
            "type" : "string"
          }
        }
      },
      "LeaveBalanceList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/LeaveBalanceDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/LeaveBalanceListParams"
          }
        }
      },
      "LeaveBalanceListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "contractId" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "year" : {
            "type" : "integer",
            "format" : "int32"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "MfaRecoveryCodesResponse" : {
        "type" : "object",
        "properties" : {
          "codes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "MfaRecoveryResponse" : {
        "type" : "object",
        "properties" : {
          "customToken" : {
            "type" : "string"
          }
        }
      },
      "MfaRecoveryRequest" : {
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "string"
          }
        }
      },
      "NoteCreateDto" : {
        "type" : "object",
        "properties" : {
          "text" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "uri" : {
            "type" : "string"
          },
          "driveId" : {
            "type" : "string"
          },
          "taskId" : {
            "type" : "string"
          }
        }
      },
      "NoteList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/NoteDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "NoteListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "taskId" : {
            "type" : "string"
          },
          "documentId" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "taskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "NoteUpdateDto" : {
        "type" : "object",
        "properties" : {
          "text" : {
            "type" : "string"
          },
          "dateTime" : {
            "type" : "string"
          },
          "uri" : {
            "type" : "string"
          },
          "driveId" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "OrganizationMemberDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "invited" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/OrganizationPermissionDto"
          },
          "teamAssignments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OrganizationMemberTeamAssignmentDto"
            }
          },
          "hasActiveContract" : {
            "type" : "boolean"
          },
          "hasLicense" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "displayName" : {
            "type" : "string"
          },
          "initials" : {
            "type" : "string"
          }
        }
      },
      "OrganizationMemberTeamAssignmentDto" : {
        "type" : "object",
        "properties" : {
          "teamMemberId" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "teamName" : {
            "type" : "string"
          },
          "employeeId" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/TeamPermissionDto"
          },
          "projectRegistrations" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamMemberProjectRegistrationDto"
            }
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "TeamMemberProjectRegistrationDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "permission" : {
            "$ref" : "#/components/schemas/ProjectPermissionDto"
          }
        }
      },
      "OrganizationMemberCreateDto" : {
        "type" : "object",
        "properties" : {
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "invoicing" : {
            "type" : "boolean"
          },
          "billing" : {
            "type" : "boolean"
          },
          "admin" : {
            "type" : "boolean"
          },
          "teamAssignments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OrganizationMemberTeamAssignmentDto"
            }
          }
        }
      },
      "OrganizationCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "aiChatEnabled" : {
            "type" : "boolean"
          }
        }
      },
      "OrganizationMemberList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OrganizationMemberDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "OrganizationMemberListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OrganizationList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OrganizationDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/OrganizationListParams"
          }
        }
      },
      "OrganizationListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "permission" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OrganizationUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "aiChatEnabled" : {
            "type" : "boolean"
          }
        }
      },
      "OrganizationMemberUpdateDto" : {
        "type" : "object",
        "properties" : {
          "invoicing" : {
            "type" : "boolean"
          },
          "billing" : {
            "type" : "boolean"
          },
          "admin" : {
            "type" : "boolean"
          },
          "teamAssignments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OrganizationMemberTeamAssignmentDto"
            }
          }
        }
      },
      "OvertimeBalanceDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "periodType" : {
            "type" : "string"
          },
          "periodStart" : {
            "type" : "string"
          },
          "periodEnd" : {
            "type" : "string"
          },
          "targetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "targetMinutesToDate" : {
            "type" : "integer",
            "format" : "int32"
          },
          "currentDayTargetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "currentWeekTargetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "currentMonthTargetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "actualMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "undertimeMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "undertimeTracked" : {
            "type" : "boolean"
          },
          "compensatedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "adjustmentMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "remainingMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "expiredMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "flextimeBalanceMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "flextimeCarryOverMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "regularMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "nightMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "weekendMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "holidayMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "standbyMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "standbyEffectiveMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "standbyActivationMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "earlyShiftMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "lateShiftMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "nightShiftMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakDeductedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "breakPaidMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxDailyHoursExceededDays" : {
            "type" : "integer",
            "format" : "int32"
          },
          "maxWeeklyHoursExceeded" : {
            "type" : "boolean"
          },
          "overtimeTier1Minutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeTier2Minutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "overtimeTier3Minutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "allInIncludedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "allInExcessMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "grossOvertimeValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "surchargeValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "totalValue" : {
            "type" : "string",
            "format" : "decimal"
          },
          "monetaryValueApplicable" : {
            "type" : "boolean"
          },
          "currency" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "approvedBy" : {
            "type" : "string"
          },
          "approvedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "approvalNotes" : {
            "type" : "string"
          },
          "paidOutMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paidOutAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "timeOffTakenMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "calculatedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "canApprove" : {
            "type" : "boolean"
          },
          "canReject" : {
            "type" : "boolean"
          },
          "canCompensate" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "OvertimeAdjustDto" : {
        "type" : "object",
        "properties" : {
          "adjustmentMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "reason" : {
            "type" : "string"
          }
        }
      },
      "OvertimeApprovalDto" : {
        "type" : "object",
        "properties" : {
          "notes" : {
            "type" : "string"
          },
          "action" : {
            "type" : "string"
          }
        }
      },
      "OvertimeCompensateDto" : {
        "type" : "object",
        "properties" : {
          "compensationType" : {
            "type" : "string"
          },
          "minutes" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OvertimeBalanceList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OvertimeBalanceDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/OvertimeBalanceListParams"
          },
          "stats" : {
            "$ref" : "#/components/schemas/OvertimeBalanceStatsDto"
          }
        }
      },
      "OvertimeBalanceListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "contractId" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "month" : {
            "type" : "integer",
            "format" : "int32"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "OvertimeBalanceStatsDto" : {
        "type" : "object",
        "properties" : {
          "totalTargetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalActualMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalOvertimeMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalUndertimeMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalNetMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalCompensatedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "totalRemainingMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pendingApprovalsCount" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "PasswordWeakResponse" : {
        "type" : "object",
        "properties" : {
          "since" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "PauseCreateDto" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "taskId" : {
            "type" : "string"
          }
        }
      },
      "PauseList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PauseDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "PauseListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "taskId" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "PauseUpdateDto" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "PublicProfileDto" : {
        "type" : "object",
        "properties" : {
          "permission" : {
            "type" : "integer",
            "format" : "int32"
          },
          "email" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "language" : {
            "type" : "string"
          },
          "countryIso" : {
            "type" : "string"
          },
          "country" : {
            "type" : "string"
          },
          "ipAddress" : {
            "type" : "string"
          },
          "referrer" : {
            "type" : "string"
          },
          "newsletter" : {
            "type" : "boolean"
          },
          "gdprConsent" : {
            "type" : "boolean"
          },
          "invited" : {
            "type" : "boolean"
          },
          "activatedTeams" : {
            "type" : "boolean"
          },
          "activated" : {
            "type" : "boolean"
          },
          "needsSetup" : {
            "type" : "boolean"
          },
          "purpose" : {
            "type" : "integer",
            "format" : "int32"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "subscriptionId" : {
            "type" : "string"
          },
          "expires" : {
            "type" : "integer",
            "format" : "int64"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "plan" : {
            "type" : "integer",
            "format" : "int32"
          },
          "valid" : {
            "type" : "boolean"
          },
          "expired" : {
            "type" : "boolean"
          },
          "product" : {
            "type" : "string"
          },
          "trial" : {
            "type" : "boolean"
          },
          "planEnterprise" : {
            "type" : "boolean"
          },
          "planBusiness" : {
            "type" : "boolean"
          },
          "planPro" : {
            "type" : "boolean"
          },
          "planPlus" : {
            "type" : "boolean"
          },
          "planBasic" : {
            "type" : "boolean"
          },
          "member" : {
            "type" : "boolean"
          },
          "personalSubscriptionActive" : {
            "type" : "boolean"
          },
          "organizationSubscriptionActive" : {
            "type" : "boolean"
          },
          "basic" : {
            "type" : "boolean"
          },
          "pro" : {
            "type" : "boolean"
          },
          "plus" : {
            "type" : "boolean"
          },
          "validProfile" : {
            "type" : "boolean"
          },
          "validAndActivated" : {
            "type" : "boolean"
          },
          "admin" : {
            "type" : "boolean"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "displayName" : {
            "type" : "string"
          },
          "initials" : {
            "type" : "string"
          },
          "overtimeAccessible" : {
            "type" : "boolean"
          }
        }
      },
      "EmailChangeStatusDto" : {
        "type" : "object",
        "properties" : {
          "pendingEmail" : {
            "type" : "string"
          },
          "expiresAt" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "CheckoutRecoveryDto" : {
        "type" : "object",
        "properties" : {
          "state" : {
            "type" : "string"
          },
          "plan" : {
            "type" : "integer",
            "format" : "int32"
          },
          "licenses" : {
            "type" : "integer",
            "format" : "int32"
          },
          "declineCode" : {
            "type" : "string"
          },
          "updated" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ProfileSegments" : {
        "type" : "object",
        "properties" : {
          "checkoutRecovery" : {
            "$ref" : "#/components/schemas/CheckoutRecoveryDto"
          }
        }
      },
      "EmailChangeRequestDto" : {
        "type" : "object",
        "properties" : {
          "newEmail" : {
            "type" : "string"
          }
        }
      },
      "PublicProfileUpdateDto" : {
        "type" : "object",
        "properties" : {
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "newsletter" : {
            "type" : "boolean"
          },
          "purpose" : {
            "type" : "integer",
            "format" : "int32"
          },
          "needsSetup" : {
            "type" : "boolean"
          }
        }
      },
      "ProjectMemberDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/ProjectPermissionDto"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "displayName" : {
            "type" : "string"
          },
          "initials" : {
            "type" : "string"
          }
        }
      },
      "ProjectMemberCreateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "permission" : {
            "$ref" : "#/components/schemas/ProjectPermissionDto"
          }
        }
      },
      "ProjectCreateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "employer" : {
            "type" : "string"
          },
          "office" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "taskDefaultBillable" : {
            "type" : "boolean"
          },
          "taskDefaultRateId" : {
            "type" : "string"
          },
          "archived" : {
            "type" : "boolean"
          },
          "salaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salary" : {
            "type" : "string",
            "format" : "decimal"
          },
          "teamId" : {
            "type" : "string"
          }
        }
      },
      "ProjectMemberList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ProjectMemberDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "ProjectMemberListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "withoutMe" : {
            "type" : "boolean"
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "withDeleted" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ProjectList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ProjectDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "ProjectListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "teamId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "permission" : {
            "type" : "string"
          },
          "teamIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "taskStartDate" : {
            "type" : "string"
          },
          "taskEndDate" : {
            "type" : "string"
          },
          "taskRateId" : {
            "type" : "string"
          },
          "taskType" : {
            "type" : "string"
          },
          "taskFilter" : {
            "type" : "string"
          },
          "taskUserIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "empty" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ProjectUpdateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "employer" : {
            "type" : "string"
          },
          "office" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "taskDefaultBillable" : {
            "type" : "boolean"
          },
          "taskDefaultRateId" : {
            "type" : "string"
          },
          "archived" : {
            "type" : "boolean"
          },
          "salaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          },
          "salary" : {
            "type" : "string",
            "format" : "decimal"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "ProjectMemberUpdateDto" : {
        "type" : "object",
        "properties" : {
          "permission" : {
            "$ref" : "#/components/schemas/ProjectPermissionDto"
          }
        }
      },
      "ProjectRegistrationDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "role" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "salaryActivated" : {
            "type" : "boolean"
          },
          "salary" : {
            "type" : "string",
            "format" : "decimal"
          }
        }
      },
      "RateCreateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "factor" : {
            "type" : "string",
            "format" : "decimal"
          },
          "extra" : {
            "type" : "string",
            "format" : "decimal"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "archived" : {
            "type" : "boolean"
          },
          "teamId" : {
            "type" : "string"
          }
        }
      },
      "RateList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/RateDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "RateListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "teamId" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "empty" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "RateUpdateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "factor" : {
            "type" : "string",
            "format" : "decimal"
          },
          "extra" : {
            "type" : "string",
            "format" : "decimal"
          },
          "enabled" : {
            "type" : "boolean"
          },
          "archived" : {
            "type" : "boolean"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "ReminderDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "title" : {
            "type" : "string"
          },
          "promptText" : {
            "type" : "string"
          },
          "deliveryTextTemplate" : {
            "type" : "string"
          },
          "scheduleType" : {
            "type" : "string"
          },
          "dtStart" : {
            "type" : "integer",
            "format" : "int64"
          },
          "timeZone" : {
            "type" : "string"
          },
          "rrule" : {
            "type" : "string"
          },
          "nextFireAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "status" : {
            "type" : "string"
          },
          "lastFiredAt" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ReminderCreateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "promptText" : {
            "type" : "string"
          },
          "deliveryTextTemplate" : {
            "type" : "string"
          },
          "scheduleType" : {
            "type" : "string"
          },
          "dtStart" : {
            "type" : "integer",
            "format" : "int64"
          },
          "timeZone" : {
            "type" : "string"
          },
          "rrule" : {
            "type" : "string"
          }
        }
      },
      "ReminderList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ReminderDto"
            }
          },
          "total" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ReminderUpdateDto" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "promptText" : {
            "type" : "string"
          },
          "deliveryTextTemplate" : {
            "type" : "string"
          },
          "scheduleType" : {
            "type" : "string"
          },
          "dtStart" : {
            "type" : "integer",
            "format" : "int64"
          },
          "timeZone" : {
            "type" : "string"
          },
          "rrule" : {
            "type" : "string"
          }
        }
      },
      "RestPeriodViolationDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "workEndAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "workStartAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "actualRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "requiredRestMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deficitMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "violationType" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "acknowledgedBy" : {
            "type" : "string"
          },
          "acknowledgedAt" : {
            "type" : "integer",
            "format" : "int64"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "RestPeriodViolationList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/RestPeriodViolationDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/RestPeriodViolationListParams"
          }
        }
      },
      "RestPeriodViolationListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "contractId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "violationType" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "SettingsDto" : {
        "type" : "object",
        "properties" : {
          "theme" : {
            "type" : "string"
          },
          "timezone" : {
            "type" : "string"
          },
          "language" : {
            "type" : "string"
          },
          "currency" : {
            "type" : "string"
          },
          "distance" : {
            "type" : "string"
          },
          "dateFormat" : {
            "type" : "string"
          },
          "timeFormat" : {
            "type" : "string"
          },
          "durationFormat" : {
            "type" : "string"
          },
          "csvSeparator" : {
            "type" : "string"
          },
          "slotDuration" : {
            "type" : "integer",
            "format" : "int32"
          },
          "snapDuration" : {
            "type" : "integer",
            "format" : "int32"
          },
          "firstDay" : {
            "type" : "integer",
            "format" : "int32"
          },
          "defaultTaskDuration" : {
            "type" : "integer",
            "format" : "int32"
          },
          "defaultBreakDuration" : {
            "type" : "integer",
            "format" : "int32"
          },
          "entriesPerPage" : {
            "type" : "integer",
            "format" : "int32"
          },
          "timerRounding" : {
            "type" : "integer",
            "format" : "int32"
          },
          "timerRoundingType" : {
            "type" : "integer",
            "format" : "int32"
          },
          "timerEditView" : {
            "type" : "boolean"
          },
          "pauseRounding" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pauseRoundingType" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pauseEditView" : {
            "type" : "boolean"
          },
          "showRelatives" : {
            "type" : "boolean"
          },
          "weeklySummary" : {
            "type" : "boolean"
          },
          "monthlySummary" : {
            "type" : "boolean"
          },
          "autofillProjectSelection" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "SubstituteRestDayDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "contractId" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "member" : {
            "$ref" : "#/components/schemas/Member"
          },
          "workDate" : {
            "type" : "string"
          },
          "workType" : {
            "type" : "string"
          },
          "workMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deadlineDate" : {
            "type" : "string"
          },
          "restDate" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "SubstituteRestDayList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SubstituteRestDayDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/SubstituteRestDayListParams"
          }
        }
      },
      "SubstituteRestDayListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "contractId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TagCreateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "archived" : {
            "type" : "boolean"
          },
          "teamId" : {
            "type" : "string"
          }
        }
      },
      "TagList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TagDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "TagListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "teamId" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "tagIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "empty" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TagUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "archived" : {
            "type" : "boolean"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "TaskCreateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "locationEnd" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "feeling" : {
            "type" : "integer",
            "format" : "int32"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "billed" : {
            "type" : "boolean"
          },
          "billable" : {
            "type" : "boolean"
          },
          "phoneNumber" : {
            "type" : "string"
          },
          "distance" : {
            "type" : "number",
            "format" : "double"
          },
          "rateId" : {
            "type" : "string"
          },
          "todoId" : {
            "type" : "string"
          },
          "signature" : {
            "type" : "string"
          },
          "userId" : {
            "type" : "string"
          },
          "tagIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "TaskStatistic" : {
        "type" : "object",
        "properties" : {
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "durationBreak" : {
            "type" : "integer",
            "format" : "int64"
          },
          "salaryTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "salaryBreak" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "expensesPaid" : {
            "type" : "string",
            "format" : "decimal"
          },
          "mileage" : {
            "type" : "string",
            "format" : "decimal"
          }
        }
      },
      "TaskListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "startDate" : {
            "type" : "string"
          },
          "endDate" : {
            "type" : "string"
          },
          "organizationId" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "todoId" : {
            "type" : "string"
          },
          "rateId" : {
            "type" : "string"
          },
          "documentId" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "filter" : {
            "type" : "string"
          },
          "teamIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "tagIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "taskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "feelings" : {
            "type" : "array",
            "items" : {
              "type" : "integer",
              "format" : "int32"
            }
          },
          "excludeTaskIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "populatePauses" : {
            "type" : "boolean"
          },
          "populateExpenses" : {
            "type" : "boolean"
          },
          "populateNotes" : {
            "type" : "boolean"
          },
          "populateTags" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TaskDaySummary" : {
        "type" : "object",
        "properties" : {
          "date" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "duration" : {
            "type" : "integer",
            "format" : "int64"
          },
          "durationBreak" : {
            "type" : "integer",
            "format" : "int64"
          },
          "salaryTotal" : {
            "type" : "string",
            "format" : "decimal"
          },
          "salaryBreak" : {
            "type" : "string",
            "format" : "decimal"
          }
        }
      },
      "TaskSummaryList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TaskDaySummary"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/TaskListParams"
          }
        }
      },
      "TaskList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TaskDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/TaskListParams"
          },
          "taskStatistic" : {
            "$ref" : "#/components/schemas/TaskStatistic"
          }
        }
      },
      "TaskStatusDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "billed" : {
            "type" : "boolean"
          },
          "notBillable" : {
            "type" : "boolean"
          },
          "unpaid" : {
            "type" : "boolean"
          },
          "notBilled" : {
            "type" : "boolean"
          }
        }
      },
      "TaskUpdateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "locationEnd" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "endDateTime" : {
            "type" : "string"
          },
          "feeling" : {
            "type" : "integer",
            "format" : "int32"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "billed" : {
            "type" : "boolean"
          },
          "billable" : {
            "type" : "boolean"
          },
          "phoneNumber" : {
            "type" : "string"
          },
          "distance" : {
            "type" : "number",
            "format" : "double"
          },
          "rateId" : {
            "type" : "string"
          },
          "todoId" : {
            "type" : "string"
          },
          "signature" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "tagIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "TaskTimesDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "start" : {
            "type" : "string"
          },
          "end" : {
            "type" : "string"
          }
        }
      },
      "TeamCreateDto" : {
        "type" : "object",
        "properties" : {
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectSalaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ColleagueList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Member"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/TeamMemberListParams"
          }
        }
      },
      "TeamMemberListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "withoutMe" : {
            "type" : "boolean"
          },
          "withoutProjectMembers" : {
            "type" : "boolean"
          },
          "lastActivity" : {
            "type" : "boolean"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "withoutUserIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "MemberStatusList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Member"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/MemberStatusParams"
          }
        }
      },
      "MemberStatusParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "projectId" : {
            "type" : "string"
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "status" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TeamMemberDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "teamId" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "employeeId" : {
            "type" : "string"
          },
          "imageUrl" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "invited" : {
            "type" : "boolean"
          },
          "autoJoinProjects" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/TeamPermissionDto"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "projectRegistrations" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamMemberProjectRegistrationDto"
            }
          },
          "displayName" : {
            "type" : "string"
          },
          "initials" : {
            "type" : "string"
          }
        }
      },
      "TeamMemberList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamMemberDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "TeamList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/TeamListParams"
          }
        }
      },
      "TeamListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "organizationId" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TeamMemberCreateDto" : {
        "type" : "object",
        "properties" : {
          "teamId" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "employeeId" : {
            "type" : "string"
          },
          "permission" : {
            "$ref" : "#/components/schemas/TeamPermissionDto"
          },
          "projectRegistrations" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamMemberProjectRegistrationDto"
            }
          }
        }
      },
      "TeamUpdateDto" : {
        "type" : "object",
        "properties" : {
          "organizationId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "image" : {
            "type" : "string"
          },
          "color" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectSalaryVisibility" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "TeamMemberUpdateDto" : {
        "type" : "object",
        "properties" : {
          "firstname" : {
            "type" : "string"
          },
          "lastname" : {
            "type" : "string"
          },
          "employeeId" : {
            "type" : "string"
          },
          "activate" : {
            "type" : "boolean"
          },
          "autoJoinProjects" : {
            "type" : "boolean"
          },
          "permission" : {
            "$ref" : "#/components/schemas/TeamPermissionDto"
          },
          "projectRegistrations" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TeamMemberProjectRegistrationDto"
            }
          }
        }
      },
      "TimerDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "task" : {
            "$ref" : "#/components/schemas/TaskDto"
          },
          "pause" : {
            "$ref" : "#/components/schemas/PauseDto"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          },
          "paused" : {
            "type" : "boolean"
          },
          "running" : {
            "type" : "boolean"
          },
          "stopped" : {
            "type" : "boolean"
          }
        }
      },
      "TimerPauseDto" : {
        "type" : "object",
        "properties" : {
          "startDateTime" : {
            "type" : "string"
          },
          "valid" : {
            "type" : "boolean"
          }
        }
      },
      "TimerResumeDto" : {
        "type" : "object",
        "properties" : {
          "endDateTime" : {
            "type" : "string"
          },
          "valid" : {
            "type" : "boolean"
          }
        }
      },
      "TimerStartDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "startDateTime" : {
            "type" : "string"
          },
          "valid" : {
            "type" : "boolean"
          }
        }
      },
      "TimerStopDto" : {
        "type" : "object",
        "properties" : {
          "endDateTime" : {
            "type" : "string"
          },
          "valid" : {
            "type" : "boolean"
          }
        }
      },
      "TimerUpdateDto" : {
        "type" : "object",
        "properties" : {
          "startDateTime" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "location" : {
            "type" : "string"
          },
          "locationEnd" : {
            "type" : "string"
          },
          "feeling" : {
            "type" : "integer",
            "format" : "int32"
          },
          "typeId" : {
            "type" : "integer",
            "format" : "int32"
          },
          "paid" : {
            "type" : "boolean"
          },
          "billed" : {
            "type" : "boolean"
          },
          "billable" : {
            "type" : "boolean"
          },
          "phoneNumber" : {
            "type" : "string"
          },
          "distance" : {
            "type" : "number",
            "format" : "double"
          }
        }
      },
      "ToDoCreateDto" : {
        "type" : "object",
        "properties" : {
          "projectId" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "dueDate" : {
            "type" : "string"
          },
          "assignedUsers" : {
            "type" : "string"
          },
          "estimatedHours" : {
            "type" : "integer",
            "format" : "int32"
          },
          "estimatedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ToDoList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ToDoDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ToDoListParams"
          },
          "todoStatistic" : {
            "$ref" : "#/components/schemas/ToDoStatistic"
          }
        }
      },
      "ToDoListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "projectId" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "assignedUsers" : {
            "type" : "string"
          },
          "projectIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "userIds" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "assignedOnly" : {
            "type" : "boolean"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "ToDoStatistic" : {
        "type" : "object",
        "properties" : {
          "open" : {
            "type" : "integer",
            "format" : "int64"
          },
          "closed" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ToDoUpdateDto" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "status" : {
            "type" : "integer",
            "format" : "int32"
          },
          "dueDate" : {
            "type" : "string"
          },
          "assignedUsers" : {
            "type" : "string"
          },
          "estimatedHours" : {
            "type" : "integer",
            "format" : "int32"
          },
          "estimatedMinutes" : {
            "type" : "integer",
            "format" : "int32"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      },
      "WebhookCreateResponse" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "target" : {
            "type" : "string"
          },
          "event" : {
            "type" : "string"
          },
          "secret" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "WebhookCreateDto" : {
        "type" : "object",
        "properties" : {
          "target" : {
            "type" : "string"
          },
          "event" : {
            "type" : "string"
          }
        }
      },
      "WebhookDto" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "target" : {
            "type" : "string"
          },
          "event" : {
            "type" : "string"
          },
          "user" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          },
          "lastUpdate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "created" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "WebhookList" : {
        "type" : "object",
        "properties" : {
          "items" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/WebhookDto"
            }
          },
          "params" : {
            "$ref" : "#/components/schemas/ListParams"
          }
        }
      },
      "WebhookListParams" : {
        "type" : "object",
        "properties" : {
          "search" : {
            "type" : "string"
          },
          "sort" : {
            "type" : "string"
          },
          "order" : {
            "type" : "string"
          },
          "count" : {
            "type" : "integer",
            "format" : "int32"
          },
          "page" : {
            "type" : "integer",
            "format" : "int32"
          },
          "limit" : {
            "type" : "integer",
            "format" : "int32"
          },
          "event" : {
            "type" : "string"
          },
          "offset" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "WebhookUpdateDto" : {
        "type" : "object",
        "properties" : {
          "target" : {
            "type" : "string"
          },
          "event" : {
            "type" : "string"
          },
          "deleted" : {
            "type" : "boolean"
          }
        }
      }
    },
    "securitySchemes" : {
      "apiKeyAuth" : {
        "type" : "apiKey",
        "description" : "API Key Authorization header using the ApiKey scheme. API Keys are generated at https://my.timesheet.io/development/apikeys and follow the format 'ts_{prefix}.{secret}'. Example: 'Authorization: ApiKey ts_abc12345.xyz67890abcdef123456789'",
        "name" : "Authorization",
        "in" : "header"
      },
      "bearerAuth" : {
        "type" : "http",
        "description" : "JWT Authorization header using the Bearer scheme. Example: 'Authorization: Bearer {token}'",
        "scheme" : "bearer",
        "bearerFormat" : "JWT"
      }
    }
  },
  "x-tagGroups" : [ {
    "name" : "General",
    "tags" : [ "Oauth2 Authentication", "API Key Authentication", "Pagination", "Webhook" ]
  }, {
    "name" : "User Management",
    "tags" : [ "Profile", "Settings" ]
  }, {
    "name" : "Organization & Team",
    "tags" : [ "Organization", "Team" ]
  }, {
    "name" : "Project Management",
    "tags" : [ "Project", "Rate", "Tag" ]
  }, {
    "name" : "Time Tracking",
    "tags" : [ "Timer", "Task", "Pause" ]
  }, {
    "name" : "Additional Data",
    "tags" : [ "Expense", "Note", "Document" ]
  }, {
    "name" : "Reporting & Integration",
    "tags" : [ "Export", "Automation", "Todos" ]
  } ],
  "x-logo" : {
    "url" : "https://timesheet.io/img/timesheet-logo.png",
    "altText" : "Timesheet.io",
    "backgroundColor" : "#ffffff"
  },
  "x-redocly-font-settings" : {
    "headings" : {
      "fontFamily" : "Roboto, sans-serif"
    },
    "body" : {
      "fontFamily" : "Roboto, sans-serif"
    }
  },
  "x-redocly-theme-settings" : {
    "primaryColor" : "#ff8800",
    "primaryColorDark" : "#d47300",
    "navActiveTextColor" : "#ff8800",
    "spacing" : {
      "sectionVertical" : 20,
      "sectionsGap" : 30
    }
  },
  "x-redocly-info-settings" : {
    "apiVersion" : "v1",
    "contactName" : "Timesheet API Support",
    "contactEmail" : "support@timesheet.io",
    "contactUrl" : "https://timesheet.io",
    "termsOfService" : "https://timesheet.io/en/terms",
    "description" : "# Timesheet API\n\nThe Timesheet REST API provides comprehensive functionality for creating, retrieving, updating, and deleting time tracking data.\n\n## Key Features\n- **Time Entry Management**: Create, update, and delete time entries\n- **Project Management**: Organize time entries by projects and clients\n- **Reporting**: Generate detailed time reports across various dimensions\n- **User Management**: Control access and permissions for team members\n\n## Use Cases\nThis API is ideal for integrating Timesheet with:\n- Project management systems\n- Accounting and invoicing software\n- Custom dashboards and reporting tools\n- Third-party productivity applications\n\n## Getting Started\n1. [Register](https://my.timesheet.io/development/apps) for API access\n2. Obtain your authentication credentials\n3. Make your first API call to the [Timer](/tag/Timer) endpoint\n\n## Code Examples\n\n### Starting a Timer (JavaScript)\n```javascript\nfetch('https://api.timesheet.io/v1/timer/start', {\n  method: 'POST',\n  headers: {\n    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n    \"projectId\": \"proj-12345\",\n    \"startDateTime\": new Date().toISOString()\n  })\n})\n.then(response => response.json())\n.then(data => console.log('Timer started:', data));\n```\n\n### Retrieving Projects (Python)\n```python\nimport requests\n\nheaders = {\n    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',\n}\n\nresponse = requests.get(\n    'https://api.timesheet.io/v1/projects',\n    headers=headers,\n    params={'limit': 10, 'status': 'active'}\n)\n\nprojects = response.json()\nprint(f\"Retrieved {len(projects['items'])} projects\")\n```\n\n### Creating a Task (Java)\n```java\nimport java.net.http.*;\nimport java.net.URI;\n\nHttpClient client = HttpClient.newHttpClient();\nString json = \"\"\"\n    {\n      \"projectId\": \"proj-12345\",\n      \"description\": \"API Integration\",\n      \"startDateTime\": \"2023-01-01T09:00:00Z\",\n      \"endDateTime\": \"2023-01-01T12:30:00Z\"\n    }\n    \"\"\";\n\nHttpRequest request = HttpRequest.newBuilder()\n    .uri(URI.create(\"https://api.timesheet.io/v1/tasks\"))\n    .header(\"Authorization\", \"Bearer YOUR_ACCESS_TOKEN\")\n    .header(\"Content-Type\", \"application/json\")\n    .POST(HttpRequest.BodyPublishers.ofString(json))\n    .build();\n\nHttpResponse<String> response = client.send(request, \n    HttpResponse.BodyHandlers.ofString());\n```\n\n## Response Codes & Error Handling\n\nThe API uses standard HTTP response codes to indicate success or failure of an API request:\n\n| Code | Description |\n|------|-------------|\n| 200 | Success - The request was successful |\n| 400 | Bad Request - Invalid parameters or validation error |\n| 401 | Unauthorized - Authentication required or failed |\n| 403 | Forbidden - Authenticated user lacks permission |\n| 404 | Not Found - The requested resource doesn't exist |\n| 429 | Too Many Requests - Rate limit exceeded |\n| 500 | Server Error - Something went wrong on the server |\n\n### Error Response Format\n\nAll error responses include a standardized JSON structure:\n\n```json\n{\n  \"error\": {\n    \"code\": \"validation_error\",\n    \"message\": \"The request parameters are invalid\",\n    \"details\": [\n      {\n        \"field\": \"startDateTime\",\n        \"message\": \"Must be a valid ISO 8601 date-time\"\n      }\n    ]\n  }\n}\n```\n\n### Common Error Codes\n\n| Error Code | Description |\n|------------|-------------|\n| authentication_error | Problem with authentication credentials |\n| validation_error | Invalid or missing fields in request |\n| permission_error | User lacks permission for this operation |\n| not_found | Requested resource does not exist |\n| rate_limit_exceeded | Too many requests in the current time window |\n| server_error | Unexpected internal server error |\n\n### Error Handling Best Practices\n\n1. **Validate input** before sending to reduce validation errors\n2. **Check for error responses** in all API calls\n3. **Implement exponential backoff** when encountering rate limits\n4. **Log detailed error information** for troubleshooting\n5. **Display user-friendly messages** based on error types\n\n## Rate Limiting\n\nAPI requests are limited to 100 requests per minute per API key. If you exceed this limit, you'll receive a 429 Too Many Requests response.\n\n| Response Code | Meaning |\n|---------------|---------|\n| 429 | Rate limit exceeded |\n| 503 | Service temporarily unavailable |\n\nRate limit headers are included in each response:\n- `X-RateLimit-Limit`: Total allowed requests per minute\n- `X-RateLimit-Remaining`: Remaining requests for the current window\n- `X-RateLimit-Reset`: Timestamp when the limit resets\n\n## Need Help?\nIf you need assistance, contact our [support team](mailto:api-support@timesheet.io) or visit our [documentation portal](https://docs.timesheet.io)."
  },
  "x-redocly-security-settings" : {
    "securityDefinitions" : {
      "bearerAuth" : {
        "type" : "http",
        "scheme" : "bearer",
        "bearerFormat" : "JWT",
        "description" : "JWT Authorization header using the Bearer scheme.\nEnter your token in the format `Bearer YOUR_TOKEN`\nExample: `Authorization: Bearer eyJhbGciOiJIUzI1NiIs...`\nAuthentication tokens are obtained through the OAuth 2.0 authorization flow.\n"
      },
      "apiKeyAuth" : {
        "type" : "http",
        "scheme" : "ApiKey",
        "description" : "API Key Authorization header using the ApiKey scheme.\nEnter your API key in the format `ApiKey YOUR_API_KEY`\nExample: `Authorization: ApiKey ts_1a2b3c4d.9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f`"
      }
    }
  }
}