{
    "openapi": "3.1.0",
    "info": {
        "title": "Public API",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "https://api.streamtime.net/v2",
            "description": "Public API Server"
        }
    ],
    "paths": {
        "/branches": {
            "get": {
                "tags": [
                    "Branches"
                ],
                "summary": "List branches",
                "description": "Returns the list of all branches.",
                "operationId": "listBranches",
                "responses": {
                    "200": {
                        "description": "Branches fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Branch"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/branches/{branch_id}": {
            "get": {
                "tags": [
                    "Branches"
                ],
                "summary": "Get a branch by ID",
                "description": "Returns the details of a specific branch.",
                "operationId": "getBranch",
                "parameters": [
                    {
                        "name": "branch_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Branch fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Branch"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/companies": {
            "post": {
                "tags": [
                    "Companies"
                ],
                "summary": "Create a company",
                "description": "Creates a new company for the authenticated organisation.",
                "operationId": "createCompany",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Company"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Company created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Company"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/companies/{company_id}": {
            "get": {
                "tags": [
                    "Companies"
                ],
                "summary": "Get company by ID",
                "operationId": "getCompany",
                "parameters": [
                    {
                        "name": "company_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Company fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Company"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Companies"
                ],
                "summary": "Update company",
                "operationId": "updateCompany",
                "parameters": [
                    {
                        "name": "company_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Company"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Company updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Company"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/companies/{company_id}/addresses": {
            "get": {
                "tags": [
                    "Companies"
                ],
                "summary": "List company addresses",
                "operationId": "listCompanyAddresses",
                "parameters": [
                    {
                        "name": "company_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Addresses fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Address"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/companies/{company_id}/contacts": {
            "get": {
                "tags": [
                    "Companies",
                    "Contacts"
                ],
                "summary": "List company contacts",
                "operationId": "listCompanyContacts",
                "parameters": [
                    {
                        "name": "company_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Contacts fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Contact"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Companies",
                    "Contacts"
                ],
                "summary": "Create company contact",
                "operationId": "createCompanyContact",
                "parameters": [
                    {
                        "name": "company_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Contact"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Contact created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Contact"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/contacts/{contact_id}": {
            "get": {
                "tags": [
                    "Contacts"
                ],
                "summary": "Get a specific contact",
                "description": "Returns a single contact by ID if it belongs to your organisation.",
                "operationId": "getContact",
                "parameters": [
                    {
                        "name": "contact_id",
                        "in": "path",
                        "description": "Contact ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Contact fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Contact"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Contacts"
                ],
                "summary": "Update a contact",
                "description": "Updates a contact's details and status.",
                "operationId": "updateContact",
                "parameters": [
                    {
                        "name": "contact_id",
                        "in": "path",
                        "description": "Contact ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Contact"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Contact updated successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Contact"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "Get invoice by ID",
                "operationId": "getInvoice",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Invoice fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Invoice"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Invoices"
                ],
                "summary": "Update invoice",
                "description": "Updates invoice details and may transition invoice status.",
                "operationId": "updateInvoice",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Invoice"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Invoice updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Invoice"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}/tracked_line_items": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "List tracked line items for an invoice",
                "description": "Returns related tracked line items grouped by type.",
                "operationId": "listInvoiceTrackedLineItems",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tracked line items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "quoteLineItemInvoiceLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/QuoteLineItemInvoiceLineItem"
                                            }
                                        },
                                        "jobItemInvoiceLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/JobItemInvoiceLineItem"
                                            }
                                        },
                                        "loggedExpenseInvoiceLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/LoggedExpenseInvoiceLineItem"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}/pdf": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "Download invoice as PDF",
                "operationId": "getInvoicePdf",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "PDF generated.",
                        "content": {
                            "application/pdf": {}
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}/html": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "Get invoice HTML",
                "operationId": "getInvoiceHtml",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "HTML generated.",
                        "content": {
                            "text/html": {}
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}/invoice_line_items": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "List invoice line items",
                "operationId": "getInvoiceLineItems",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Invoice line items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/InvoiceLineItem"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/invoices/{invoice_id}/invoice_payments": {
            "get": {
                "tags": [
                    "Invoices"
                ],
                "summary": "List invoice payments and payouts",
                "operationId": "getInvoicePayments",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Invoice payments fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/InvoicePayment"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Invoices"
                ],
                "summary": "Create an invoice payment",
                "description": "Creates a payment or payout against the specified invoice.",
                "operationId": "createInvoicePayment",
                "parameters": [
                    {
                        "name": "invoice_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "paymentAccountId",
                        "in": "query",
                        "description": "Payment account ID (required for non-external invoices)",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InvoicePayment"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Invoice payment created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/InvoicePayment"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs": {
            "post": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Create a job",
                "description": "Creates a new job in your organisation.",
                "operationId": "createJob",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Job"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Job"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}": {
            "get": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Get a job",
                "description": "Returns a job by ID.",
                "operationId": "getJob",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "description": "Job ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Job"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Update a job",
                "description": "Updates details for an existing job.",
                "operationId": "updateJob",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Job"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Job"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/activity_entries": {
            "get": {
                "tags": [
                    "Jobs"
                ],
                "summary": "List job activity entries",
                "description": "Lists active activity entries for a job. Optionally filter by type using the activity_entry_type_id query parameter.",
                "operationId": "listJobActivityEntries",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "activity_entry_type_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": [
                                "integer",
                                "null"
                            ],
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Activity entries fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ActivityEntry"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Create a job activity entry (comment)",
                "description": "Creates a comment activity entry for a job.",
                "operationId": "createJobActivityEntry",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "message": {
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Activity entry created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ActivityEntry"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/job_status": {
            "put": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Update a job's status",
                "description": "Updates the status of a job. May trigger validation for active/archived limits.",
                "operationId": "updateJobStatus",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "job_status_id",
                        "in": "query",
                        "description": "New Job Status ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job status updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/duplicate": {
            "post": {
                "tags": [
                    "Jobs"
                ],
                "summary": "Duplicate a job",
                "description": "Duplicates a job with various configurable options.",
                "operationId": "duplicateJob",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "additionalProperties": true
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job duplicated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Job"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/job_phases": {
            "get": {
                "tags": [
                    "Jobs",
                    "Job Phases"
                ],
                "summary": "List job phases",
                "description": "Lists phases for a job in order.",
                "operationId": "listJobPhases",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job phases fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobPhase"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Jobs",
                    "Job Phases"
                ],
                "summary": "Create a job phase",
                "description": "Creates a new phase for a job.",
                "operationId": "createJobPhase",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobPhase"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job phase created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobPhase"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/job_items": {
            "get": {
                "tags": [
                    "Jobs",
                    "Job Items"
                ],
                "summary": "List job items",
                "description": "Lists active job items for a job.",
                "operationId": "listJobItems",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobItem"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Jobs",
                    "Job Items"
                ],
                "summary": "Create a job item",
                "description": "Creates a new job item for a job.",
                "operationId": "createJobItem",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItem"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItem"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/job_items/dependencies": {
            "get": {
                "tags": [
                    "Jobs"
                ],
                "summary": "List job item dependencies",
                "description": "Lists dependencies between job items.",
                "operationId": "listJobItemDependencies",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Dependencies fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobItemDependency"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/jobs/{job_id}/job_milestones": {
            "get": {
                "tags": [
                    "Jobs",
                    "Job Milestones"
                ],
                "summary": "List job milestones",
                "description": "Lists job milestones for a job.",
                "operationId": "listJobMilestones",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job milestones fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobMilestone"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Jobs",
                    "Job Milestones"
                ],
                "summary": "Create a job milestone",
                "description": "Creates a new milestone for a job.",
                "operationId": "createJobMilestone",
                "parameters": [
                    {
                        "name": "job_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobMilestone"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job milestone created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobMilestone"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_items/{job_item_id}": {
            "get": {
                "tags": [
                    "Job Items"
                ],
                "summary": "Get job item by ID",
                "operationId": "getJobItem",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItem"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Items"
                ],
                "summary": "Update job item",
                "operationId": "updateJobItem",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItem"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItem"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_items/{job_item_id}/job_item_roles": {
            "get": {
                "tags": [
                    "Job Items",
                    "Job Item Roles"
                ],
                "summary": "List job item roles",
                "operationId": "listJobItemRoles",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item roles fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobItemRole"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Job Items",
                    "Job Item Roles"
                ],
                "summary": "Create job item role",
                "operationId": "createJobItemRole",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemRole"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item role created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemRole"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_items/{job_item_id}/job_item_sub_items": {
            "get": {
                "tags": [
                    "Job Items",
                    "Job Item Sub Items"
                ],
                "summary": "List job item sub-items",
                "operationId": "listJobItemSubItems",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item sub-items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobItemSubItem"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Job Items",
                    "Job Item Sub Items"
                ],
                "summary": "Create job item sub-item",
                "operationId": "createJobItemSubItem",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemSubItem"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item sub-item created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemSubItem"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_items/{job_item_id}/job_item_users": {
            "get": {
                "tags": [
                    "Job Items",
                    "Job Item Users"
                ],
                "summary": "List job item users",
                "operationId": "listJobItemUsers",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item users fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobItemUser"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Job Items",
                    "Job Item Users"
                ],
                "summary": "Create a job item user",
                "operationId": "createJobItemUser",
                "parameters": [
                    {
                        "name": "job_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemUser"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item user created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemUser"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_item_roles/{job_item_role_id}": {
            "get": {
                "tags": [
                    "Job Item Roles"
                ],
                "summary": "Get job item role by ID",
                "operationId": "getJobItemRole",
                "parameters": [
                    {
                        "name": "job_item_role_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item role fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemRole"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Item Roles"
                ],
                "summary": "Update job item role",
                "operationId": "updateJobItemRole",
                "parameters": [
                    {
                        "name": "job_item_role_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemRole"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item role updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemRole"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_item_sub_items/{job_item_sub_item_id}": {
            "get": {
                "tags": [
                    "Job Item Sub Items"
                ],
                "summary": "Get job item sub item by ID",
                "operationId": "getJobItemSubItem",
                "parameters": [
                    {
                        "name": "job_item_sub_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item sub item fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemSubItem"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Item Sub Items"
                ],
                "summary": "Update job sub item",
                "operationId": "updateJobItemSubItem",
                "parameters": [
                    {
                        "name": "job_item_sub_item_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemSubItem"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item sub item updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemSubItem"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job_item_users/{job_item_user_id}": {
            "get": {
                "tags": [
                    "Job Item Users"
                ],
                "summary": "Get job item user by ID",
                "operationId": "getJobItemUser",
                "parameters": [
                    {
                        "name": "job_item_user_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item user fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemUser"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Item Users"
                ],
                "summary": "Update job item user",
                "operationId": "updateJobItemUser",
                "parameters": [
                    {
                        "name": "job_item_user_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobItemUser"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job item user updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobItemUser"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Job Item Users"
                ],
                "summary": "Delete job item user",
                "operationId": "deleteJobItemUser",
                "parameters": [
                    {
                        "name": "job_item_user_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job item user deleted."
                    }
                }
            }
        },
        "/job_milestones/{job_milestone_id}": {
            "get": {
                "tags": [
                    "Job Milestones"
                ],
                "summary": "Get job milestone by ID",
                "operationId": "getJobMilestone",
                "parameters": [
                    {
                        "name": "job_milestone_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job milestone fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobMilestone"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Milestones"
                ],
                "summary": "Update a job milestone by ID",
                "operationId": "updateJobMilestone",
                "parameters": [
                    {
                        "name": "job_milestone_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobMilestone"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job milestone updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobMilestone"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Job Milestones"
                ],
                "summary": "Delete a job milestone by ID",
                "operationId": "deleteJobMilestone",
                "parameters": [
                    {
                        "name": "job_milestone_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job milestone fetched."
                    }
                }
            }
        },
        "/job_phases/{job_phase_id}": {
            "get": {
                "tags": [
                    "Job Phases"
                ],
                "summary": "Get job phase by ID",
                "operationId": "getJobPhase",
                "parameters": [
                    {
                        "name": "job_phase_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job phase fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobPhase"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Job Phases"
                ],
                "summary": "Update a job phase by ID",
                "operationId": "updateJobPhase",
                "parameters": [
                    {
                        "name": "job_phase_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobPhase"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Job phase updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobPhase"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Job Phases"
                ],
                "summary": "Delete a job phase by ID",
                "description": "Job items and logged expenses in the phase are moved to the replacement phase, or left on the job with no phase when none is given.",
                "operationId": "deleteJobPhase",
                "parameters": [
                    {
                        "name": "job_phase_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "replacement_job_phase_id",
                        "in": "query",
                        "description": "Another phase on the same job to move the job items and logged expenses to. Can't be combined with delete_job_items_and_expenses.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "delete_job_items_and_expenses",
                        "in": "query",
                        "description": "Delete the phase's job items and logged expenses instead of keeping them on the job.",
                        "required": false,
                        "schema": {
                            "type": "boolean",
                            "default": false
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Job phase deleted."
                    }
                }
            }
        },
        "/labels": {
            "get": {
                "tags": [
                    "Labels"
                ],
                "summary": "List labels",
                "description": "Lists master labels for a label type or labels for a specific entity when entity_id is provided.",
                "operationId": "listLabels",
                "parameters": [
                    {
                        "name": "label_type_id",
                        "in": "query",
                        "description": "Label type ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "entity_id",
                        "in": "query",
                        "description": "When provided, returns labels for this entity instead of master labels for the type",
                        "required": false,
                        "schema": {
                            "type": [
                                "integer",
                                "null"
                            ],
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Labels fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "oneOf": [
                                        {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/MasterLabel"
                                            }
                                        },
                                        {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Label"
                                            }
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "Labels"
                ],
                "summary": "Create a label",
                "description": "Creates a new label for an entity. Optionally creates a master label.",
                "operationId": "createLabel",
                "parameters": [
                    {
                        "name": "create_master_label",
                        "in": "query",
                        "description": "If true, also creates a master label",
                        "required": false,
                        "schema": {
                            "type": "boolean",
                            "default": true
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Label"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Label created successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Label"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/labels/search": {
            "post": {
                "tags": [
                    "Labels"
                ],
                "summary": "Bulk fetch labels for multiple entities",
                "description": "Given a mapping of entity class names to arrays of IDs, returns labels for all specified entities.",
                "operationId": "searchLabels",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object"
                            },
                            "example": "{\n                    \"Job\": [101, 102],\n                    \"Quote\": [201],\n                    \"User\": [301, 302]\n                }"
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Labels fetched successfully."
                    }
                }
            }
        },
        "/labels/{label_id}": {
            "delete": {
                "tags": [
                    "Labels"
                ],
                "summary": "Delete a label",
                "description": "Deletes a label by ID.",
                "operationId": "deleteLabel",
                "parameters": [
                    {
                        "name": "label_id",
                        "in": "path",
                        "description": "Label ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Label deleted successfully."
                    }
                }
            }
        },
        "/logged_expenses": {
            "post": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Create a logged expense",
                "description": "Creates a new logged expense against a job.",
                "operationId": "createLoggedExpense",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "loggedExpense": {
                                        "$ref": "#/components/schemas/LoggedExpense"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged expense created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedExpense"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logged_expenses/{logged_expense_id}": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Get logged expense by ID",
                "operationId": "getLoggedExpense",
                "parameters": [
                    {
                        "name": "logged_expense_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Logged expense fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedExpense"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Update logged expense",
                "description": "Updates a logged expense, including status and purchase order details when applicable.",
                "operationId": "updateLoggedExpense",
                "parameters": [
                    {
                        "name": "logged_expense_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoggedExpense"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged expense updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedExpense"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Delete logged expense",
                "description": "Deletes a logged expense, removing it from any quote or invoice line items it is linked to.",
                "operationId": "deleteLoggedExpense",
                "parameters": [
                    {
                        "name": "logged_expense_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Logged expense deleted."
                    }
                }
            }
        },
        "/logged_expenses/{logged_expense_id}/purchase_order": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "Get purchase order for a logged expense",
                "description": "Returns the purchase order details if the logged expense is a purchase order; otherwise returns null.",
                "operationId": "getLoggedExpensePurchaseOrder",
                "parameters": [
                    {
                        "name": "logged_expense_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Purchase order fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PurchaseOrder"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logged_expenses/{logged_expense_id}/purchase_order_line_items": {
            "get": {
                "tags": [
                    "Expenses"
                ],
                "summary": "List purchase order line items for a logged expense",
                "description": "Returns purchase order line items if the logged expense is a purchase order; otherwise returns an empty list.",
                "operationId": "listLoggedExpensePurchaseOrderLineItems",
                "parameters": [
                    {
                        "name": "logged_expense_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Purchase order line items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/PurchaseOrderLineItem"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logged_times": {
            "post": {
                "tags": [
                    "ToDos"
                ],
                "summary": "Create a logged time entry",
                "description": "Creates a new logged time entry.",
                "operationId": "createLoggedTime",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoggedTime"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged time created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedTime"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logged_times/bulk": {
            "post": {
                "tags": [
                    "ToDos"
                ],
                "summary": "Create multiple logged time entries",
                "description": "Creates multiple logged time entries in a single request.",
                "operationId": "createLoggedTimeBulk",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "loggedTimes": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/LoggedTime"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged time entries created.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/LoggedTime"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/logged_times/{logged_time_id}": {
            "get": {
                "tags": [
                    "ToDos"
                ],
                "summary": "Get logged time entry by ID",
                "operationId": "getLoggedTime",
                "parameters": [
                    {
                        "name": "logged_time_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Logged time fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedTime"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "tags": [
                    "ToDos"
                ],
                "summary": "Update logged time entry",
                "operationId": "updateLoggedTime",
                "parameters": [
                    {
                        "name": "logged_time_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoggedTime"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged time updated.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LoggedTime"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "tags": [
                    "ToDos"
                ],
                "summary": "Delete logged time entry",
                "operationId": "deleteLoggedTime",
                "parameters": [
                    {
                        "name": "logged_time_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Logged time deleted.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "additionalProperties": true
                                }
                            }
                        }
                    }
                }
            }
        },
        "/organisation": {
            "get": {
                "tags": [
                    "Organisation"
                ],
                "summary": "Get your organisation's details",
                "description": "Returns the organisation associated with the authenticated request.",
                "operationId": "getOrganisation",
                "responses": {
                    "200": {
                        "description": "Organisation fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Organisation"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/quotes/{quote_id}": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "summary": "Get quote by ID",
                "operationId": "getQuote",
                "parameters": [
                    {
                        "name": "quote_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Quote fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Quote"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/quotes/{quote_id}/tracked_line_items": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "summary": "List tracked line items for a quote. Use this to determine the source of a quote line item, as well as where it was eventually invoiced to.",
                "description": "Returns related tracked line items grouped by type.",
                "operationId": "listQuoteTrackedLineItems",
                "parameters": [
                    {
                        "name": "quote_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tracked line items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "quoteLineItemInvoiceLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/QuoteLineItemInvoiceLineItem"
                                            }
                                        },
                                        "jobItemQuoteLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/JobItemQuoteLineItem"
                                            }
                                        },
                                        "loggedExpenseQuoteLineItems": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/LoggedExpenseQuoteLineItem"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/quotes/{quote_id}/quote_line_items": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "summary": "List quote line items for a quote",
                "operationId": "listQuoteLineItems",
                "parameters": [
                    {
                        "name": "quote_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Quote line items fetched.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/QuoteLineItem"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/quotes/{quote_id}/pdf": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "summary": "Download quote as PDF",
                "operationId": "getQuotePdf",
                "parameters": [
                    {
                        "name": "quote_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "PDF generated.",
                        "content": {
                            "application/pdf": {}
                        }
                    }
                }
            }
        },
        "/quotes/{quote_id}/html": {
            "get": {
                "tags": [
                    "Quotes"
                ],
                "summary": "Get quote HTML",
                "operationId": "getQuoteHtml",
                "parameters": [
                    {
                        "name": "quote_id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "HTML generated.",
                        "content": {
                            "text/html": {}
                        }
                    }
                }
            }
        },
        "/rate_cards": {
            "get": {
                "tags": [
                    "Rate Cards"
                ],
                "summary": "List your organisation's rate cards",
                "description": "Returns all rate cards associated with your organisation.",
                "operationId": "listRateCards",
                "responses": {
                    "200": {
                        "description": "Rate cards fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/RateCard"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/rate_cards/{rate_card_id}": {
            "get": {
                "tags": [
                    "Rate Cards"
                ],
                "summary": "Get a specific rate card",
                "description": "Returns a single rate card by ID.",
                "operationId": "getRateCard",
                "parameters": [
                    {
                        "name": "rate_card_id",
                        "in": "path",
                        "description": "Rate card ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Rate card fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RateCard"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/roles": {
            "get": {
                "tags": [
                    "Roles"
                ],
                "summary": "List your organisation's roles",
                "description": "Returns all roles associated with your organisation.",
                "operationId": "listRoles",
                "parameters": [
                    {
                        "name": "include_archived",
                        "in": "query",
                        "description": "Whether to include archived roles in the result. Defaults to false.",
                        "required": false,
                        "schema": {
                            "type": "boolean",
                            "default": false
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Roles fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Role"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/roles/{role_id}": {
            "get": {
                "tags": [
                    "Roles"
                ],
                "summary": "Get a specific role",
                "description": "Returns a single role by ID if they belong to your organisation.",
                "operationId": "getRole",
                "parameters": [
                    {
                        "name": "role_id",
                        "in": "path",
                        "description": "Role ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Role"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/users": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "List your organisation's users",
                "description": "Returns all users associated with your organisation.",
                "operationId": "listUsers",
                "responses": {
                    "200": {
                        "description": "Users fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/User"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/users/{user_id}": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "Get a specific user",
                "description": "Returns a single user by ID if they belong to your organisation.",
                "operationId": "getUser",
                "parameters": [
                    {
                        "name": "user_id",
                        "in": "path",
                        "description": "User ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "User fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/User"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/users/{user_id}/saved_segments": {
            "get": {
                "tags": [
                    "Users"
                ],
                "summary": "List saved segments for a user",
                "description": "Returns saved segments visible to the specified user.",
                "operationId": "listUserSavedSegments",
                "parameters": [
                    {
                        "name": "user_id",
                        "in": "path",
                        "description": "User ID",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "format": "int64"
                        }
                    },
                    {
                        "name": "saved_segment_type_ids",
                        "in": "query",
                        "description": "Filter by saved segment type IDs. Provide as a JSON array in the query string.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer",
                                "format": "int64"
                            }
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Saved segments fetched successfully.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/SavedSegment"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/search": {
            "post": {
                "tags": [
                    "Search"
                ],
                "summary": "This route will search for individual records that match the given query. If you want to summarise records, use the report endpoint instead.",
                "description": "Returns a paginated array of records that match the given search criteria. You need the information from getSearchSetup to construct a search request accurately, so ensure you have it before calling this route. getSearchSetup results are stable for the duration of a session (they only change when a new product release ships), so fetch it once and reuse it for subsequent searches rather than re-fetching before every call.",
                "operationId": "searchRecords",
                "parameters": [
                    {
                        "name": "search_view",
                        "in": "query",
                        "description": "What do you want to search for?",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/SearchView"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "query"
                                ],
                                "properties": {
                                    "limit": {
                                        "description": "Number of records returned in this page. Defaults to 1000 if not provided, which is also the maximum allowed - requesting more will return an error. Use offset to paginate through larger result sets, and prefer the report endpoint when you only need aggregated totals rather than individual records.",
                                        "type": "integer",
                                        "example": 30,
                                        "maximum": 1000,
                                        "minimum": 0
                                    },
                                    "offset": {
                                        "description": "Offset of the first record in this page",
                                        "type": "integer",
                                        "example": 0,
                                        "minimum": 0
                                    },
                                    "query": {
                                        "description": "\n                            A formatted string that forms the basis of the filters to apply. \n                            You should use the selector for the relevant filter provided when running the setup route.\n                            Join multiple filters with AND or OR operators, and use parentheses to group filters.\n                            Available operators for filters are: =, !=, >, >=, <, <=, CONTAINS, NOT CONTAINS, IN, NOT IN.\n                            When passing an array of values, you can use the IN, NOT IN, CONTAINS or NOT CONTAINS operators and send values in a comma separated string surrounded by square brackets. Eg job_item_name contains [\"Pitch\", \"account management\"]\n                            \n                            Some sample filters are:\n                            job_status = \"complete\" and (job_name contains \"Project Management\" or job_item_estimated_start_date > \"2025-01-01\")\n                            (job_status = \"paused\" or job_status = \"in play\") and (job_name = \"project management\" or job_name = \"account management\")\n                            job_status in [\"paused\", \"in play\"] and billable = \"true\"\n                            job_item_name not contains [\"Pitch\", \"account management\"]\n                            ",
                                        "type": "string",
                                        "example": "job_status = 'In Play' AND job_start_date >= '2023-01-01' AND job_start_date <= '2023-12-31' AND (job_total_planned_time_ex_tax > 0 or job_name contains 'account management')"
                                    },
                                    "sortColumn": {
                                        "description": "\n                            Which column to sort the results by.\n                            Values should be selected from the sortColumns array returned by the setup route\n                            If not provided, the default sort column will be used.\n                            ",
                                        "type": "string",
                                        "example": "job_name"
                                    },
                                    "sortAscending": {
                                        "description": "Sort direction for sortColumn. Defaults to true (ascending).",
                                        "type": "boolean",
                                        "example": true
                                    },
                                    "additionalData": {
                                        "description": "\n                            When performing a search, you can request additional related data to the record itself. \n                            For instance, if you're searching for jobs but also want information about the company, you can pass 'company' as an additional data option to get the company details for each job in the search results.\n                            Values should be selected from the additionalData array returned by the setup route\n                            ",
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        },
                                        "example": [
                                            "company",
                                            "contact"
                                        ]
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "A paginated array of records matching the search criteria. The shape of each record depends on the search_view you queried (for example a jobs search returns job records, a companies search returns company records). The available fields for a given view are the same selectors returned by getSearchSetup for that view, plus any additionalData objects you requested.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "x-mcp-destructive": false
            }
        },
        "/search/setup": {
            "get": {
                "tags": [
                    "Search"
                ],
                "summary": "Get the configuration details required to construct a search request accurately",
                "description": "This route gives you the required background information in order to perform a search.",
                "operationId": "getSearchSetup",
                "parameters": [
                    {
                        "name": "search_view",
                        "in": "query",
                        "description": "Get the specific details of what filters and data is available for a given search.",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/SearchView"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Details about what options are available when performing your search",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "filters": {
                                            "description": "A list of filters to choose from with details about each type",
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "selector": {
                                                        "description": "The name to be used when constructing a search",
                                                        "type": "string",
                                                        "example": "job_start_date"
                                                    },
                                                    "name": {
                                                        "type": "string",
                                                        "example": "Job Start Date"
                                                    },
                                                    "description": {
                                                        "type": "string",
                                                        "example": "The date the job started"
                                                    },
                                                    "filterType": {
                                                        "type": "string",
                                                        "example": "Date"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        },
                                        "additionalData": {
                                            "description": "When performing a search, you can request additional related data to the record itself. This is a  list of the available options to pass when performing a search. \n                            For instance, if you're searching for jobs but also want information about the company, you can pass 'company' as an additional data option to get the company details for each job in the search results.",
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "sortColumns": {
                                            "description": "The list of columns that you can sort the results by when executing a search.",
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/report/setup": {
            "get": {
                "tags": [
                    "Search"
                ],
                "summary": "Get the configuration details required to construct a report request accurately",
                "description": "This route gives you the required background information in order to perform a report.",
                "operationId": "getReportSetup",
                "parameters": [
                    {
                        "name": "search_view",
                        "in": "query",
                        "description": "Get the specific details of what filters and data is available for a given report.",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/ReportView"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Details about what options are available when performing your search",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "groupingOptions": {
                                            "description": "What dimension do you want your data grouped by",
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "example": [
                                                "company_id",
                                                "job_status"
                                            ]
                                        },
                                        "statistics": {
                                            "description": "The list of columns that can be used to summarise your data.",
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            },
                                            "example": [
                                                "job_total_planned_time_ex_tax",
                                                "job_total_actual_time_ex_tax"
                                            ]
                                        },
                                        "filters": {
                                            "description": "A list of filters to choose from with details about each type",
                                            "type": "array",
                                            "items": {
                                                "properties": {
                                                    "selector": {
                                                        "description": "The name to be used when constructing a search",
                                                        "type": "string",
                                                        "example": "job_start_date"
                                                    },
                                                    "name": {
                                                        "type": "string",
                                                        "example": "Job Start Date"
                                                    },
                                                    "description": {
                                                        "type": "string",
                                                        "example": "The date the job started"
                                                    },
                                                    "filterType": {
                                                        "type": "string",
                                                        "example": "Date"
                                                    }
                                                },
                                                "type": "object"
                                            }
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/report": {
            "post": {
                "tags": [
                    "Search"
                ],
                "summary": "Use this route to retrieve aggregated or summarised values for a given search view (eg jobs, quotes).",
                "description": "You need the information from getReportSetup to construct a report request accurately, so ensure you have it before calling this route. getReportSetup results are stable for the duration of a session (they only change when a new product release ships), so fetch it once and reuse it for subsequent reports rather than re-fetching before every call.\n        Use cases for this route might be:\n        How many jobs are there in the system?\n        What's the total and average value of all my invoices that were issued last month?\n        Give me a monthly breakdown of the total time spent on all my jobs.",
                "operationId": "report",
                "parameters": [
                    {
                        "name": "search_view",
                        "in": "query",
                        "description": "The data you are reporting on.",
                        "schema": {
                            "$ref": "#/components/schemas/ReportView"
                        },
                        "example": "jobs"
                    },
                    {
                        "name": "time_breakdown",
                        "in": "query",
                        "description": "If true, returns results split into time based breakdowns based on the report's start and end dates (eg daily, weekly, monthly breakdowns).\n                The duration of the breakdowns is automatically calculated based on the total duration of the search, eg short searches will get daily breakdowns, and longer searches will get monthly.\n                If false, it will just return the totals for the entire time period.",
                        "required": false,
                        "schema": {
                            "type": "boolean",
                            "default": false
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "statistics"
                                ],
                                "properties": {
                                    "startDate": {
                                        "description": "Optional. The start date for the report, in YYYY-MM-DD format. If you provide a date range you must also provide dateField so the report knows which date column the range applies to. Omit the dates entirely to report across all time.",
                                        "type": "string",
                                        "format": "date",
                                        "example": "2025-01-01"
                                    },
                                    "endDate": {
                                        "description": "Optional. The end date for the report, in YYYY-MM-DD format. See startDate.",
                                        "type": "string",
                                        "format": "date",
                                        "example": "2025-12-31"
                                    },
                                    "groupBy": {
                                        "description": "Optional. The column used to group the results, chosen from the groupingOptions returned by getReportSetup.\n                        OMIT this for a single grand total - e.g. for 'how many jobs do I have?' send no groupBy and you get just the totals (one number), not a row per job.\n                        When you DO want a breakdown, pick a dimension with relatively few distinct values, such as job_status (returns a handful of rows like In Play / Complete / Paused, each with its count).\n                        Avoid grouping a view by its own per-record identifier - it produces one row per record (potentially thousands) and is equivalent to just listing them. For example don't group jobs by job_id, or quotes by quote_id. Grouping by the id of a RELATED entity is fine and useful (e.g. grouping quotes by job_id to see quotes-per-job, or jobs by company_id to see jobs-per-company).\n                        Either way the response includes a 'totals' object with the grand total across all groups.",
                                        "type": "string",
                                        "example": "job_status"
                                    },
                                    "dateField": {
                                        "description": "The date column that startDate/endDate apply to (eg job_start_date to report on jobs starting within the range). Must be one of the dateFieldOptions from getReportSetup. Required when startDate or endDate is provided; omit it when you aren't filtering by a date range.",
                                        "type": "string",
                                        "example": "job_start_date"
                                    },
                                    "statistics": {
                                        "description": "The statistics to calculate for each group.",
                                        "type": "array",
                                        "items": {
                                            "properties": {
                                                "mode": {
                                                    "description": "The aggregation mode to apply to the selected column.",
                                                    "type": "string",
                                                    "example": "sum",
                                                    "enum": [
                                                        "count",
                                                        "sum",
                                                        "average",
                                                        "min",
                                                        "max",
                                                        "standard_deviation"
                                                    ]
                                                },
                                                "column": {
                                                    "description": "The column the aggregation mode is applied to. Refer to getReportSetup for the list of options. Only required to be passed if the mode is not count",
                                                    "type": "string",
                                                    "example": "job_total_planned_time_ex_tax"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "query": {
                                        "description": "The search query used to filter the records included in the report.",
                                        "type": "string",
                                        "example": "job_status = 'In Play' AND job_start_date >= '2023-01-01' AND job_start_date <= '2023-12-31' AND (job_total_planned_time_ex_tax > 0 or job_name contains 'account management')"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Search has been performed successfully."
                    }
                },
                "x-mcp-destructive": false
            }
        }
    },
    "components": {
        "schemas": {
            "ActivityEntry": {
                "title": "Activity Entry",
                "description": "Represents an activity entry on a parent entity (e.g. a job or a thread).",
                "properties": {
                    "id": {
                        "description": "Activity entry ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true
                    },
                    "activityEntryType": {
                        "$ref": "#/components/schemas/ActivityEntryType"
                    },
                    "createdUserId": {
                        "description": "User ID of the creator",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true
                    },
                    "createdDatetime": {
                        "description": "Creation timestamp",
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true
                    },
                    "lastModifiedDatetime": {
                        "description": "Last modification timestamp",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "readOnly": true
                    },
                    "lastModifiedByUserId": {
                        "description": "User ID of the last modifier",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true
                    },
                    "activityEntryParentType": {
                        "$ref": "#/components/schemas/ActivityEntryParentType"
                    },
                    "parentEntityId": {
                        "description": "ID of the parent entity this activity entry belongs to",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true
                    },
                    "entityId": {
                        "description": "Associated entity ID, if applicable",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true
                    },
                    "threadActivityEntryCount": {
                        "description": "Number of entries in the thread",
                        "type": "integer",
                        "readOnly": true
                    },
                    "metaData": {
                        "description": "Additional metadata (JSON string)",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Address": {
                "title": "Address",
                "description": "Address details",
                "properties": {
                    "id": {
                        "description": "Address ID",
                        "type": "integer",
                        "readOnly": true,
                        "example": 123
                    },
                    "companyId": {
                        "description": "Company ID",
                        "type": "integer",
                        "readOnly": true,
                        "example": 123
                    },
                    "line1": {
                        "description": "Address line 1",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "123 High St"
                    },
                    "line2": {
                        "description": "Address line 2",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Suite 5"
                    },
                    "line3": {
                        "description": "Address line 3",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Building B"
                    },
                    "city": {
                        "description": "City",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Auckland"
                    },
                    "region": {
                        "description": "Region/State/Province",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Auckland"
                    },
                    "countryName": {
                        "description": "Country name",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "New Zealand"
                    },
                    "postCode": {
                        "description": "Postal/ZIP code",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "1010"
                    }
                },
                "type": "object"
            },
            "Branch": {
                "title": "Branch",
                "description": "Organisation branch details, which are the external facing details of your company",
                "properties": {
                    "id": {
                        "description": "Branch ID",
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "description": "Branch name",
                        "type": "string",
                        "readOnly": true,
                        "example": "Head Office"
                    },
                    "externalName": {
                        "description": "External display name",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "Acme HQ"
                    },
                    "taxNumber": {
                        "description": "Branch tax number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "NZ123-456-789"
                    },
                    "address": {
                        "description": "Formatted branch address",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "123 High St, Auckland 1010, New Zealand"
                    },
                    "active": {
                        "description": "Is the branch active",
                        "type": "boolean",
                        "readOnly": true,
                        "example": true
                    }
                },
                "type": "object"
            },
            "Company": {
                "title": "Company",
                "description": "A company that you work with, either as a supplier or a client.",
                "properties": {
                    "id": {
                        "description": "Company ID",
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "description": "Company name",
                        "type": "string",
                        "example": "Acme Corporation"
                    },
                    "branchId": {
                        "description": "Branch ID the company belongs to",
                        "type": "integer",
                        "readOnly": true
                    },
                    "companyLeadUserId": {
                        "description": "Lead user ID for this company",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true
                    },
                    "companyStatus": {
                        "$ref": "#/components/schemas/CompanyStatus"
                    },
                    "branchName": {
                        "description": "Branch name",
                        "type": "string",
                        "readOnly": true,
                        "example": "Head Office"
                    },
                    "rateCardId": {
                        "description": "Rate card ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 7
                    },
                    "taxNumber": {
                        "description": "Tax/GST/VAT number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "NZ123-456-789"
                    },
                    "phone1": {
                        "description": "Primary phone number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "+64 9 123 4567"
                    },
                    "phone2": {
                        "description": "Secondary phone number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "+64 21 987 654"
                    },
                    "websiteAddress": {
                        "description": "Website URL",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "https://www.acme.co"
                    },
                    "notes": {
                        "description": "Notes about the company",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "Preferred client"
                    }
                },
                "type": "object"
            },
            "Contact": {
                "title": "Contact",
                "description": "Contact details",
                "properties": {
                    "id": {
                        "description": "Contact ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 501
                    },
                    "firstName": {
                        "description": "First name",
                        "type": "string",
                        "example": "Jane"
                    },
                    "lastName": {
                        "description": "Last name",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Doe"
                    },
                    "email": {
                        "description": "Email address",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "email",
                        "example": "jane.doe@example.com"
                    },
                    "phoneNumber": {
                        "description": "Phone number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "+64 21 123 4567"
                    },
                    "position": {
                        "description": "Position / Job title",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Project Manager"
                    },
                    "notes": {
                        "description": "Notes",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "Prefers email contact"
                    },
                    "active": {
                        "description": "Is contact active",
                        "type": "boolean",
                        "readOnly": true,
                        "example": true
                    },
                    "companyId": {
                        "description": "Company ID this contact belongs to",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 2001
                    },
                    "contactStatus": {
                        "$ref": "#/components/schemas/ContactStatus"
                    }
                },
                "type": "object"
            },
            "Invoice": {
                "title": "Invoice",
                "description": "Invoice details and totals",
                "properties": {
                    "id": {
                        "description": "Invoice ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true
                    },
                    "createdUserId": {
                        "description": "Created by (display name)",
                        "type": "integer",
                        "readOnly": true,
                        "example": "123"
                    },
                    "sentByUserId": {
                        "description": "Who the invoice was sent by",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "123"
                    },
                    "sentDate": {
                        "description": "Date the invoice was sent",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-01-15"
                    },
                    "jobId": {
                        "description": "Job ID that this invoice relates to",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 1201
                    },
                    "name": {
                        "description": "Invoice name/title",
                        "type": "string",
                        "example": "January 2025 Retainer"
                    },
                    "number": {
                        "description": "Invoice number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "INV-2025-001"
                    },
                    "reference": {
                        "description": "Reference shown on the invoice",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "PO-987654"
                    },
                    "invoiceType": {
                        "$ref": "#/components/schemas/InvoiceType"
                    },
                    "invoiceStatus": {
                        "$ref": "#/components/schemas/InvoiceStatus"
                    },
                    "currencyCode": {
                        "description": "Currency code (ISO 4217)",
                        "type": "string",
                        "readOnly": true,
                        "example": "USD"
                    },
                    "exchangeRate": {
                        "description": "Exchange rate used for this invoice",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 1
                    },
                    "discount": {
                        "description": "Discount percentage applied",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 10
                    },
                    "instalment": {
                        "description": "Instalment percentage (if invoiced by instalments)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 50
                    },
                    "invoiceCurrencyAmountPaidIncTax": {
                        "description": "Amount paid including tax (invoice currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 1250
                    },
                    "invoiceCurrencyTotalAmountExTax": {
                        "description": "Total amount excluding tax (invoice currency)",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 2500
                    },
                    "invoiceCurrencyTotalAmountTax": {
                        "description": "Total tax amount (invoice currency)",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 375
                    },
                    "invoiceCurrencyTotalAmountIncTax": {
                        "description": "Total amount including tax (invoice currency)",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 2875
                    },
                    "invoiceCurrencyBalance": {
                        "description": "Balance remaining (invoice currency)",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 1625
                    },
                    "createdDatetime": {
                        "description": "Created timestamp",
                        "type": "string",
                        "format": "date-time",
                        "readOnly": true,
                        "example": "2025-01-10 09:30:00"
                    },
                    "invoiceDate": {
                        "description": "Invoice date",
                        "type": "string",
                        "format": "date",
                        "example": "2025-01-10"
                    },
                    "dueDate": {
                        "description": "Due date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-01-31"
                    },
                    "paidDate": {
                        "description": "Paid date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-01-20"
                    },
                    "externalAccountingPlatformId": {
                        "description": "External accounting platform ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 3
                    },
                    "externalInvoiceId": {
                        "description": "External invoice ID",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "INV-EXT-12345"
                    }
                },
                "type": "object"
            },
            "InvoiceLineItem": {
                "title": "Invoice Line Item",
                "description": "A line item that appears on an invoice",
                "properties": {
                    "id": {
                        "description": "Line Item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "active": {
                        "description": "Has the line item been deleted",
                        "type": "boolean",
                        "readOnly": true,
                        "example": false
                    },
                    "name": {
                        "description": "Line item name",
                        "type": "string",
                        "example": "UI Design"
                    },
                    "description": {
                        "description": "Line item description",
                        "type": "string",
                        "example": "Design the initial user interface"
                    },
                    "accountCode": {
                        "description": "The account code used for accounting packages",
                        "type": "string",
                        "example": "B201"
                    },
                    "quantity": {
                        "description": "Quantity of the line item",
                        "type": "string",
                        "example": "1 day"
                    },
                    "unitRate": {
                        "description": "Price per unit",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "totalAmountExTax": {
                        "description": "Total for the line item (quantity x unit rate)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "orderId": {
                        "description": "Order of the line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 2
                    },
                    "taxName": {
                        "description": "Name of the tax rate being used",
                        "type": "string",
                        "example": "GST"
                    },
                    "taxRate": {
                        "description": "Tax rate applied to this line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 10
                    },
                    "externalTaxRateId": {
                        "description": "The ID of the tax rate from an external accounts package",
                        "type": "string",
                        "readOnly": true,
                        "example": "e7e05972-ab2c-4294-a887-d98c525af7d3"
                    },
                    "invoiceId": {
                        "description": "The ID of the invoice this line item belongs to",
                        "type": "integer",
                        "format": "int64",
                        "example": 3456
                    }
                },
                "type": "object"
            },
            "InvoicePayment": {
                "title": "Invoice Payment",
                "description": "A payment that has been applied to an invoice",
                "properties": {
                    "id": {
                        "description": "Payment ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 555
                    },
                    "paymentDate": {
                        "description": "Date the payment was made",
                        "type": "string",
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-01-02"
                    },
                    "notes": {
                        "description": "Notes for the payment",
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "Ref #1255"
                    },
                    "amountPaidIncTax": {
                        "description": "Payment amount inclusive of any taxes",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 22000
                    },
                    "invoiceId": {
                        "description": "The ID of the invoice this payment belongs to",
                        "type": "integer",
                        "format": "int64",
                        "example": 3456
                    }
                },
                "type": "object"
            },
            "ItemPricingMethod": {
                "title": "Item Pricing Method",
                "description": "Item Pricing Method for an item.",
                "properties": {
                    "id": {
                        "description": "Item Pricing Method ID (1=Unit Price, 2=Markup, 3=Fixed Price)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Job": {
                "title": "Job",
                "description": "Job details and financial summaries",
                "properties": {
                    "id": {
                        "description": "Job ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 601
                    },
                    "companyId": {
                        "description": "The ID of the company this job belongs to",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 601
                    },
                    "jobGroupId": {
                        "description": "The ID of the job group this job belongs to",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 601
                    },
                    "jobLeadUserId": {
                        "description": "Job lead user ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "example": 42
                    },
                    "rateCardId": {
                        "description": "The id of the rate card used for this job",
                        "type": "integer"
                    },
                    "isBillable": {
                        "description": "Is the job billable",
                        "type": "boolean",
                        "readOnly": true,
                        "example": true
                    },
                    "exchangeRate": {
                        "description": "Exchange rate applied to this job",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 1
                    },
                    "branchId": {
                        "description": "The id of the branch this job belongs to",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "jobStatus": {
                        "$ref": "#/components/schemas/JobStatus"
                    },
                    "number": {
                        "description": "Job number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "JOB-2025-010"
                    },
                    "name": {
                        "description": "Job name",
                        "type": "string",
                        "example": "Website Redesign"
                    },
                    "fullName": {
                        "description": "Full job name",
                        "type": "string",
                        "readOnly": true,
                        "example": "ACME - Website Redesign"
                    },
                    "purchaseOrderNumber": {
                        "description": "Client purchase order number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "PO-12345"
                    },
                    "createdUserId": {
                        "description": "ID of the User who created the job",
                        "type": "integer",
                        "readOnly": true
                    },
                    "jobCreatedDatetime": {
                        "description": "Job created date",
                        "type": "string",
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-01-02"
                    },
                    "estimatedStartDate": {
                        "description": "Estimated start date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-01-10"
                    },
                    "estimatedEndDate": {
                        "description": "Estimated end date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-02-28"
                    },
                    "completedDatetime": {
                        "description": "Completed date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-03-15"
                    },
                    "archivedDatetime": {
                        "description": "Archived date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-06-01"
                    },
                    "contactId": {
                        "description": "The id of the contact this job is being done for",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "jobCurrencyBudget": {
                        "description": "Budget (Job Currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 22000
                    },
                    "finalBudget": {
                        "description": "Final budget (approved quote total if available)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 22000
                    },
                    "jobCurrencyFinalBudget": {
                        "description": "Final budget (Job Currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 22000
                    },
                    "totalPlannedMinutes": {
                        "description": "Total planned minutes",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 480
                    },
                    "totalPlannedTimeExTax": {
                        "description": "Total planned time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 7500
                    },
                    "totalPlannedExpensesExTax": {
                        "description": "Total planned expenses ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 1200
                    },
                    "totalPlannedExpensesCostExTax": {
                        "description": "Total planned expenses cost ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 900
                    },
                    "totalIncompleteMinutes": {
                        "description": "Total incomplete minutes",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 240
                    },
                    "totalIncompleteTimeExTax": {
                        "description": "Total incomplete time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 3200
                    },
                    "totalLoggedCostExTax": {
                        "description": "Total logged cost ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 5400
                    },
                    "totalLoggedExTax": {
                        "description": "Total logged amount ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 8600
                    },
                    "totalLoggedExpensesCostExTax": {
                        "description": "Total logged expenses cost ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 750
                    },
                    "totalLoggedExpensesExTax": {
                        "description": "Total logged expenses ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 980
                    },
                    "totalLoggedMinutes": {
                        "description": "Total logged minutes",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 1260
                    },
                    "totalLoggedTimeCostExTax": {
                        "description": "Total logged time cost ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 4200
                    },
                    "totalLoggedTimeExTax": {
                        "description": "Total logged time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 6800
                    },
                    "totalInvoicedExTax": {
                        "description": "Total invoiced ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 10000
                    },
                    "totalDraftInvoicesExTax": {
                        "description": "Total draft invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 1500
                    },
                    "totalAwaitingPaymentInvoicesExTax": {
                        "description": "Total awaiting payment invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 2500
                    },
                    "totalPaidInvoicesExTax": {
                        "description": "Total paid invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 6000
                    },
                    "totalIssuedInvoicesExTax": {
                        "description": "Total issued invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 8000
                    },
                    "totalApprovedQuoteExTax": {
                        "description": "Total approved quote ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 22000
                    }
                },
                "type": "object"
            },
            "JobGroup": {
                "title": "Job Group",
                "description": "Job Group details and financial summaries",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/JobGroupStatistics"
                    },
                    {
                        "properties": {
                            "id": {
                                "description": "Job Group ID",
                                "type": "integer",
                                "format": "int64",
                                "readOnly": true,
                                "example": 601
                            },
                            "companyId": {
                                "description": "The ID of the company this job Group belongs to",
                                "type": "integer",
                                "format": "int64",
                                "readOnly": true,
                                "example": 601
                            },
                            "jobGroupLeadUserId": {
                                "description": "Job Group lead user ID",
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "format": "int64",
                                "example": 42
                            },
                            "exchangeRate": {
                                "description": "Exchange rate applied to this Job Group",
                                "type": "number",
                                "format": "float",
                                "readOnly": true,
                                "example": 1
                            },
                            "branchId": {
                                "description": "The id of the branch this Job Group belongs to",
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "currency": {
                                "$ref": "#/components/schemas/Currency"
                            },
                            "jobGroupStatus": {
                                "$ref": "#/components/schemas/JobGroupStatus"
                            },
                            "number": {
                                "description": "Job Group number",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "example": "JOBGROUP-2025-010"
                            },
                            "name": {
                                "description": "Job Group name",
                                "type": "string",
                                "example": "Website Redesign"
                            },
                            "jobGroupCreatedDatetime": {
                                "description": "JobGroup created date",
                                "type": "string",
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-01-02"
                            },
                            "startDate": {
                                "description": "Estimated start date",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-01-10"
                            },
                            "endDate": {
                                "description": "Estimated end date",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-02-28"
                            },
                            "completedDatetime": {
                                "description": "Completed date",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-03-15"
                            },
                            "contactId": {
                                "description": "The id of the contact this jobGroup is being done for",
                                "type": [
                                    "integer",
                                    "null"
                                ]
                            },
                            "jobGroupPeriodInterval": {
                                "oneOf": [
                                    {
                                        "$ref": "#/components/schemas/JobGroupPeriodInterval"
                                    },
                                    {
                                        "type": "null"
                                    }
                                ]
                            },
                            "totalJobGroupPeriodIntervals": {
                                "description": "Total number of job group period intervals",
                                "type": "integer",
                                "format": "int32",
                                "readOnly": true,
                                "example": 12
                            },
                            "includeNonBillable": {
                                "description": "Whether non-billable time is included",
                                "type": "boolean",
                                "readOnly": true,
                                "example": true
                            },
                            "includeExpenses": {
                                "description": "Whether expenses are included",
                                "type": "boolean",
                                "readOnly": true,
                                "example": true
                            },
                            "includePlannedTime": {
                                "description": "Whether planned time is included",
                                "type": "boolean",
                                "readOnly": true,
                                "example": false
                            },
                            "jobGroupCurrencyTotalSellExTaxTarget": {
                                "description": "Target total sell (ex tax) in the Job Group currency",
                                "type": "number",
                                "format": "float",
                                "readOnly": true,
                                "example": 12500
                            },
                            "jobGroupCurrencyTotalCostExTaxTarget": {
                                "description": "Target total cost (ex tax) in the Job Group currency",
                                "type": "number",
                                "format": "float",
                                "readOnly": true,
                                "example": 8300
                            },
                            "totalMinutesTarget": {
                                "description": "Target total minutes",
                                "type": "integer",
                                "format": "int32",
                                "readOnly": true,
                                "example": 480
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "JobGroupPeriod": {
                "title": "Job Group Period",
                "description": "Job Group period details and financial summaries",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/JobGroupStatistics"
                    },
                    {
                        "properties": {
                            "id": {
                                "description": "Job Group Period ID",
                                "type": "integer",
                                "format": "int64",
                                "readOnly": true,
                                "example": 601
                            },
                            "jobGroupId": {
                                "description": "The ID of the Job Group this Period belongs to",
                                "type": "integer",
                                "format": "int64",
                                "readOnly": true,
                                "example": 601
                            },
                            "startDate": {
                                "description": "Estimated start date",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-01-10"
                            },
                            "endDate": {
                                "description": "Estimated end date",
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date",
                                "readOnly": true,
                                "example": "2025-02-28"
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "JobGroupStatistics": {
                "title": "JobGroupStatistics",
                "description": "Job Group statistics and targets",
                "properties": {
                    "jobGroupCurrencyTotalSellExTax": {
                        "description": "Total sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 15234.5
                    },
                    "jobGroupCurrencyTotalCostExTax": {
                        "description": "Total cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 10200
                    },
                    "totalMinutes": {
                        "description": "Total minutes (planned + incomplete + logged)",
                        "type": "integer",
                        "format": "int32",
                        "readOnly": true,
                        "example": 1320
                    },
                    "plannedMinutes": {
                        "description": "Planned minutes",
                        "type": "integer",
                        "format": "int32",
                        "readOnly": true,
                        "example": 600
                    },
                    "jobGroupCurrencyPlannedTimeSellExTax": {
                        "description": "Planned time sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 5000
                    },
                    "jobGroupCurrencyPlannedTimeCostExTax": {
                        "description": "Planned time cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 3200
                    },
                    "incompleteMinutes": {
                        "description": "Incomplete minutes",
                        "type": "integer",
                        "format": "int32",
                        "readOnly": true,
                        "example": 120
                    },
                    "jobGroupCurrencyIncompleteTimeSellExTax": {
                        "description": "Incomplete time sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 900
                    },
                    "jobGroupCurrencyIncompleteTimeCostExTax": {
                        "description": "Incomplete time cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 650
                    },
                    "loggedMinutes": {
                        "description": "Logged minutes",
                        "type": "integer",
                        "format": "int32",
                        "readOnly": true,
                        "example": 600
                    },
                    "jobGroupCurrencyLoggedTimeSellExTax": {
                        "description": "Logged time sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 7000
                    },
                    "jobGroupCurrencyLoggedTimeCostExTax": {
                        "description": "Logged time cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 5200
                    },
                    "jobGroupCurrencyPlannedExpensesSellExTax": {
                        "description": "Planned expenses sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 300
                    },
                    "jobGroupCurrencyPlannedExpensesCostExTax": {
                        "description": "Planned expenses cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 200
                    },
                    "jobGroupCurrencyLoggedExpensesSellExTax": {
                        "description": "Logged expenses sell (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 150
                    },
                    "jobGroupCurrencyLoggedExpensesCostExTax": {
                        "description": "Logged expenses cost (ex tax) in the Job Group currency",
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 100
                    }
                },
                "type": "object"
            },
            "JobItem": {
                "title": "Job Item",
                "description": "A job item within a job",
                "properties": {
                    "id": {
                        "description": "Job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "jobId": {
                        "description": "Parent job ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 601
                    },
                    "jobPhaseId": {
                        "description": "Job phase ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "example": 3
                    },
                    "jobItemStatus": {
                        "$ref": "#/components/schemas/JobItemStatus"
                    },
                    "name": {
                        "description": "Job item name",
                        "type": "string",
                        "example": "UI Design"
                    },
                    "description": {
                        "description": "Job item description",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Wireframes and high-fidelity mockups"
                    },
                    "sellRate": {
                        "description": "Explicit sell rate in job currency (if provided)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "costingMethod": {
                        "$ref": "#/components/schemas/CostingMethod"
                    },
                    "isBillable": {
                        "description": "Is this job item billable",
                        "type": "boolean",
                        "example": true
                    },
                    "totalScheduledUsers": {
                        "description": "Total scheduled users for the item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 2
                    },
                    "totalJobItemRoles": {
                        "description": "Total job item roles",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 1
                    },
                    "timeAllocationMethod": {
                        "$ref": "#/components/schemas/TimeAllocationMethod"
                    },
                    "totalPlannedMinutes": {
                        "description": "Total planned minutes for the item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "example": 240
                    },
                    "totalIncompleteMinutes": {
                        "description": "Total incomplete minutes for the item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 120
                    },
                    "totalLoggedMinutes": {
                        "description": "Total logged minutes for the item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 180
                    },
                    "jobCurrencySellRate": {
                        "description": "Sell rate in job currency (per hour)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 150
                    },
                    "jobCurrencyTotalIncompleteTimeExTax": {
                        "description": "Total incomplete time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 300
                    },
                    "jobCurrencyTotalPlannedTimeExTax": {
                        "description": "Total planned time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 900
                    },
                    "jobCurrencyTotalLoggedTimeExTax": {
                        "description": "Total logged time ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 720
                    },
                    "jobCurrencyTotalLoggedTimeCostExTax": {
                        "description": "Total logged time cost ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 480
                    },
                    "jobCurrencyTotalAmountInvoicedExTax": {
                        "description": "Total amount invoiced ex tax for this job item (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 500
                    },
                    "jobCurrencyTotalDraftInvoicesExTax": {
                        "description": "Total invoiced on draft invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 120
                    },
                    "jobCurrencyTotalAwaitingPaymentInvoicesExTax": {
                        "description": "Total invoiced on invoices awaiting payment ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 180
                    },
                    "jobCurrencyTotalPaidInvoicesExTax": {
                        "description": "Total invoiced on paid invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 200
                    },
                    "jobCurrencyTotalIssuedInvoicesExTax": {
                        "description": "Total invoiced on issued invoices - awaiting payment plus paid - ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 380
                    },
                    "orderId": {
                        "description": "Order in which the job item appears",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 3
                    },
                    "estimatedStartDate": {
                        "description": "Estimated start date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-02-01"
                    },
                    "estimatedEndDate": {
                        "description": "Estimated end date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-03-15"
                    },
                    "earliestStartDate": {
                        "description": "Earliest start date (calculated)",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-02-02"
                    },
                    "latestEndDate": {
                        "description": "Latest end date (calculated)",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-03-20"
                    },
                    "completedDate": {
                        "description": "Completion date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-03-18"
                    },
                    "incompleteJobItemSubItems": {
                        "description": "Number of incomplete sub-items",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 2
                    },
                    "completeJobItemSubItems": {
                        "description": "Number of complete sub-items",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "readOnly": true,
                        "example": 5
                    }
                },
                "type": "object"
            },
            "JobItemDependency": {
                "title": "Job Item Dependency",
                "description": "A dependency relationship between two job items.",
                "properties": {
                    "id": {
                        "description": "Dependency ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 501
                    },
                    "parentJobItemId": {
                        "description": "Parent job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 20001
                    },
                    "childJobItemId": {
                        "description": "Child job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 20002
                    },
                    "dependencyType": {
                        "$ref": "#/components/schemas/DependencyType"
                    },
                    "lagDays": {
                        "description": "Lag time in days (can be negative for lead)",
                        "type": "integer",
                        "readOnly": true,
                        "example": 2
                    },
                    "isFloat": {
                        "description": "Whether the lag days are fixed, or if they are just the minimum space between the two items",
                        "type": "boolean",
                        "readOnly": true,
                        "example": false
                    }
                },
                "type": "object"
            },
            "JobItemInvoiceLineItem": {
                "title": "Job Item Invoice Line Item",
                "description": "Invoice line item linked to a Job Item",
                "properties": {
                    "id": {
                        "description": "The ID of the tracked line item",
                        "type": "integer",
                        "readOnly": true
                    },
                    "totalAmountExTax": {
                        "description": "How much of the source has been invoiced by this invoice line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 800
                    },
                    "invoiceLineItemId": {
                        "description": "The ID of the invoice line item where the source has been invoiced",
                        "type": "integer",
                        "readOnly": true
                    },
                    "jobItemId": {
                        "description": "ID of the Job Item this invoice line item is linked to",
                        "type": "integer",
                        "format": "int64",
                        "example": 20001
                    }
                },
                "type": "object"
            },
            "JobItemQuoteLineItem": {
                "title": "Job Item Quote Line Item",
                "description": "Quote line item linked to a Job Item",
                "properties": {
                    "id": {
                        "description": "The ID of the tracked line item",
                        "type": "integer",
                        "readOnly": true
                    },
                    "quoteLineItemId": {
                        "description": "The ID of the quote line item where the source has been quoted",
                        "type": "integer",
                        "readOnly": true
                    },
                    "jobItemId": {
                        "description": "ID of the Job Item this quote line item is linked to",
                        "type": "integer",
                        "format": "int64",
                        "example": 20001
                    }
                },
                "type": "object"
            },
            "JobItemRole": {
                "title": "Job Item Role",
                "description": "Role assignment on a job item, including planned time and rates.",
                "properties": {
                    "id": {
                        "description": "Job item role ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 701
                    },
                    "jobItemId": {
                        "description": "Job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "roleId": {
                        "description": "Role ID",
                        "type": "integer",
                        "format": "int64",
                        "example": 12
                    },
                    "active": {
                        "description": "Is the role assignment active",
                        "type": "boolean",
                        "readOnly": true,
                        "example": true
                    },
                    "jobCurrencySellRate": {
                        "description": "Sell rate in job currency (per hour)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 110
                    },
                    "totalPlannedMinutes": {
                        "description": "Total planned minutes for this role",
                        "type": "integer",
                        "example": 180
                    },
                    "jobCurrencyTotalPlannedTimeExTax": {
                        "description": "Total planned time ex tax (job currency) for this role",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 330
                    },
                    "jobCurrencyTotalPlannedTimeCostExTax": {
                        "description": "Total planned time cost ex tax",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 240.5
                    }
                },
                "type": "object"
            },
            "JobItemSubItem": {
                "title": "Job Item Sub Item",
                "description": "A checklist or sub-task within a job item.",
                "properties": {
                    "id": {
                        "description": "Sub-item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 9001
                    },
                    "jobItemId": {
                        "description": "Parent job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "jobItemSubItemStatus": {
                        "$ref": "#/components/schemas/JobItemSubItemStatus"
                    },
                    "description": {
                        "description": "Sub-item description",
                        "type": "string",
                        "example": "Prepare wireframes"
                    },
                    "completedDatetime": {
                        "description": "Completion timestamp",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "readOnly": true
                    },
                    "completedByUserId": {
                        "description": "User ID who completed the sub-item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 42
                    },
                    "orderId": {
                        "description": "Order index within the item",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "example": 3
                    }
                },
                "type": "object"
            },
            "JobItemUser": {
                "title": "Job Item User",
                "description": "Assignment of a user to a job item, including planned/logged time and rates.",
                "properties": {
                    "id": {
                        "description": "Job item user ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 501
                    },
                    "jobItemId": {
                        "description": "Job item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "userId": {
                        "description": "User ID",
                        "type": "integer",
                        "format": "int64",
                        "example": 42
                    },
                    "jobItemUserStatus": {
                        "$ref": "#/components/schemas/JobItemUserStatus"
                    },
                    "jobCurrencySellRate": {
                        "description": "Sell rate in job currency (per hour)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "totalPlannedMinutes": {
                        "description": "Total planned minutes. Always an integer on this API version: an item that pools its planned time at item level (\"Time By Item\") stores no per-user plan and reports 0 here - check the item's time allocation method to distinguish that from a genuine zero plan. Writes only apply when time is allocated by person.",
                        "type": "integer",
                        "example": 240
                    },
                    "totalIncompleteMinutes": {
                        "description": "Total incomplete minutes",
                        "type": "integer",
                        "readOnly": true,
                        "example": 60
                    },
                    "totalLoggedMinutes": {
                        "description": "Total logged minutes",
                        "type": "integer",
                        "readOnly": true,
                        "example": 180
                    },
                    "jobCurrencyTotalPlannedTimeExTax": {
                        "description": "Total planned time ex tax",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 480
                    },
                    "jobCurrencyTotalPlannedTimeCostExTax": {
                        "description": "Total planned time cost ex tax",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 240.5
                    },
                    "jobCurrencyTotalLoggedTimeExTax": {
                        "description": "Total logged time ex tax",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 360
                    },
                    "completedDate": {
                        "description": "Completed date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-03-15"
                    },
                    "earliestStartDate": {
                        "description": "Earliest start date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-02-01"
                    },
                    "latestEndDate": {
                        "description": "Latest end date",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "readOnly": true,
                        "example": "2025-02-28"
                    }
                },
                "type": "object"
            },
            "JobMilestone": {
                "title": "Job Milestone",
                "description": "A milestone date within a job of when something is happening or needs to be completed by",
                "properties": {
                    "id": {
                        "description": "Job Milestone ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 501
                    },
                    "jobId": {
                        "description": "Job ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "jobItemId": {
                        "description": "Job Item ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "name": {
                        "description": "Name of the milestone",
                        "type": "string",
                        "example": "Client Presentation"
                    },
                    "date": {
                        "description": "Date of the milestone",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-02-01"
                    }
                },
                "type": "object"
            },
            "JobPhase": {
                "title": "Job Phase",
                "description": "A grouping of items or expenses within a job into a phase",
                "properties": {
                    "id": {
                        "description": "Job Phase ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 501
                    },
                    "jobId": {
                        "description": "Job ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "name": {
                        "description": "Name of the phase",
                        "type": "string",
                        "example": "Initial Scoping"
                    },
                    "orderId": {
                        "description": "Order in which the phase appears",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 3
                    }
                },
                "type": "object"
            },
            "LoggedExpense": {
                "title": "Logged Expense",
                "description": "Represents a logged expense or purchase order entry",
                "properties": {
                    "id": {
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 12345
                    },
                    "userId": {
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 789
                    },
                    "jobPhaseId": {
                        "type": "integer",
                        "format": "int64",
                        "example": 789
                    },
                    "purchaseOrderId": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 456
                    },
                    "type": {
                        "type": "string",
                        "readOnly": true,
                        "example": "Expense",
                        "enum": [
                            "Purchase Order",
                            "Expense"
                        ]
                    },
                    "loggedExpenseStatus": {
                        "type": "string",
                        "readOnly": true,
                        "example": "Approved"
                    },
                    "loggedExpenseStatusId": {
                        "type": "integer",
                        "format": "int64",
                        "example": 2
                    },
                    "date": {
                        "type": "string",
                        "format": "date",
                        "example": "2025-08-15"
                    },
                    "requiredDate": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-09-01"
                    },
                    "purchaseOrderNumber": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "PO-001234"
                    },
                    "jobId": {
                        "type": "integer",
                        "format": "int64",
                        "example": 1010
                    },
                    "itemPricingMethodId": {
                        "type": "integer",
                        "format": "int64",
                        "example": 3
                    },
                    "supplierCompanyId": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "example": 555
                    },
                    "supplierContactId": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "example": 987
                    },
                    "itemName": {
                        "type": "string",
                        "example": "Concrete mix M20"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Urgent delivery before noon"
                    },
                    "reference": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "REF-ABC-123"
                    },
                    "costRate": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120.5
                    },
                    "sellRate": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 150
                    },
                    "quantity": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 2
                    },
                    "currencyCode": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "USD"
                    },
                    "currencySymbol": {
                        "type": "string",
                        "readOnly": true,
                        "example": "$"
                    },
                    "exchangeRate": {
                        "type": "number",
                        "format": "float",
                        "readOnly": true,
                        "example": 1
                    },
                    "loggedExpenseCurrencyTotalCost": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 241
                    },
                    "loggedExpenseCurrencyAmountPaidIncTax": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 200
                    },
                    "loggedExpenseCurrencyBalance": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 41
                    },
                    "markup": {
                        "description": "Markup percentage (0-100)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 24.5
                    },
                    "margin": {
                        "description": "Margin percentage (0-100)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 14.2
                    },
                    "jobCurrencyTotalCost": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 230
                    },
                    "jobCurrencyTotalExTax": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 200
                    },
                    "jobCurrencyTotalAmountInvoicedExTax": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 180
                    },
                    "jobCurrencyTotalDraftInvoicesExTax": {
                        "description": "Total invoiced on draft invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 120
                    },
                    "jobCurrencyTotalAwaitingPaymentInvoicesExTax": {
                        "description": "Total invoiced on invoices awaiting payment ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 180
                    },
                    "jobCurrencyTotalPaidInvoicesExTax": {
                        "description": "Total invoiced on paid invoices ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 200
                    },
                    "jobCurrencyTotalIssuedInvoicesExTax": {
                        "description": "Total invoiced on issued invoices - awaiting payment plus paid - ex tax (job currency)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 380
                    },
                    "externalId": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "ext-9f3a2b"
                    },
                    "externalCopyDatetime": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "LoggedExpenseInvoiceLineItem": {
                "title": "Logged Expense Invoice Line Item",
                "description": "The link from a logged expense to an invoice line item",
                "properties": {
                    "id": {
                        "description": "The ID of the tracked line item",
                        "type": "integer",
                        "readOnly": true
                    },
                    "totalAmountExTax": {
                        "description": "How much of the source has been invoiced by this invoice line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 800
                    },
                    "invoiceLineItemId": {
                        "description": "The ID of the invoice line item where the source has been invoiced",
                        "type": "integer",
                        "readOnly": true
                    },
                    "loggedExpenseId": {
                        "description": "The ID of the Expense this line item relates to",
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "LoggedExpenseQuoteLineItem": {
                "title": "Logged Expense Quote Line Item",
                "description": "The link from a logged expense to an quote line item",
                "properties": {
                    "id": {
                        "description": "The ID of the tracked line item",
                        "type": "integer",
                        "readOnly": true
                    },
                    "quoteLineItemId": {
                        "description": "The ID of the quote line item where the source has been quoted",
                        "type": "integer",
                        "readOnly": true
                    },
                    "loggedExpenseId": {
                        "description": "The ID of the Expense this line item relates to",
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "LoggedTime": {
                "title": "Logged Time",
                "description": "Represents a To Do (Time entry)",
                "properties": {
                    "id": {
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 12345
                    },
                    "userId": {
                        "type": "integer",
                        "format": "int64",
                        "example": 789
                    },
                    "loggedTimeStatus": {
                        "$ref": "#/components/schemas/LoggedTimeStatus"
                    },
                    "date": {
                        "type": "string",
                        "format": "date",
                        "example": "2025-08-15"
                    },
                    "completedDatetime": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "readOnly": true,
                        "example": "2025-08-20T14:30:00Z"
                    },
                    "jobId": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int32",
                        "example": 90
                    },
                    "jobItemUserId": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int32",
                        "example": 90
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Reviewed safety procedures"
                    },
                    "scheduleNotes": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "readOnly": true,
                        "example": "Arrive before 8 AM"
                    },
                    "private": {
                        "type": "boolean",
                        "example": false
                    },
                    "minutes": {
                        "type": "integer",
                        "format": "int32",
                        "example": 90
                    },
                    "cost": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 120.5
                    },
                    "totalCostExTax": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 240
                    },
                    "totalExTax": {
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 300
                    }
                },
                "type": "object"
            },
            "MasterLabel": {
                "title": "Master Label",
                "description": "A suggestion that will be provided when creating labels in the future",
                "properties": {
                    "id": {
                        "description": "The ID of the master label",
                        "type": "integer"
                    },
                    "name": {
                        "description": "Label name",
                        "type": "string",
                        "example": "Urgent"
                    },
                    "labelType": {
                        "$ref": "#/components/schemas/LabelType"
                    }
                },
                "type": "object"
            },
            "Organisation": {
                "title": "Organisation",
                "description": "Your Organisation's details",
                "properties": {
                    "name": {
                        "description": "Organisation name",
                        "type": "string",
                        "example": "Acme Ltd"
                    },
                    "domain": {
                        "description": "Organisation domain",
                        "type": "string",
                        "example": "acme"
                    },
                    "currency": {
                        "$ref": "#/components/schemas/Currency",
                        "description": "Default customer currency"
                    },
                    "address": {
                        "description": "Organisation address (default branch)",
                        "type": "string",
                        "example": "123 High St, Cityville, 12345, Country"
                    },
                    "country": {
                        "$ref": "#/components/schemas/Country",
                        "description": "Organisation country"
                    }
                },
                "type": "object"
            },
            "PurchaseOrder": {
                "title": "Purchase Order",
                "description": "Represents a purchase order linked to a logged expense",
                "properties": {
                    "id": {
                        "description": "Purchase order ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 1024
                    },
                    "sentByUserId": {
                        "description": "User ID of the person who sent the purchase order",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "example": 501
                    },
                    "sentDatetime": {
                        "description": "Datetime when the purchase order was sent",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-08-15"
                    },
                    "number": {
                        "description": "Purchase order number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "PO-000123"
                    },
                    "loggedExpenseCurrencyAmountPaidIncTax": {
                        "description": "Amount paid including tax in the logged expense currency",
                        "type": "number",
                        "format": "float",
                        "example": 120.75
                    },
                    "loggedExpenseCurrencyTotalAmountTax": {
                        "description": "Total tax amount in the logged expense currency",
                        "type": "number",
                        "format": "float",
                        "example": 18.25
                    },
                    "loggedExpenseCurrencyTotalAmountIncTax": {
                        "description": "Total amount including tax in the logged expense currency",
                        "type": "number",
                        "format": "float",
                        "example": 139
                    },
                    "jobCurrencyAmountPaidIncTax": {
                        "description": "Amount paid including tax in the job currency",
                        "type": "number",
                        "format": "float",
                        "example": 200
                    },
                    "jobCurrencyTotalAmountIncTax": {
                        "description": "Total amount including tax in the job currency",
                        "type": "number",
                        "format": "float",
                        "example": 250
                    },
                    "requiredDate": {
                        "description": "Required date for the purchase order",
                        "type": "string",
                        "format": "date",
                        "example": "2025-09-01"
                    },
                    "paidDate": {
                        "description": "Datetime when the purchase order was fully paid",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time",
                        "example": "2025-09-05T14:30:00Z"
                    }
                },
                "type": "object"
            },
            "PurchaseOrderLineItem": {
                "title": "Purchase Order Line Item",
                "description": "A single line item on a purchase order",
                "properties": {
                    "id": {
                        "description": "Line Item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "active": {
                        "description": "Has the line item been deleted",
                        "type": "boolean",
                        "readOnly": true,
                        "example": false
                    },
                    "name": {
                        "description": "Line item name",
                        "type": "string",
                        "example": "UI Design"
                    },
                    "description": {
                        "description": "Line item description",
                        "type": "string",
                        "example": "Design the initial user interface"
                    },
                    "accountCode": {
                        "description": "The account code used for accounting packages",
                        "type": "string",
                        "example": "B201"
                    },
                    "quantity": {
                        "description": "Quantity of the line item",
                        "type": "string",
                        "example": "1 day"
                    },
                    "unitRate": {
                        "description": "Price per unit",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "totalAmountExTax": {
                        "description": "Total for the line item (quantity x unit rate)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "orderId": {
                        "description": "Order of the line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 2
                    },
                    "taxName": {
                        "description": "Name of the tax rate being used",
                        "type": "string",
                        "example": "GST"
                    },
                    "taxRate": {
                        "description": "Tax rate applied to this line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 10
                    },
                    "externalTaxRateId": {
                        "description": "The ID of the tax rate from an external accounts package",
                        "type": "string",
                        "readOnly": true,
                        "example": "e7e05972-ab2c-4294-a887-d98c525af7d3"
                    },
                    "purchaseOrderId": {
                        "description": "The ID of the purchase order this line item relates to",
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Quote": {
                "title": "Quote",
                "description": "Represents a quote linked to a job",
                "properties": {
                    "id": {
                        "description": "Quote ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 12345
                    },
                    "createdUser": {
                        "description": "Display name of the user who created the quote",
                        "type": "string",
                        "example": "Alex Smith"
                    },
                    "sentByUserId": {
                        "description": "ID of the user who sent the quote",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "example": "123"
                    },
                    "sentDatetime": {
                        "description": "Date the quote was sent",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-08-15"
                    },
                    "jobId": {
                        "description": "Job ID the quote belongs to",
                        "type": "integer",
                        "format": "int64",
                        "example": 1010
                    },
                    "quoteName": {
                        "description": "Quote name/title",
                        "type": "string",
                        "example": "Stage 1 Works"
                    },
                    "quoteNumber": {
                        "description": "Quote number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Q-2025-00123"
                    },
                    "quoteStatus": {
                        "$ref": "#/components/schemas/QuoteStatus"
                    },
                    "approvedDatetime": {
                        "description": "Date the quote was approved",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "2025-08-20"
                    },
                    "approvedBy": {
                        "description": "Display name of the approver",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Sam Taylor"
                    },
                    "currencyCode": {
                        "description": "ISO 4217 currency code",
                        "type": "string",
                        "example": "USD"
                    },
                    "currencySymbol": {
                        "description": "Currency symbol",
                        "type": "string",
                        "example": "$"
                    },
                    "exchangeRate": {
                        "description": "Exchange rate vs base currency",
                        "type": "number",
                        "format": "float",
                        "example": 1
                    },
                    "discount": {
                        "description": "Discount percentage (0-100)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 10
                    },
                    "quoteCurrencyTotalAmountExTax": {
                        "description": "Total amount ex tax in quote currency",
                        "type": "number",
                        "format": "float",
                        "example": 15000
                    },
                    "quoteCurrencyTotalAmountTax": {
                        "description": "Total tax amount in quote currency",
                        "type": "number",
                        "format": "float",
                        "example": 2250
                    },
                    "quoteCurrencyTotalAmountIncTax": {
                        "description": "Total amount inc tax in quote currency",
                        "type": "number",
                        "format": "float",
                        "example": 17250
                    },
                    "quoteDate": {
                        "description": "Quote date",
                        "type": "string",
                        "format": "date",
                        "example": "2025-08-10"
                    }
                },
                "type": "object"
            },
            "QuoteLineItem": {
                "title": "Quote Line Item",
                "description": "A single line item on a quote",
                "properties": {
                    "id": {
                        "description": "Line Item ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 10001
                    },
                    "active": {
                        "description": "Has the line item been deleted",
                        "type": "boolean",
                        "readOnly": true,
                        "example": false
                    },
                    "name": {
                        "description": "Line item name",
                        "type": "string",
                        "example": "UI Design"
                    },
                    "description": {
                        "description": "Line item description",
                        "type": "string",
                        "example": "Design the initial user interface"
                    },
                    "accountCode": {
                        "description": "The account code used for accounting packages",
                        "type": "string",
                        "example": "B201"
                    },
                    "quantity": {
                        "description": "Quantity of the line item",
                        "type": "string",
                        "example": "1 day"
                    },
                    "unitRate": {
                        "description": "Price per unit",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "totalAmountExTax": {
                        "description": "Total for the line item (quantity x unit rate)",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 120
                    },
                    "orderId": {
                        "description": "Order of the line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 2
                    },
                    "taxName": {
                        "description": "Name of the tax rate being used",
                        "type": "string",
                        "example": "GST"
                    },
                    "taxRate": {
                        "description": "Tax rate applied to this line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "example": 10
                    },
                    "externalTaxRateId": {
                        "description": "The ID of the tax rate from an external accounts package",
                        "type": "string",
                        "readOnly": true,
                        "example": "e7e05972-ab2c-4294-a887-d98c525af7d3"
                    },
                    "quoteId": {
                        "description": "The ID of the quote this line item relates to",
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "QuoteLineItemInvoiceLineItem": {
                "title": "QuoteLine Item Invoice Line Item",
                "description": "The link from a quote line item to an invoice line item",
                "properties": {
                    "id": {
                        "description": "The ID of the tracked line item",
                        "type": "integer",
                        "readOnly": true
                    },
                    "totalAmountExTax": {
                        "description": "How much of the source has been invoiced by this invoice line item",
                        "type": [
                            "number",
                            "null"
                        ],
                        "format": "float",
                        "readOnly": true,
                        "example": 800
                    },
                    "invoiceLineItemId": {
                        "description": "The ID of the invoice line item where the source has been invoiced",
                        "type": "integer",
                        "readOnly": true
                    },
                    "quoteLineItemId": {
                        "description": "The ID of the quote line item this relates to",
                        "type": "integer",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "RateCard": {
                "title": "Rate Card",
                "description": "A rate card defining a set of rates that can be applied to a job",
                "properties": {
                    "id": {
                        "description": "The ID of the rate card",
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "description": "The name of the rate card",
                        "type": "string",
                        "readOnly": true
                    },
                    "currency": {
                        "$ref": "#/components/schemas/Currency",
                        "description": "The currency of the rates in the rate card"
                    }
                },
                "type": "object"
            },
            "ReportView": {
                "title": "ReportView",
                "description": "What are you reporting on?",
                "type": "string",
                "enum": [
                    "jobs",
                    "job_items",
                    "job_item_users",
                    "job_item_roles",
                    "time",
                    "expenses",
                    "quotes",
                    "invoices",
                    "job_groups",
                    "companies",
                    "contacts",
                    "users"
                ]
            },
            "SavedSegment": {
                "title": "Saved Segment",
                "description": "Represents a saved segment (saved filter) for a user",
                "properties": {
                    "id": {
                        "description": "Saved segment ID",
                        "type": [
                            "integer",
                            "null"
                        ],
                        "format": "int64",
                        "readOnly": true,
                        "example": 123
                    },
                    "userId": {
                        "description": "User ID who owns the segment",
                        "type": "integer",
                        "format": "int64",
                        "example": 42
                    },
                    "savedSegmentType": {
                        "$ref": "#/components/schemas/SavedSegmentType",
                        "description": "Type of the saved segment"
                    },
                    "name": {
                        "description": "Segment name",
                        "type": "string",
                        "example": "My Active Users"
                    },
                    "value": {
                        "description": "Segment value or query (serialized)",
                        "type": "string",
                        "example": "{\"statusIds\":[1],\"text\":\"alex\"}"
                    }
                },
                "type": "object"
            },
            "CompanySearchResult": {
                "title": "Company Search Result",
                "description": "An object returned when searching for Company, which includes all the data from the Company plus additional data from other tables if requested.",
                "properties": {
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "defaultAddress": {
                        "$ref": "#/components/schemas/Address"
                    },
                    "companyLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/CompanyLabel"
                        }
                    }
                },
                "type": "object"
            },
            "ContactSearchResult": {
                "title": "Contact Search Result",
                "description": "An object returned when searching for Contact, which includes all the data from the Contact plus additional data from other tables if requested.",
                "properties": {
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "companyRateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "contactLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/ContactLabel"
                        }
                    }
                },
                "type": "object"
            },
            "InvoiceSearchResult": {
                "title": "Invoice Search Result",
                "description": "An object returned when searching for Invoice, which includes all the data from the Invoice plus additional data from other tables if requested.",
                "properties": {
                    "invoice": {
                        "$ref": "#/components/schemas/Invoice"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "sentBy": {
                        "$ref": "#/components/schemas/User"
                    },
                    "invoiceLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/InvoiceLabel"
                        }
                    }
                },
                "type": "object"
            },
            "InvoiceLineItemSearchResult": {
                "title": "Invoice Line Item Search Result",
                "description": "An object returned when searching for Invoice Line Item, which includes all the data from the Invoice Line Item plus additional data from other tables if requested.",
                "properties": {
                    "invoiceLineItem": {
                        "$ref": "#/components/schemas/InvoiceLineItem"
                    },
                    "invoice": {
                        "$ref": "#/components/schemas/Invoice"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    }
                },
                "type": "object"
            },
            "JobSearchResult": {
                "title": "Job Search Result",
                "description": "An object returned when searching for Job, which includes all the data from the Job plus additional data from other tables if requested.",
                "properties": {
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "latestCommentActivityEntryMessage": {
                        "description": "Latest comment activity entry message (plain text).",
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "jobLabels": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/JobLabel"
                        }
                    },
                    "assignedUsers": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "type": "integer"
                        }
                    }
                },
                "type": "object"
            },
            "JobGroupSearchResult": {
                "title": "Job Group Search Result",
                "description": "An object returned when searching for a Job Group, which includes all the data from the Job Group plus additional data from other tables if requested.",
                "properties": {
                    "jobGroup": {
                        "$ref": "#/components/schemas/JobGroup"
                    },
                    "jobGroupBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobGroupLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "currentJobGroupPeriod": {
                        "$ref": "#/components/schemas/JobGroupPeriod"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "jobGroupLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/JobGroupLabel"
                        }
                    }
                },
                "type": "object"
            },
            "JobGroupPeriodSearchResult": {
                "title": "Job Group Period Search Result",
                "description": "An object returned when searching for a Job Group Period, which includes all the data from the Job Group Period plus additional data from other tables if requested.",
                "properties": {
                    "jobGroupPeriod": {
                        "$ref": "#/components/schemas/JobGroupPeriod"
                    },
                    "jobGroup": {
                        "$ref": "#/components/schemas/JobGroup"
                    },
                    "jobGroupBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobGroupLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    }
                },
                "type": "object"
            },
            "JobItemSearchResult": {
                "title": "Job Item Search Result",
                "description": "An object returned when searching for a Job Item, which includes all the data from the Job Item plus additional data from other tables if requested.",
                "properties": {
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    }
                },
                "type": "object"
            },
            "JobItemInvoiceLineItemSearchResult": {
                "title": "Job Item Invoice Line Item Search Result",
                "description": "An object returned when searching for Job Item Invoice Line Item, which includes all the data from the Job Item Invoice Line Item plus additional data from other tables if requested.",
                "properties": {
                    "jobItemInvoiceLineItem": {
                        "$ref": "#/components/schemas/JobItemInvoiceLineItem"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "invoice": {
                        "$ref": "#/components/schemas/Invoice"
                    },
                    "invoiceLineItem": {
                        "$ref": "#/components/schemas/InvoiceLineItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "JobItemQuoteLineItemSearchResult": {
                "title": "Job Item Quote Line Item Search Result",
                "description": "An object returned when searching for Job Item Quote Line Item, which includes all the data from the Job Item Quote Line Item plus additional data from other tables if requested.",
                "properties": {
                    "jobItemQuoteLineItem": {
                        "$ref": "#/components/schemas/JobItemQuoteLineItem"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "quote": {
                        "$ref": "#/components/schemas/Quote"
                    },
                    "quoteLineItem": {
                        "$ref": "#/components/schemas/QuoteLineItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "JobItemRoleSearchResult": {
                "title": "Job Item Role Search Result",
                "description": "An object returned when searching for a Job Item Role, which includes all the data from the Job Item Role plus additional data from other tables if requested.",
                "properties": {
                    "jobItemRole": {
                        "$ref": "#/components/schemas/JobItemRole"
                    },
                    "role": {
                        "$ref": "#/components/schemas/Role"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    }
                },
                "type": "object"
            },
            "JobItemSubItemSearchResult": {
                "title": "Job Item User Search Result",
                "description": "An object returned when searching for a Job Item User, which includes all the data from the Job Item User plus additional data from other tables if requested.",
                "properties": {
                    "jobItemSubItem": {
                        "$ref": "#/components/schemas/JobItemSubItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    }
                },
                "type": "object"
            },
            "JobItemUserSearchResult": {
                "title": "Job Item User Search Result",
                "description": "An object returned when searching for a Job Item User, which includes all the data from the Job Item User plus additional data from other tables if requested.",
                "properties": {
                    "jobItemUser": {
                        "$ref": "#/components/schemas/JobItemUser"
                    },
                    "user": {
                        "$ref": "#/components/schemas/User"
                    },
                    "userBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "userRole": {
                        "$ref": "#/components/schemas/Role"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    }
                },
                "type": "object"
            },
            "JobMilestoneSearchResult": {
                "title": "Job Milestone Search Result",
                "description": "An object returned when searching for a Job Milestone, which includes all the data from the Job Milestone plus additional data from other tables if requested.",
                "properties": {
                    "jobMilestone": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    }
                },
                "type": "object"
            },
            "JobPhaseSearchResult": {
                "title": "Job Phase Search Result",
                "description": "An object returned when searching for a Job Phase, which includes all the data from the Job Phase plus additional data from other tables if requested.",
                "properties": {
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    }
                },
                "type": "object"
            },
            "LoggedExpenseSearchResult": {
                "title": "Logged Expense Search Result",
                "description": "An object returned when searching for LoggedExpense, which includes all the data from the Logged Expense plus additional data from other tables if requested.",
                "properties": {
                    "loggedExpense": {
                        "$ref": "#/components/schemas/LoggedExpense"
                    },
                    "purchaseOrder": {
                        "$ref": "#/components/schemas/PurchaseOrder"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    },
                    "expenseCompany": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "expenseContact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "sentBy": {
                        "$ref": "#/components/schemas/User"
                    },
                    "loggedExpenseLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/Label"
                        }
                    }
                },
                "type": "object"
            },
            "LoggedExpenseInvoiceLineItemSearchResult": {
                "title": "Logged Expense Invoice Line Item Search Result",
                "description": "An object returned when searching for Logged Expense Invoice Line Item, which includes all the data from the Logged Expense Invoice Line Item plus additional data from other tables if requested.",
                "properties": {
                    "loggedExpenseInvoiceLineItem": {
                        "$ref": "#/components/schemas/LoggedExpenseInvoiceLineItem"
                    },
                    "loggedExpense": {
                        "$ref": "#/components/schemas/LoggedExpense"
                    },
                    "invoice": {
                        "$ref": "#/components/schemas/Invoice"
                    },
                    "invoiceLineItem": {
                        "$ref": "#/components/schemas/InvoiceLineItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "LoggedExpenseQuoteLineItemSearchResult": {
                "title": "Logged Expense Quote Line Item Search Result",
                "description": "An object returned when searching for Logged Expense Quote Line Item, which includes all the data from the Logged Expense Quote Line Item plus additional data from other tables if requested.",
                "properties": {
                    "loggedExpenseQuoteLineItem": {
                        "$ref": "#/components/schemas/LoggedExpenseQuoteLineItem"
                    },
                    "loggedExpense": {
                        "$ref": "#/components/schemas/LoggedExpense"
                    },
                    "quote": {
                        "$ref": "#/components/schemas/Quote"
                    },
                    "quoteLineItem": {
                        "$ref": "#/components/schemas/QuoteLineItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "LoggedTimeSearchResult": {
                "title": "Logged Time Search Result",
                "description": "An object returned when searching for LoggedTime, which includes all the data from the Logged Time plus additional data from other tables if requested.",
                "properties": {
                    "loggedTime": {
                        "$ref": "#/components/schemas/LoggedTime"
                    },
                    "user": {
                        "$ref": "#/components/schemas/User"
                    },
                    "userBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "userRole": {
                        "$ref": "#/components/schemas/Role"
                    },
                    "jobItemUser": {
                        "$ref": "#/components/schemas/JobItemUser"
                    },
                    "jobItem": {
                        "$ref": "#/components/schemas/JobItem"
                    },
                    "jobPhase": {
                        "$ref": "#/components/schemas/JobPhase"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "jobLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/JobLabel"
                        }
                    }
                },
                "type": "object"
            },
            "PurchaseOrderLineItemSearchResult": {
                "title": "Purchase Order Line Item Search Result",
                "description": "An object returned when searching for Purchase Order Line Item, which includes all the data from the Purchase Order Line Item plus additional data from other tables if requested.",
                "properties": {
                    "purchaseOrderLineItem": {
                        "$ref": "#/components/schemas/PurchaseOrderLineItem"
                    },
                    "loggedExpense": {
                        "$ref": "#/components/schemas/LoggedExpense"
                    },
                    "purchaseOrder": {
                        "$ref": "#/components/schemas/PurchaseOrder"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "QuoteSearchResult": {
                "title": "Quote Search Result",
                "description": "An object returned when searching for Quote, which includes all the data from the Quote plus additional data from other tables if requested.",
                "properties": {
                    "quote": {
                        "$ref": "#/components/schemas/Quote"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "createdUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "jobLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "rateCard": {
                        "$ref": "#/components/schemas/RateCard"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "companyLeadUser": {
                        "$ref": "#/components/schemas/User"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    },
                    "sentBy": {
                        "$ref": "#/components/schemas/User"
                    },
                    "quoteLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/QuoteLabel"
                        }
                    }
                },
                "type": "object"
            },
            "QuoteLineItemSearchResult": {
                "title": "Quote Line Item Search Result",
                "description": "An object returned when searching for Quote Line Item, which includes all the data from the Quote Line Item plus additional data from other tables if requested.",
                "properties": {
                    "quoteLineItem": {
                        "$ref": "#/components/schemas/QuoteLineItem"
                    },
                    "quote": {
                        "$ref": "#/components/schemas/Quote"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    },
                    "jobBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "company": {
                        "$ref": "#/components/schemas/Company"
                    },
                    "contact": {
                        "$ref": "#/components/schemas/Contact"
                    }
                },
                "type": "object"
            },
            "QuoteLineItemInvoiceLineItemSearchResult": {
                "title": "Quote Line Item Search Result",
                "description": "An object returned when searching for Quote Line Item Invoice Line Item, which includes all the data from the Quote Line Item Invoice Line Item plus additional data from other tables if requested.",
                "properties": {
                    "quoteLineItemInvoiceLineItem": {
                        "$ref": "#/components/schemas/QuoteLineItemInvoiceLineItem"
                    },
                    "quote": {
                        "$ref": "#/components/schemas/Quote"
                    },
                    "quoteLineItem": {
                        "$ref": "#/components/schemas/QuoteLineItem"
                    },
                    "invoice": {
                        "$ref": "#/components/schemas/Invoice"
                    },
                    "invoiceLineItem": {
                        "$ref": "#/components/schemas/InvoiceLineItem"
                    },
                    "job": {
                        "$ref": "#/components/schemas/Job"
                    }
                },
                "type": "object"
            },
            "UserSearchResult": {
                "title": "Job Item Role Search Result",
                "description": "An object returned when searching for a Job Item Role, which includes all the data from the Job Item Role plus additional data from other tables if requested.",
                "properties": {
                    "user": {
                        "$ref": "#/components/schemas/User"
                    },
                    "userRole": {
                        "$ref": "#/components/schemas/Role"
                    },
                    "userBranch": {
                        "$ref": "#/components/schemas/Branch"
                    },
                    "userLabels": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/UserLabel"
                        }
                    }
                },
                "type": "object"
            },
            "SearchView": {
                "title": "SearchView",
                "description": "Which search context is being referred to.",
                "type": "string",
                "enum": [
                    "jobs",
                    "job_milestones",
                    "job_phases",
                    "job_items",
                    "job_item_quote_line_items",
                    "job_item_invoice_line_items",
                    "job_item_users",
                    "job_item_roles",
                    "job_item_sub_items",
                    "time",
                    "expenses",
                    "purchase_order_line_items",
                    "logged_expense_quote_line_items",
                    "logged_expense_invoice_line_items",
                    "quotes",
                    "quote_line_items",
                    "quote_line_item_invoice_line_items",
                    "invoices",
                    "invoice_line_items",
                    "job_groups",
                    "job_group_periods",
                    "companies",
                    "contacts",
                    "users"
                ]
            },
            "User": {
                "title": "User",
                "description": "Represents a user within the organisation",
                "properties": {
                    "id": {
                        "description": "User ID",
                        "type": "integer",
                        "format": "int64",
                        "readOnly": true,
                        "example": 1234
                    },
                    "email": {
                        "description": "User email address",
                        "type": "string",
                        "format": "email",
                        "example": "alex.smith@example.com"
                    },
                    "branchId": {
                        "description": "Branch the user belongs to",
                        "type": "integer",
                        "format": "int64",
                        "example": 123
                    },
                    "roleId": {
                        "description": "Role assigned to the user (if any)",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "displayName": {
                        "description": "Display name",
                        "type": "string",
                        "example": "Alex Smith"
                    },
                    "firstName": {
                        "description": "First name",
                        "type": "string",
                        "example": "Alex"
                    },
                    "lastName": {
                        "description": "Last name",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "Smith"
                    },
                    "phoneNumber": {
                        "description": "Primary phone number",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "+1-555-0100"
                    },
                    "userStatus": {
                        "$ref": "#/components/schemas/UserStatus",
                        "description": "Current user status"
                    },
                    "costRate": {
                        "description": "Internal cost rate",
                        "type": "number",
                        "format": "float",
                        "example": 45.5
                    },
                    "billableRate": {
                        "description": "Billable rate for the user",
                        "type": "number",
                        "format": "float",
                        "example": 95
                    },
                    "hoursWorkedMonday": {
                        "description": "Hours typically worked on Monday",
                        "type": "number",
                        "format": "float",
                        "example": 8
                    },
                    "hoursWorkedTuesday": {
                        "description": "Hours typically worked on Tuesday",
                        "type": "number",
                        "format": "float",
                        "example": 8
                    },
                    "hoursWorkedWednesday": {
                        "description": "Hours typically worked on Wednesday",
                        "type": "number",
                        "format": "float",
                        "example": 8
                    },
                    "hoursWorkedThursday": {
                        "description": "Hours typically worked on Thursday",
                        "type": "number",
                        "format": "float",
                        "example": 8
                    },
                    "hoursWorkedFriday": {
                        "description": "Hours typically worked on Friday",
                        "type": "number",
                        "format": "float",
                        "example": 8
                    },
                    "hoursWorkedSaturday": {
                        "description": "Hours typically worked on Saturday",
                        "type": "number",
                        "format": "float",
                        "example": 0
                    },
                    "hoursWorkedSunday": {
                        "description": "Hours typically worked on Sunday",
                        "type": "number",
                        "format": "float",
                        "example": 0
                    }
                },
                "type": "object"
            },
            "ActivityEntryParentType": {
                "title": "Activity Entry Parent Type",
                "description": "Type of parent entity an activity entry belongs to (eg a job or a thread).",
                "properties": {
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "ActivityEntryType": {
                "title": "Activity Entry Type",
                "description": "Type of an activity entry (eg a comment, post or a notification that a job has been updated).",
                "properties": {
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "CompanyStatus": {
                "title": "Company Status",
                "description": "Status of a company",
                "properties": {
                    "id": {
                        "description": "Company status ID (1=Active, 2=Archived, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "ContactStatus": {
                "title": "Contact Status",
                "description": "Status of a contact",
                "properties": {
                    "id": {
                        "description": "Company status ID (1=Active, 2=Archived, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "CostingMethod": {
                "title": "Consting Method",
                "properties": {
                    "id": {
                        "description": "Consting Method ID (1=Item, 2=People, 3=Fixed Price Calculated Sell, 4=Fixed Price User Sell)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Country": {
                "title": "Country",
                "description": "Country model",
                "properties": {
                    "id": {
                        "description": "Country identifier (code)",
                        "type": "string",
                        "example": "NZ"
                    },
                    "name": {
                        "description": "Country name",
                        "type": "string",
                        "example": "New Zealand"
                    }
                },
                "type": "object"
            },
            "Currency": {
                "title": "Currency",
                "description": "Currency model",
                "properties": {
                    "id": {
                        "description": "Currency code (ISO 4217)",
                        "type": "string",
                        "example": "USD"
                    },
                    "name": {
                        "description": "Currency display name",
                        "type": "string",
                        "example": "US Dollar"
                    },
                    "symbol": {
                        "description": "Currency symbol",
                        "type": "string",
                        "example": "$"
                    }
                },
                "type": "object"
            },
            "DependencyType": {
                "title": "Dependency Type",
                "description": "Type of dependency.",
                "properties": {
                    "id": {
                        "description": "Dependency Type ID (1=Start To Start, 2=Start To End, 3=End To Start, 4=End To End)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "InvoiceStatus": {
                "title": "Invoice Status",
                "description": "Status of an invoice",
                "properties": {
                    "id": {
                        "description": "Company status ID (1=Draft, 2=Awaiting Payment, 3=Paid, 4=Deleted, 5=Voided)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4,
                            5
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "InvoiceType": {
                "title": "Invoice Type",
                "description": "Type of an invoice",
                "properties": {
                    "id": {
                        "description": "Invoice Type ID (1=Invoice, 2=Credit Note)",
                        "type": "integer",
                        "enum": [
                            1,
                            2
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "ItemMeasurementType": {
                "title": "Item Measurement Type",
                "description": "Measurement type for an item.",
                "properties": {
                    "id": {
                        "description": "Item Measurement Type ID (1=Hours, 2=Units)",
                        "type": "integer",
                        "enum": [
                            1,
                            2
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobGroupLabel": {
                "title": "Job Group Label",
                "description": "A label assigned to a Job Group",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/Label"
                    },
                    {
                        "properties": {
                            "jobGroupId": {
                                "description": "The ID of the Job Group this label is attached to",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "JobGroupPeriodInterval": {
                "title": "Job Group Period Interval",
                "description": "What interval does the job group repeat over.",
                "properties": {
                    "id": {
                        "description": "Job Group Status ID (1=Monthly, 2=Quarterly)",
                        "type": "integer",
                        "enum": [
                            1,
                            2
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobGroupStatus": {
                "title": "Job Group Status",
                "description": "Status of a Job Group.",
                "properties": {
                    "id": {
                        "description": "Job Group Status ID (2=Open, 3=Closed, 4=Deleted)",
                        "type": "integer",
                        "enum": [
                            2,
                            3,
                            4
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobItemStatus": {
                "title": "Job Item Status",
                "description": "Status of a Job item.",
                "properties": {
                    "id": {
                        "description": "Job Item Status ID (1=Planning, 4=Scheduled, 2=Complete, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobItemSubItemStatus": {
                "title": "Job Item Sub Item Status",
                "description": "Status of a Job item sub item.",
                "properties": {
                    "id": {
                        "description": "Job Item Sub Item Status ID (1=Incomplete, 2=Complete, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobItemUserStatus": {
                "title": "Job Item User Status",
                "description": "Status of a Job item user.",
                "properties": {
                    "id": {
                        "description": "Job Item User Status ID (1=Paused, 4=Play, 2=Done, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "JobLabel": {
                "title": "Job Label",
                "description": "A label assigned to a job",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/Label"
                    },
                    {
                        "properties": {
                            "jobId": {
                                "description": "The ID of the job this label is attached to",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "JobStatus": {
                "title": "Job Status",
                "description": "Status of a Job.",
                "properties": {
                    "id": {
                        "description": "Job Status ID (5=Paused, 1=In Play, 2=Done, 3=Deleted, 4=Archived)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4,
                            5
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Label": {
                "title": "Label",
                "description": "A label that can be attached to an entity",
                "properties": {
                    "id": {
                        "description": "Label ID",
                        "type": "integer",
                        "format": "int64",
                        "example": 555
                    },
                    "name": {
                        "description": "Label name",
                        "type": "string",
                        "example": "Urgent"
                    },
                    "entityId": {
                        "description": "ID of the entity this label is attached to",
                        "type": "integer",
                        "format": "int64",
                        "example": 1001
                    },
                    "labelType": {
                        "$ref": "#/components/schemas/LabelType"
                    }
                },
                "type": "object"
            },
            "LabelType": {
                "title": "Label Type",
                "description": "What the label will be attached to.",
                "properties": {
                    "id": {
                        "description": "Label type ID (1=Job, 2=Quote, 3=Invoice, 4=Logged Expense, 5=Company, 6=Contact, 7=User, 8=Job Group)",
                        "type": "integer",
                        "example": 5,
                        "enum": [
                            1,
                            2,
                            3,
                            4,
                            5,
                            6,
                            7,
                            8
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "LoggedTimeStatus": {
                "title": "Logged Time Status (To Do)",
                "description": "Status of a Logged Time (To Do).",
                "properties": {
                    "id": {
                        "description": "Logged Time Status ID (1=Incomplete, 2=Complete, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "QuoteStatus": {
                "title": "Quote Status",
                "description": "Status of a Quote.",
                "properties": {
                    "id": {
                        "description": "Quote Status ID (5 = Draft, 1=Pending Approval, 2=Approved, 3=Declined, 4=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4,
                            5
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Role": {
                "description": "A role that is performed within your organisation",
                "properties": {
                    "id": {
                        "description": "The ID of the role",
                        "type": "integer",
                        "readOnly": true
                    },
                    "name": {
                        "description": "The name of the role.",
                        "type": "string"
                    },
                    "active": {
                        "description": "Whether the role is active or archived.",
                        "type": "boolean"
                    }
                },
                "type": "object"
            },
            "SavedSegmentType": {
                "title": "Saved Segment Type",
                "description": "Type of a saved segment.",
                "properties": {
                    "id": {
                        "description": "Saved Segment Type ID (1=Grouped Logged Time, 2=Jobs, 3=Logged Expenses, 4=Quotes, 5=Invoices, 6=Schedule, 7=WIP, 8=Billing, 9=Companies, 10=Contacts, 11=Users, 12=Logged Time, 13=Reporting, 14=Job Groups)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3,
                            4,
                            5,
                            6,
                            7,
                            8,
                            9,
                            10,
                            11,
                            12,
                            13,
                            14
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "TimeAllocationMethod": {
                "title": "Time Allocation Method",
                "description": "How the time of an item is allocated, whether as a bucket that is shared amongst all users or individually assigned to each user.",
                "properties": {
                    "id": {
                        "description": "Time Allocation Method ID (1=Item, 2=People)",
                        "type": "integer",
                        "enum": [
                            1,
                            2
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "UserStatus": {
                "title": "User Status",
                "description": "Status of a User.",
                "properties": {
                    "id": {
                        "description": "User Status ID (1=Active, 2=Hibernated, 3=Deleted)",
                        "type": "integer",
                        "enum": [
                            1,
                            2,
                            3
                        ]
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "AccountingPlatformType": {
                "title": "Accounting Platform Type",
                "description": "\n    1: Xero\n\n    2: QuickBooks\n\n    3: MYOB",
                "properties": {
                    "id": {
                        "type": "integer",
                        "format": "int32"
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    },
                    "canSendExpenses": {
                        "type": "boolean"
                    },
                    "canSendPayments": {
                        "type": "boolean"
                    },
                    "requiresTaxRates": {
                        "type": "boolean"
                    }
                },
                "type": "object"
            },
            "BillingCycle": {
                "title": "Billing Cycle",
                "description": "\n    1: Monthly\n\n    2: Annually",
                "properties": {
                    "id": {
                        "description": "Billing cycle identifier",
                        "type": "integer",
                        "format": "int32"
                    },
                    "name": {
                        "description": "Billing cycle name",
                        "type": "string"
                    },
                    "discountPercentage": {
                        "description": "Discount percentage applied to this cycle",
                        "type": "integer",
                        "format": "int32"
                    },
                    "billingCycleUnit": {
                        "$ref": "#/components/schemas/BillingCycleUnit",
                        "description": "Unit of time for the billing cycle"
                    },
                    "billingCycleFrequency": {
                        "description": "Number of units per billing cycle",
                        "type": "integer",
                        "format": "int32"
                    }
                },
                "type": "object"
            },
            "BillingCycleUnit": {
                "title": "Billing Cycle Unit",
                "description": "\n    1: Month\n\n    2: Year",
                "properties": {
                    "id": {
                        "type": "integer",
                        "format": "int32"
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "FilterGroupTypeOption": {
                "title": "Filter Group Type Option",
                "description": "A list of options that can be used for a given filter group type. Eg, the enumerated Status options the JobStatus filter group type.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "FilterGroupTypeSettings": {
                "title": "Filter Group Settings",
                "description": "The definition of how to use a given FilterGroupType, as well as information describing what is to be returned.",
                "properties": {
                    "filterGroupType": {
                        "$ref": "#/components/schemas/FilterGroupType"
                    },
                    "filterType": {
                        "$ref": "#/components/schemas/FilterType"
                    },
                    "name": {
                        "type": "string"
                    },
                    "simpleName": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "currencyContext": {
                        "$ref": "#/components/schemas/CurrencyContext"
                    },
                    "calculation": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "category": {
                        "type": "string"
                    },
                    "enableAnyValue": {
                        "type": "boolean"
                    },
                    "deprecated": {
                        "type": "boolean"
                    },
                    "containsCostRateInformation": {
                        "type": "boolean"
                    },
                    "containsFinancialInformation": {
                        "type": "boolean"
                    },
                    "options": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/FilterGroupTypeOption"
                        }
                    },
                    "searchViews": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SearchView"
                        }
                    }
                },
                "type": "object"
            },
            "LoggedExpenseStatus": {
                "title": "Logged Expense Status",
                "description": "\n    1: Draft\n\n    2: Approved\n\n    3: Paid\n\n    4: Deleted\n\n    6: Declined",
                "properties": {
                    "id": {
                        "type": "integer",
                        "format": "int32"
                    },
                    "name": {
                        "type": "string",
                        "readOnly": true
                    }
                },
                "type": "object"
            },
            "Product": {
                "title": "Product",
                "description": "Product model",
                "properties": {
                    "id": {
                        "description": "Product identifier",
                        "type": "integer",
                        "format": "int64"
                    },
                    "name": {
                        "description": "Product name",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "ConditionMatchType": {
                "title": "ConditionMatchType",
                "description": "Whether to apply AND/OR between filters.\n\n    1: AND - all conditions must match\n\n    2: OR - at least one condition must match",
                "type": "integer",
                "enum": [
                    1,
                    2
                ]
            },
            "CurrencyContext": {
                "title": "CurrencyContext",
                "description": "Which currency context is being referred to. Eg, 'Job' (1) means the value is in the currency of the job.\n\n    1: Home - your organisation's primary currency which all reporting is done in\n\n    2: Job\n\n    3: Expense\n\n    4: Quote\n\n    5: Invoice",
                "type": "integer",
                "enum": [
                    1,
                    2,
                    3,
                    4,
                    5
                ]
            },
            "FilterGroupType": {
                "title": "FilterGroupType",
                "description": "A specific field that you wish to filter on. Use the /filter_group_types endpoint to get the available filter group types and their settings.",
                "type": "integer",
                "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30,
                    31,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39,
                    40,
                    41,
                    42,
                    43,
                    44,
                    45,
                    46,
                    47,
                    48,
                    49,
                    50,
                    51,
                    52,
                    54,
                    55,
                    56,
                    57,
                    58,
                    59,
                    60,
                    61,
                    62,
                    63,
                    64,
                    65,
                    66,
                    67,
                    68,
                    69,
                    70,
                    71,
                    72,
                    73,
                    74,
                    75,
                    76,
                    77,
                    78,
                    79,
                    80,
                    81,
                    82,
                    83,
                    84,
                    85,
                    86,
                    87,
                    88,
                    89,
                    90,
                    91,
                    92,
                    93,
                    94,
                    95,
                    96,
                    97,
                    98,
                    99,
                    100,
                    101,
                    102,
                    103,
                    104,
                    105,
                    106,
                    107,
                    108,
                    109,
                    110,
                    111,
                    112,
                    113,
                    114,
                    115,
                    116,
                    117,
                    118,
                    120,
                    121,
                    122,
                    123,
                    124,
                    125,
                    126,
                    127,
                    128,
                    129,
                    130,
                    131,
                    132,
                    133,
                    134,
                    135,
                    136,
                    137,
                    138,
                    139,
                    140,
                    141,
                    142,
                    143,
                    144,
                    145,
                    146,
                    147,
                    148,
                    149,
                    150,
                    151,
                    152,
                    154,
                    155,
                    156,
                    157,
                    158,
                    159,
                    160,
                    161,
                    162,
                    163,
                    164,
                    166,
                    167,
                    168,
                    169,
                    170,
                    171,
                    172,
                    173,
                    174,
                    175,
                    176,
                    177,
                    178,
                    179,
                    180,
                    181,
                    182,
                    183,
                    184,
                    185,
                    186,
                    187,
                    188,
                    189,
                    190,
                    191,
                    192,
                    193,
                    194,
                    195,
                    196,
                    197,
                    198,
                    199,
                    200,
                    201,
                    202,
                    203,
                    204,
                    205,
                    206,
                    207,
                    208,
                    209,
                    210,
                    211,
                    212,
                    213,
                    214,
                    215,
                    216,
                    217,
                    218,
                    219,
                    220,
                    221,
                    222,
                    223,
                    224,
                    225,
                    226,
                    227,
                    228,
                    229,
                    230,
                    231,
                    232,
                    233,
                    234,
                    235,
                    236,
                    237,
                    238,
                    239,
                    240,
                    241
                ]
            },
            "FilterType": {
                "title": "FilterType",
                "description": "The basic definition of what type of filter this is.\n\n    1: Text\n\n    2: Date\n\n    3: Number\n\n    4: Minutes\n\n    5: Boolean\n\n    6: DateTime",
                "type": "integer",
                "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6
                ]
            },
            "SearchColumn": {
                "title": "SearchColumn",
                "description": "A list of columns that can be used in search queries.",
                "type": "integer",
                "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    24,
                    25,
                    26,
                    27,
                    28,
                    29,
                    30,
                    31,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39,
                    40,
                    41,
                    42,
                    43,
                    44,
                    45,
                    46,
                    47,
                    48,
                    49,
                    50,
                    51,
                    52,
                    53,
                    54,
                    55,
                    56,
                    57,
                    58,
                    59,
                    60,
                    61,
                    62,
                    63,
                    64,
                    65,
                    66,
                    67,
                    68,
                    69,
                    70,
                    71,
                    72,
                    77,
                    78,
                    79,
                    80,
                    81,
                    82,
                    83,
                    84,
                    85,
                    86,
                    87,
                    88,
                    89,
                    90,
                    91,
                    92,
                    93,
                    94,
                    95,
                    96,
                    97,
                    98,
                    99,
                    100,
                    101,
                    102,
                    103,
                    104,
                    105,
                    106,
                    107,
                    108,
                    109,
                    110,
                    111,
                    112,
                    113,
                    114,
                    115,
                    116,
                    117,
                    118,
                    119,
                    120,
                    121,
                    122,
                    123,
                    124,
                    125,
                    126,
                    127,
                    128,
                    129,
                    130,
                    131,
                    132,
                    133,
                    134,
                    135,
                    136,
                    137,
                    138,
                    139,
                    140,
                    141,
                    142,
                    143,
                    144,
                    145,
                    146,
                    147,
                    148,
                    149,
                    150,
                    151,
                    152,
                    153,
                    154,
                    155,
                    156,
                    157,
                    158,
                    159,
                    160,
                    161,
                    162,
                    163,
                    164,
                    165,
                    166,
                    167,
                    168,
                    169,
                    170,
                    171,
                    172,
                    173,
                    174,
                    175,
                    176,
                    177,
                    178,
                    179,
                    180,
                    181,
                    182,
                    183,
                    184,
                    185,
                    186,
                    187,
                    188,
                    189,
                    190,
                    191,
                    192,
                    193,
                    194,
                    195,
                    196,
                    197,
                    198,
                    199,
                    200,
                    201,
                    202,
                    203,
                    204,
                    205,
                    207,
                    208,
                    209,
                    210,
                    212,
                    213,
                    214,
                    215,
                    216,
                    217,
                    218,
                    219,
                    220,
                    221,
                    222,
                    223,
                    224,
                    225,
                    226,
                    227,
                    228,
                    229,
                    230,
                    231,
                    232,
                    233,
                    234,
                    235,
                    236,
                    237,
                    238,
                    239,
                    240,
                    241,
                    242,
                    243,
                    244,
                    245,
                    246,
                    247,
                    248,
                    249,
                    250,
                    251,
                    252,
                    253,
                    254,
                    255,
                    256,
                    257,
                    258,
                    259,
                    260,
                    261,
                    262,
                    263,
                    264,
                    265,
                    266,
                    267,
                    268,
                    269,
                    270,
                    271,
                    272,
                    273,
                    274,
                    275,
                    276,
                    277,
                    278,
                    279,
                    280,
                    281,
                    282,
                    283,
                    285,
                    286,
                    287,
                    288,
                    289,
                    290,
                    291,
                    292,
                    293,
                    294,
                    295,
                    296,
                    297,
                    300,
                    301,
                    302,
                    303,
                    304,
                    305,
                    306,
                    307,
                    308
                ]
            },
            "ValueMatchType": {
                "title": "ValueMatchType",
                "description": "How you want the search value compared against the record's value.\n\n    1: Equals\n\n    2: Not Equals\n\n    3: Contains\n\n    4: Not Contains\n\n    5: Greater Than\n\n    6: Less Than\n\n    15: Date This Week\n\n    16: Date Last Week\n\n    17: Date This Month\n\n    18: Date Last Month\n\n    28: Boolean True\n\n    29: Boolean False\n\n    30: Date Next Week\n\n    31: Date Next Month\n\n    32: Date Last Quarter\n\n    33: Date This Quarter\n\n    34: Date Next Quarter\n\n    35: Date Last Year\n\n    36: Date This Year\n\n    37: Date Next Year\n\n    38: Greater Than or Equals\n\n    39: Less Than or Equals\n\n    40: In The Future\n\n    41: In The Past\n\n    46: Date Today",
                "type": "integer",
                "enum": [
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    15,
                    16,
                    17,
                    18,
                    21,
                    27,
                    28,
                    29,
                    30,
                    31,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39,
                    40,
                    41,
                    46
                ]
            },
            "Filter": {
                "title": "Filter",
                "description": "A specific value you wish to use within the search. This can be a string, integer, or float value. The valueMatchType determines how the value is matched against the data.",
                "properties": {
                    "valueMatchTypeId": {
                        "$ref": "#/components/schemas/ValueMatchType"
                    },
                    "value": {
                        "oneOf": [
                            {
                                "type": "string"
                            },
                            {
                                "type": "integer"
                            },
                            {
                                "type": "number"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    }
                },
                "type": "object"
            },
            "FilterGroup": {
                "title": "Filter Group",
                "description": "A collection of filters to be used for searching.",
                "properties": {
                    "filterGroupTypeId": {
                        "$ref": "#/components/schemas/FilterGroupType"
                    },
                    "conditionMatchTypeId": {
                        "$ref": "#/components/schemas/ConditionMatchType"
                    },
                    "filters": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Filter"
                        }
                    }
                },
                "type": "object"
            },
            "FilterGroupCollection": {
                "title": "Filter Group Collection",
                "description": "A collection of filters to be used for searching. Can either contain an array of FilterGroupCollections, OR an array of FilterGroups",
                "properties": {
                    "conditionMatchTypeId": {
                        "$ref": "#/components/schemas/ConditionMatchType"
                    },
                    "filterGroupCollections": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/FilterGroupCollection"
                        },
                        "example": []
                    },
                    "filterGroups": {
                        "type": [
                            "array",
                            "null"
                        ],
                        "items": {
                            "$ref": "#/components/schemas/FilterGroup"
                        }
                    }
                },
                "type": "object"
            },
            "FilterGroupSearch": {
                "title": "Filter Group Search",
                "description": "Data structure to be used when performing searches within Streamtime.",
                "properties": {
                    "wildcardSearch": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": ""
                    },
                    "offset": {
                        "type": "integer"
                    },
                    "maxResults": {
                        "type": [
                            "integer",
                            "null"
                        ],
                        "example": 30,
                        "minimum": 0
                    },
                    "sortField": {
                        "oneOf": [
                            {
                                "$ref": "#/components/schemas/SearchColumn"
                            },
                            {
                                "type": "null"
                            }
                        ],
                        "type": "integer",
                        "example": null
                    },
                    "sortAscending": {
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "filterGroupCollection": {
                        "$ref": "#/components/schemas/FilterGroupCollection"
                    }
                },
                "type": "object"
            }
        },
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "description": "The Streamtime API uses Bearer Authentication to grant users access to information. It uses security tokens called 'bearer tokens' in the request header to identify who the user is and what information they are able to access.\n\nThe bearer token can be generated one of two ways.\n\n### Via APP\nThis method is best used for customers of Streamtime who want to get access to their data. Tokens are obtained by the subscriber navigating to their Company Settings within the App and following the process to request a bearer token.\n### Via OAuth\nThis method is used for third parties who want to offer an integration between their product and any user of streamtime. If you want to connect via OAuth, get in touch with us and we will set you up as a Streamtime Partner.\n\n### Usage\nOnce you have a bearer token, it needs to be sent in the Authorization header as follows:\n\n`Authorization: Bearer {token}`\n",
                "scheme": "bearer"
            }
        }
    },
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Branches",
            "description": "Branches"
        },
        {
            "name": "Companies",
            "description": "Companies"
        },
        {
            "name": "Contacts",
            "description": "Contacts"
        },
        {
            "name": "Invoices",
            "description": "Invoices"
        },
        {
            "name": "Jobs",
            "description": "Jobs"
        },
        {
            "name": "Job Phases",
            "description": "Job Phases"
        },
        {
            "name": "Job Items",
            "description": "Job Items"
        },
        {
            "name": "Job Milestones",
            "description": "Job Milestones"
        },
        {
            "name": "Job Item Roles",
            "description": "Job Item Roles"
        },
        {
            "name": "Job Item Sub Items",
            "description": "Job Item Sub Items"
        },
        {
            "name": "Job Item Users",
            "description": "Job Item Users"
        },
        {
            "name": "Labels",
            "description": "Labels"
        },
        {
            "name": "Expenses",
            "description": "Expenses"
        },
        {
            "name": "ToDos",
            "description": "ToDos"
        },
        {
            "name": "Organisation",
            "description": "Organisation"
        },
        {
            "name": "Quotes",
            "description": "Quotes"
        },
        {
            "name": "Rate Cards",
            "description": "Rate Cards"
        },
        {
            "name": "Roles",
            "description": "Roles"
        },
        {
            "name": "Users",
            "description": "Users"
        },
        {
            "name": "Search",
            "description": "Search"
        }
    ]
}