{
  "openapi": "3.1.0",
  "info": {
    "title": "Millbase live organization API",
    "version": "1.0.0",
    "description": "Read-only API included on Free, Pro, and Enterprise. 60 requests/minute per key, 120 per organization and 100,000 per UTC month shared with MCP. Credentials and internal tables are excluded."
  },
  "servers": [
    {
      "url": "https://app.millbase.ca"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "Millbase API key"
      }
    }
  },
  "paths": {
    "/api/v1/resources": {
      "get": {
        "operationId": "listResources",
        "summary": "List authorized datasets and fields",
        "responses": {
          "200": {
            "description": "Resource catalog filtered by the key's permissions"
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/query": {
      "post": {
        "operationId": "queryData",
        "summary": "Query live organization data",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "resource"
                ],
                "additionalProperties": false,
                "properties": {
                  "resource": {
                    "type": "string",
                    "enum": [
                      "organization",
                      "projects",
                      "project-estimates",
                      "project-clients",
                      "project-categories",
                      "project-tags",
                      "materials",
                      "material-costs",
                      "material-lots",
                      "project-materials",
                      "inventory-activity",
                      "workstations",
                      "workers",
                      "worker-compensation",
                      "members",
                      "task-logs",
                      "task-segments",
                      "task-materials",
                      "historical-labor-costs",
                      "shifts",
                      "time-adjustments",
                      "project-files",
                      "project-folders",
                      "designs",
                      "design-assets"
                    ]
                  },
                  "fields": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 40,
                    "items": {
                      "type": "string"
                    }
                  },
                  "filters": {
                    "type": "array",
                    "maxItems": 10,
                    "items": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "field",
                        "op",
                        "value"
                      ],
                      "properties": {
                        "field": {
                          "type": "string"
                        },
                        "op": {
                          "type": "string",
                          "enum": [
                            "eq",
                            "gte",
                            "lte"
                          ]
                        },
                        "value": {
                          "type": [
                            "string",
                            "number",
                            "boolean"
                          ]
                        }
                      }
                    }
                  },
                  "limit": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 100,
                    "default": 50
                  },
                  "offset": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 1000000,
                    "default": 0
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/organization": {
      "get": {
        "operationId": "get_organization",
        "summary": "Read organization",
        "description": "Required scopes: operations:read. Fields: id, name, slug, timezone, currency, language, logo_url, accent_color, week_starts_on, daily_overtime_minutes, weekly_overtime_minutes, overtime_multiplier, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "slug",
                "timezone",
                "currency",
                "language",
                "logo_url",
                "accent_color",
                "week_starts_on",
                "daily_overtime_minutes",
                "weekly_overtime_minutes",
                "overtime_multiplier",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/projects": {
      "get": {
        "operationId": "get_projects",
        "summary": "Read projects",
        "description": "Required scopes: operations:read. Fields: id, name, number, client, description, status, progress_stage, parent_project_id, tag_ids, start_date, labor_hours_estimate, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "number",
                "client",
                "description",
                "status",
                "progress_stage",
                "parent_project_id",
                "tag_ids",
                "start_date",
                "labor_hours_estimate",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-estimates": {
      "get": {
        "operationId": "get_project_estimates",
        "summary": "Read project-estimates",
        "description": "Required scopes: financials:read. Fields: id, name, estimated_delivery_cost, estimated_installation_cost, estimated_labor_cost, estimated_materials_cost, estimated_others_cost, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "estimated_delivery_cost",
                "estimated_installation_cost",
                "estimated_labor_cost",
                "estimated_materials_cost",
                "estimated_others_cost",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-clients": {
      "get": {
        "operationId": "get_project_clients",
        "summary": "Read project-clients",
        "description": "Required scopes: people:read. Fields: project_id, contact_name, address, email, phone, website, notes, follow_up_date, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "project_id",
                "contact_name",
                "address",
                "email",
                "phone",
                "website",
                "notes",
                "follow_up_date",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-categories": {
      "get": {
        "operationId": "get_project_categories",
        "summary": "Read project-categories",
        "description": "Required scopes: operations:read. Fields: project_id, code, label, is_custom, sort_order.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "project_id",
                "code",
                "label",
                "is_custom",
                "sort_order"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-tags": {
      "get": {
        "operationId": "get_project_tags",
        "summary": "Read project-tags",
        "description": "Required scopes: operations:read. Fields: id, name, color, created_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "color",
                "created_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/materials": {
      "get": {
        "operationId": "get_materials",
        "summary": "Read materials",
        "description": "Required scopes: operations:read. Fields: id, code, name, unit, on_hand, minimum_stock, active, image_url, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "code",
                "name",
                "unit",
                "on_hand",
                "minimum_stock",
                "active",
                "image_url",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/material-costs": {
      "get": {
        "operationId": "get_material_costs",
        "summary": "Read material-costs",
        "description": "Required scopes: financials:read. Fields: id, code, name, unit_cost, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "code",
                "name",
                "unit_cost",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/material-lots": {
      "get": {
        "operationId": "get_material_lots",
        "summary": "Read material-lots",
        "description": "Required scopes: financials:read. Fields: id, material_id, quantity_received, quantity_remaining, unit_cost, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "material_id",
                "quantity_received",
                "quantity_remaining",
                "unit_cost",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-materials": {
      "get": {
        "operationId": "get_project_materials",
        "summary": "Read project-materials",
        "description": "Required scopes: financials:read. Fields: id, project_id, material_id, custom_name, quantity, remaining_quantity, unit, unit_cost, total_cost, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "project_id",
                "material_id",
                "custom_name",
                "quantity",
                "remaining_quantity",
                "unit",
                "unit_cost",
                "total_cost",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/inventory-activity": {
      "get": {
        "operationId": "get_inventory_activity",
        "summary": "Read inventory-activity",
        "description": "Required scopes: financials:read. Fields: id, material_id, project_id, project_name, task_log_id, activity_type, quantity, quantity_delta, balance_after, unit_cost, from_location, to_location, note, created_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "material_id",
                "project_id",
                "project_name",
                "task_log_id",
                "activity_type",
                "quantity",
                "quantity_delta",
                "balance_after",
                "unit_cost",
                "from_location",
                "to_location",
                "note",
                "created_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/workstations": {
      "get": {
        "operationId": "get_workstations",
        "summary": "Read workstations",
        "description": "Required scopes: operations:read. Fields: id, code, name, location, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "code",
                "name",
                "location",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/workers": {
      "get": {
        "operationId": "get_workers",
        "summary": "Read workers",
        "description": "Required scopes: people:read. Fields: id, name, email, role, worker_type, archived, station_code, active_log_id, avatar_url, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "email",
                "role",
                "worker_type",
                "archived",
                "station_code",
                "active_log_id",
                "avatar_url",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/worker-compensation": {
      "get": {
        "operationId": "get_worker_compensation",
        "summary": "Read worker-compensation",
        "description": "Required scopes: people:read, financials:read. Fields: id, name, hourly_rate, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "hourly_rate",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/members": {
      "get": {
        "operationId": "get_members",
        "summary": "Read members",
        "description": "Required scopes: people:read. Fields: id, name, email, role, avatar_url, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "name",
                "email",
                "role",
                "avatar_url",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/task-logs": {
      "get": {
        "operationId": "get_task_logs",
        "summary": "Read task-logs",
        "description": "Required scopes: operations:read. Fields: id, project_id, worker_id, workstation_id, category_code, start_at, end_at, seconds, status, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "project_id",
                "worker_id",
                "workstation_id",
                "category_code",
                "start_at",
                "end_at",
                "seconds",
                "status",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/task-segments": {
      "get": {
        "operationId": "get_task_segments",
        "summary": "Read task-segments",
        "description": "Required scopes: operations:read. Fields: id, task_log_id, start_at, end_at, seconds, created_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "task_log_id",
                "start_at",
                "end_at",
                "seconds",
                "created_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/task-materials": {
      "get": {
        "operationId": "get_task_materials",
        "summary": "Read task-materials",
        "description": "Required scopes: operations:read. Fields: task_log_id, material_id, project_material_id, code, name, quantity, unit.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "task_log_id",
                "material_id",
                "project_material_id",
                "code",
                "name",
                "quantity",
                "unit"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/historical-labor-costs": {
      "get": {
        "operationId": "get_historical_labor_costs",
        "summary": "Read historical-labor-costs",
        "description": "Required scopes: financials:read. Fields: task_log_id, labor_cost, source, captured_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "task_log_id",
                "labor_cost",
                "source",
                "captured_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/shifts": {
      "get": {
        "operationId": "get_shifts",
        "summary": "Read shifts",
        "description": "Required scopes: financials:read. Fields: id, start_at, end_at, status, total_seconds, total_earnings, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "start_at",
                "end_at",
                "status",
                "total_seconds",
                "total_earnings",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/time-adjustments": {
      "get": {
        "operationId": "get_time_adjustments",
        "summary": "Read time-adjustments",
        "description": "Required scopes: people:read. Fields: id, worker_id, date, reason, seconds, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "worker_id",
                "date",
                "reason",
                "seconds",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-files": {
      "get": {
        "operationId": "get_project_files",
        "summary": "Read project-files",
        "description": "Required scopes: operations:read. Fields: id, project_id, folder_id, name, content_type, size, status, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "project_id",
                "folder_id",
                "name",
                "content_type",
                "size",
                "status",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/project-folders": {
      "get": {
        "operationId": "get_project_folders",
        "summary": "Read project-folders",
        "description": "Required scopes: operations:read. Fields: id, project_id, name, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "project_id",
                "name",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/designs": {
      "get": {
        "operationId": "get_designs",
        "summary": "Read designs",
        "description": "Required scopes: designs:read. Fields: id, project_id, name, shared, version, created_at, updated_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "project_id",
                "name",
                "shared",
                "version",
                "created_at",
                "updated_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    },
    "/api/v1/data/design-assets": {
      "get": {
        "operationId": "get_design_assets",
        "summary": "Read design-assets",
        "description": "Required scopes: designs:read. Fields: id, design_id, name, size, status, created_at.",
        "parameters": [
          {
            "name": "fields",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated field names from this resource's catalog"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000,
              "default": 0
            }
          },
          {
            "name": "filter",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "id",
                "design_id",
                "name",
                "size",
                "status",
                "created_at"
              ]
            },
            "description": "An equality filter field; requires value"
          },
          {
            "name": "value",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Equality filter value; requires filter"
          }
        ],
        "responses": {
          "200": {
            "description": "Live rows with pagination; the authenticated credential fixes the organization.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object"
                      }
                    },
                    "pagination": {
                      "type": "object",
                      "properties": {
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "nextOffset": {
                          "type": [
                            "integer",
                            "null"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "401": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "403": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "413": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "429": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          },
          "503": {
            "description": "JSON error with error.code and error.message. Rate limits include Retry-After."
          }
        }
      }
    }
  }
}
