{
  "openapi": "3.1.0",
  "info": {
    "title": "ProBlu API",
    "version": "1.0.0",
    "description": "Read-only access to a company's ProBlu data. Authenticate with an API key created by a company admin under Integrations → API. Guide: https://problu.com/developers"
  },
  "servers": [
    {
      "url": "https://api.problu.com"
    }
  ],
  "security": [
    {
      "apiKey": []
    }
  ],
  "tags": [
    {
      "name": "Account"
    },
    {
      "name": "Jobs"
    },
    {
      "name": "Daily logs"
    },
    {
      "name": "Field reports"
    },
    {
      "name": "Shared reports"
    },
    {
      "name": "Photos"
    },
    {
      "name": "Timecards"
    },
    {
      "name": "Change orders"
    },
    {
      "name": "People"
    }
  ],
  "paths": {
    "/v1/me": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "The company and key in use",
        "description": "Returns the company this key reads, its timezone, and the kinds of data the key can see. Useful to check a key works.",
        "operationId": "get_me_v1_me_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                }
              }
            }
          }
        }
      }
    },
    "/v1/jobs": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "List jobs",
        "description": "Newest first. Filter by status, or by text in the job name, general contractor or address. Needs the `jobs` scope.",
        "operationId": "list_jobs_v1_jobs_get",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Job status, for example Active or Complete.",
              "title": "Status"
            },
            "description": "Job status, for example Active or Complete."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Match job name, GC or address.",
              "title": "Q"
            },
            "description": "Match job name, GC or address."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Job_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/jobs/{job_id}": {
      "get": {
        "tags": [
          "Jobs"
        ],
        "summary": "Get a job",
        "description": "One job with its address, notes and currently assigned crew. Needs the `jobs` scope.",
        "operationId": "get_job_v1_jobs__job_id__get",
        "parameters": [
          {
            "name": "job_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Job Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JobDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/daily-logs": {
      "get": {
        "tags": [
          "Daily logs"
        ],
        "summary": "List daily logs",
        "description": "Newest log date first. Each log has what the crew wrote, structured work entries (work, people, hours), milestones and answers to the company's daily questions. Needs the `daily_logs` scope.",
        "operationId": "list_daily_logs_v1_daily_logs_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Earliest date, YYYY-MM-DD.",
              "title": "Since"
            },
            "description": "Earliest date, YYYY-MM-DD."
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Latest date, YYYY-MM-DD.",
              "title": "Until"
            },
            "description": "Latest date, YYYY-MM-DD."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Match text in the log.",
              "title": "Q"
            },
            "description": "Match text in the log."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_DailyLog_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/daily-logs/{daily_log_id}": {
      "get": {
        "tags": [
          "Daily logs"
        ],
        "summary": "Get a daily log",
        "description": "One daily log in full. Needs the `daily_logs` scope.",
        "operationId": "get_daily_log_v1_daily_logs__daily_log_id__get",
        "parameters": [
          {
            "name": "daily_log_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Daily Log Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DailyLog"
                }
              }
            }
          }
        }
      }
    },
    "/v1/daily-logs/{daily_log_id}/pdf": {
      "get": {
        "tags": [
          "Daily logs"
        ],
        "summary": "Download a daily log PDF",
        "description": "The same branded PDF ProBlu emails, with photos. Needs the `daily_logs` scope.",
        "operationId": "get_daily_log_pdf_v1_daily_logs__daily_log_id__pdf_get",
        "parameters": [
          {
            "name": "daily_log_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Daily Log Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response"
          }
        }
      }
    },
    "/v1/field-reports": {
      "get": {
        "tags": [
          "Field reports"
        ],
        "summary": "List field reports",
        "description": "Inspections, site walks and other report types the company defines. Admin-only report types need the admin_only_reports scope. Needs the `reports` scope.",
        "operationId": "list_field_reports_v1_field_reports_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Earliest date, YYYY-MM-DD.",
              "title": "Since"
            },
            "description": "Earliest date, YYYY-MM-DD."
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Latest date, YYYY-MM-DD.",
              "title": "Until"
            },
            "description": "Latest date, YYYY-MM-DD."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Match text in the report.",
              "title": "Q"
            },
            "description": "Match text in the report."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_FieldReport_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/field-reports/{field_report_id}": {
      "get": {
        "tags": [
          "Field reports"
        ],
        "summary": "Get a field report",
        "description": "One field report in full. Needs the `reports` scope.",
        "operationId": "get_field_report_v1_field_reports__field_report_id__get",
        "parameters": [
          {
            "name": "field_report_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Field Report Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FieldReport"
                }
              }
            }
          }
        }
      }
    },
    "/v1/field-reports/{field_report_id}/pdf": {
      "get": {
        "tags": [
          "Field reports"
        ],
        "summary": "Download a field report PDF",
        "description": "The branded PDF with photos. Needs the `reports` scope.",
        "operationId": "get_field_report_pdf_v1_field_reports__field_report_id__pdf_get",
        "parameters": [
          {
            "name": "field_report_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Field Report Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response"
          }
        }
      }
    },
    "/v1/shared-reports": {
      "get": {
        "tags": [
          "Shared reports"
        ],
        "summary": "List shared reports",
        "description": "Saved date-range packets a company shares with GCs and owners, with their written summaries. Needs the `reports` scope.",
        "operationId": "list_shared_reports_v1_shared_reports_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_SharedReport_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/shared-reports/{shared_report_id}": {
      "get": {
        "tags": [
          "Shared reports"
        ],
        "summary": "Get a shared report",
        "description": "One shared report with its day-by-day contents (daily logs and field reports), plus change orders in the period when the key can read them. Needs the `reports` scope.",
        "operationId": "get_shared_report_v1_shared_reports__shared_report_id__get",
        "parameters": [
          {
            "name": "shared_report_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Shared Report Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SharedReportDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/photos": {
      "get": {
        "tags": [
          "Photos"
        ],
        "summary": "List photos and files",
        "description": "Job photos, videos and documents, newest first, each with a download link that expires after an hour. Needs the `photos` scope.",
        "operationId": "list_photos_v1_photos_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "daily_log_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only media on this daily log.",
              "title": "Daily Log Id"
            },
            "description": "Only media on this daily log."
          },
          {
            "name": "field_report_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only media on this field report.",
              "title": "Field Report Id"
            },
            "description": "Only media on this field report."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_Photo_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/photos/{photo_id}": {
      "get": {
        "tags": [
          "Photos"
        ],
        "summary": "Get a photo or file",
        "description": "One photo or file with a fresh download link. Needs the `photos` scope.",
        "operationId": "get_photo_v1_photos__photo_id__get",
        "parameters": [
          {
            "name": "photo_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Photo Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Photo"
                }
              }
            }
          }
        }
      }
    },
    "/v1/time-entries": {
      "get": {
        "tags": [
          "Timecards"
        ],
        "summary": "List timecard entries",
        "description": "Newest work date first. worked_minutes already subtracts breaks. Entries on test logs and voided entries are left out. Needs the `timecards` scope.",
        "operationId": "list_time_entries_v1_time_entries_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "employee_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this person, for example user_12.",
              "title": "Employee Id"
            },
            "description": "Only this person, for example user_12."
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Earliest date, YYYY-MM-DD.",
              "title": "Since"
            },
            "description": "Earliest date, YYYY-MM-DD."
          },
          {
            "name": "until",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Latest date, YYYY-MM-DD.",
              "title": "Until"
            },
            "description": "Latest date, YYYY-MM-DD."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_TimeEntry_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/change-orders": {
      "get": {
        "tags": [
          "Change orders"
        ],
        "summary": "List change orders",
        "description": "Newest first. Drafts are hidden unless you ask for status=Draft. Needs the `change_orders` scope.",
        "operationId": "list_change_orders_v1_change_orders_get",
        "parameters": [
          {
            "name": "job_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only this job, for example job_123.",
              "title": "Job Id"
            },
            "description": "Only this job, for example job_123."
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drafts are hidden unless asked for.",
              "title": "Status"
            },
            "description": "Drafts are hidden unless asked for."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Page size, 1-100 (default 25).",
              "title": "Limit"
            },
            "description": "Page size, 1-100 (default 25)."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "`next_cursor` from the previous page.",
              "title": "Cursor"
            },
            "description": "`next_cursor` from the previous page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page_ChangeOrder_"
                }
              }
            }
          }
        }
      }
    },
    "/v1/change-orders/{change_order_id}": {
      "get": {
        "tags": [
          "Change orders"
        ],
        "summary": "Get a change order",
        "description": "One change order with its priced line items, the same ones the PDF shows. Needs the `change_orders` scope.",
        "operationId": "get_change_order_v1_change_orders__change_order_id__get",
        "parameters": [
          {
            "name": "change_order_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Change Order Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChangeOrderDetail"
                }
              }
            }
          }
        }
      }
    },
    "/v1/change-orders/{change_order_id}/pdf": {
      "get": {
        "tags": [
          "Change orders"
        ],
        "summary": "Download a change order PDF",
        "description": "The branded change order PDF. Needs the `change_orders` scope.",
        "operationId": "get_change_order_pdf_v1_change_orders__change_order_id__pdf_get",
        "parameters": [
          {
            "name": "change_order_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Change Order Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response"
          }
        }
      }
    },
    "/v1/people": {
      "get": {
        "tags": [
          "People"
        ],
        "summary": "List people",
        "description": "Names and roles (admin, office or field). No phone numbers or emails. Needs the `people` scope.",
        "operationId": "list_people_v1_people_get",
        "parameters": [
          {
            "name": "include_inactive",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "true to include deactivated",
              "title": "Include Inactive"
            },
            "description": "true to include deactivated"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Person"
                  },
                  "title": "Response List People V1 People Get"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Account": {
        "properties": {
          "company_name": {
            "type": "string",
            "title": "Company Name",
            "description": "The company this key reads."
          },
          "company_timezone": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Company Timezone"
          },
          "key_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key Name",
            "description": "The name the admin gave the key."
          },
          "key_prefix": {
            "type": "string",
            "title": "Key Prefix",
            "description": "The first characters of the key, for recognizing it."
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Scopes",
            "description": "Kinds of data this key can read."
          }
        },
        "type": "object",
        "required": [
          "company_name",
          "key_prefix",
          "scopes"
        ],
        "title": "Account"
      },
      "Address": {
        "properties": {
          "street": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Street"
          },
          "city": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "City"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "State"
          },
          "zip": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Zip"
          }
        },
        "type": "object",
        "title": "Address"
      },
      "ChangeOrder": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Change order ID, for example co_55."
          },
          "number": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Number",
            "description": "The change order number shown on the PDF."
          },
          "job_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Draft, Incomplete, Unexecuted, Executed or Cancelled."
          },
          "total_amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Amount",
            "description": "Total including markups."
          },
          "schedule_extension": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schedule Extension",
            "description": "Schedule impact, as written."
          },
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date",
            "description": "Change order date."
          },
          "date_executed": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date Executed",
            "description": "When it was approved, if executed."
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "pdf_url": {
            "type": "string",
            "title": "Pdf Url",
            "description": "REST path to the PDF."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "pdf_url"
        ],
        "title": "ChangeOrder"
      },
      "ChangeOrderDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Change order ID, for example co_55."
          },
          "number": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Number",
            "description": "The change order number shown on the PDF."
          },
          "job_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Draft, Incomplete, Unexecuted, Executed or Cancelled."
          },
          "total_amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Amount",
            "description": "Total including markups."
          },
          "schedule_extension": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Schedule Extension",
            "description": "Schedule impact, as written."
          },
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date",
            "description": "Change order date."
          },
          "date_executed": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date Executed",
            "description": "When it was approved, if executed."
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "pdf_url": {
            "type": "string",
            "title": "Pdf Url",
            "description": "REST path to the PDF."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "line_items": {
            "items": {
              "$ref": "#/components/schemas/ChangeOrderLineItem"
            },
            "type": "array",
            "title": "Line Items",
            "description": "Priced line items, as shown on the PDF."
          }
        },
        "type": "object",
        "required": [
          "id",
          "pdf_url"
        ],
        "title": "ChangeOrderDetail"
      },
      "ChangeOrderLineItem": {
        "properties": {
          "category": {
            "type": "string",
            "title": "Category",
            "description": "materials, labor, equipment or other."
          },
          "name": {
            "type": "string",
            "title": "Name"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unit"
          },
          "quantity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quantity"
          },
          "unit_price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unit Price",
            "description": "Price per unit."
          },
          "amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Amount",
            "description": "quantity × unit_price, before markups."
          }
        },
        "type": "object",
        "required": [
          "category",
          "name"
        ],
        "title": "ChangeOrderLineItem"
      },
      "DailyLog": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Daily log ID, for example dlog_456."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id",
            "description": "Job the log belongs to."
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "The work day the log covers, in the company's time zone."
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PersonRef"
              },
              {
                "type": "null"
              }
            ],
            "description": "Who submitted the log."
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content",
            "description": "The written daily log."
          },
          "work_entries": {
            "items": {
              "$ref": "#/components/schemas/WorkEntry"
            },
            "type": "array",
            "title": "Work Entries",
            "description": "Structured work, manpower and hours."
          },
          "milestones": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Milestones",
            "description": "Milestones reached that day."
          },
          "questions": {
            "items": {
              "$ref": "#/components/schemas/QuestionAnswer"
            },
            "type": "array",
            "title": "Questions",
            "description": "Answers to the company's daily questions."
          },
          "pdf_url": {
            "type": "string",
            "title": "Pdf Url",
            "description": "REST path to the PDF."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At",
            "description": "Last edit."
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "date",
          "pdf_url",
          "created_at",
          "updated_at"
        ],
        "title": "DailyLog"
      },
      "FieldReport": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Field report ID, for example frep_78."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "report_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Report Type",
            "description": "The company-defined report type, for example Site Walk."
          },
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "The day the report covers."
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PersonRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "content": {
            "type": "string",
            "title": "Content",
            "description": "The written report."
          },
          "pdf_url": {
            "type": "string",
            "title": "Pdf Url",
            "description": "REST path to the PDF."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "date",
          "content",
          "pdf_url",
          "created_at",
          "updated_at"
        ],
        "title": "FieldReport"
      },
      "Job": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Job ID, for example job_123."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Job name."
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Job status as set in ProBlu, for example Active or Complete."
          },
          "general_contractor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "General Contractor",
            "description": "General contractor name."
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes",
            "description": "Job notes shared with the crew."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the job was created."
          }
        },
        "type": "object",
        "required": [
          "id",
          "address"
        ],
        "title": "Job"
      },
      "JobDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Job ID, for example job_123."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "Job name."
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status",
            "description": "Job status as set in ProBlu, for example Active or Complete."
          },
          "general_contractor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "General Contractor",
            "description": "General contractor name."
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes",
            "description": "Job notes shared with the crew."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "When the job was created."
          },
          "crew": {
            "items": {
              "$ref": "#/components/schemas/PersonRef"
            },
            "type": "array",
            "title": "Crew",
            "description": "People currently assigned to the job."
          }
        },
        "type": "object",
        "required": [
          "id",
          "address"
        ],
        "title": "JobDetail"
      },
      "Page_ChangeOrder_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ChangeOrder"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[ChangeOrder]"
      },
      "Page_DailyLog_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/DailyLog"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[DailyLog]"
      },
      "Page_FieldReport_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/FieldReport"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[FieldReport]"
      },
      "Page_Job_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Job"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[Job]"
      },
      "Page_Photo_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/Photo"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[Photo]"
      },
      "Page_SharedReport_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SharedReport"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[SharedReport]"
      },
      "Page_TimeEntry_": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/TimeEntry"
            },
            "type": "array",
            "title": "Data"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Pass as `cursor` to get the next page; null when done."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "Page[TimeEntry]"
      },
      "Person": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Person ID, for example user_12."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "role": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Role",
            "description": "admin, office or field"
          },
          "active": {
            "type": "boolean",
            "title": "Active",
            "description": "False for deactivated people."
          }
        },
        "type": "object",
        "required": [
          "id",
          "active"
        ],
        "title": "Person"
      },
      "PersonRef": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Person ID, for example user_12."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "PersonRef"
      },
      "Photo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Photo or file ID, for example media_901."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id"
          },
          "daily_log_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Daily Log Id",
            "description": "Daily log it is attached to, if any."
          },
          "field_report_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field Report Id",
            "description": "Field report it is attached to, if any."
          },
          "media_type": {
            "type": "string",
            "title": "Media Type",
            "description": "image, video or document"
          },
          "filename": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filename"
          },
          "mime_type": {
            "type": "string",
            "title": "Mime Type"
          },
          "size_bytes": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Bytes"
          },
          "captured_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Captured At",
            "description": "When it was taken, when known."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Short-lived download link."
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "media_type",
          "mime_type",
          "created_at"
        ],
        "title": "Photo"
      },
      "QuestionAnswer": {
        "properties": {
          "question": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Question",
            "description": "One of the company's daily questions."
          },
          "answer": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Answer",
            "description": "The answer recorded for the day."
          }
        },
        "type": "object",
        "title": "QuestionAnswer"
      },
      "SharedReport": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Shared report ID, for example srep_12."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date",
            "description": "First day covered."
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date",
            "description": "Last day covered."
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary",
            "description": "Saved written summary, when one was generated."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "start_date",
          "end_date",
          "created_at"
        ],
        "title": "SharedReport"
      },
      "SharedReportChangeOrder": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id"
          },
          "number": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Number"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "total_amount": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Amount"
          },
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date"
          }
        },
        "type": "object",
        "required": [
          "id"
        ],
        "title": "SharedReportChangeOrder"
      },
      "SharedReportDay": {
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date"
          },
          "entries": {
            "items": {
              "$ref": "#/components/schemas/SharedReportEntry"
            },
            "type": "array",
            "title": "Entries"
          }
        },
        "type": "object",
        "required": [
          "date",
          "entries"
        ],
        "title": "SharedReportDay"
      },
      "SharedReportDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Shared report ID, for example srep_12."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Title"
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date",
            "description": "First day covered."
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date",
            "description": "Last day covered."
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Summary",
            "description": "Saved written summary, when one was generated."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At"
          },
          "days": {
            "items": {
              "$ref": "#/components/schemas/SharedReportDay"
            },
            "type": "array",
            "title": "Days",
            "description": "Day-by-day contents, assembled live from the records like the Shared Reports page."
          },
          "change_orders": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/SharedReportChangeOrder"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Change Orders",
            "description": "Present only when the key can read change orders."
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "start_date",
          "end_date",
          "created_at"
        ],
        "title": "SharedReportDetail"
      },
      "SharedReportEntry": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "ID of the daily log or field report."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "daily_log or field_report"
          },
          "report_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Report Type",
            "description": "Field report type, for field reports."
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PersonRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "content": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Content"
          },
          "milestones": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Milestones",
            "description": "Milestones reached that day."
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind"
        ],
        "title": "SharedReportEntry"
      },
      "TimeEntry": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Timecard entry ID, for example time_3304."
          },
          "job_id": {
            "type": "string",
            "title": "Job Id"
          },
          "job_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Job Name"
          },
          "employee": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PersonRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "work_date": {
            "type": "string",
            "format": "date",
            "title": "Work Date",
            "description": "The work day."
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Started At",
            "description": "Clock-in time. Null for hours reported as a total."
          },
          "ended_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ended At",
            "description": "Clock-out time. Null while clocked in or for reported totals."
          },
          "break_minutes": {
            "type": "integer",
            "title": "Break Minutes",
            "description": "Unpaid break minutes.",
            "default": 0
          },
          "worked_minutes": {
            "type": "integer",
            "title": "Worked Minutes",
            "description": "Minutes worked after breaks. Still counting while clocked in."
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "open or completed."
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "How it was recorded, for example assistant (by text) or webapp."
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          }
        },
        "type": "object",
        "required": [
          "id",
          "job_id",
          "work_date",
          "worked_minutes",
          "status",
          "source"
        ],
        "title": "TimeEntry"
      },
      "WorkEntry": {
        "properties": {
          "work": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Work",
            "description": "What was worked on."
          },
          "people": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "People",
            "description": "Names or a headcount, as recorded."
          },
          "total_hours": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Hours",
            "description": "Total crew hours for this work, when stated."
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes",
            "description": "Extra notes on this work."
          }
        },
        "type": "object",
        "title": "WorkEntry"
      }
    },
    "securitySchemes": {
      "apiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "pb_live_..."
      }
    }
  }
}
