openapi: 3.1.0 info: title: FlipperForce Public API version: 0.0.10 description: '# FlipperForce Public API • Version 1 ## How do I request an API key? 1. [Request a Public API key.](https://tools.flipperforce.com/integrations) 2. Use the API key as an Authorization HTTP header with Bearer token: `Authorization: Bearer token-goes-here` ## Support / Help * Email: support@flipperforce.com * Chat: https://tools.flipperforce.com/ ## Rate Limits If you encounter a `429 Too Many Requests` response, you have submitted too many requests in a short amount of time. Please decrease the amount or frequency of your requests and try again. ## Changelog ### July 25, 2026 - v0.0.10 * Add support for [Activity Log](/operations/v1.workspace.activity-log.list). ### July 23, 2026 - v0.0.9 * Response format of `created_at` and `updated_at` fields now include microseconds. Old format: `2026-06-14T15:30:45Z` and new format: `2026-06-14T15:30:45.123456Z` ### July 21, 2026 - v0.0.8 * OpenAPI spec documents Bearer Token authentication strategy ### June 22, 2026 - v0.0.6 * Add support for [Project Income](/operations/v1.project.income.list). * [Create Upload Intent](/operations/v1.workspace.upload-intent.create) properly documents API response code as 201 Created instead of 200 OK. ### June 21, 2026 - v0.0.4 * Add support for [Project Expenses: Transactions](/operations/v1.project.expense-transactions.list). * Add support for [Project Expenses: Line Items](/operations/v1.project.expense-line-items.list). ### June 4, 2026 - v0.0.3 * Add support for [Project Expenses: Categories](/operations/v1.project.expense-categories.list). ### June 2, 2026 - v0.0.2 * Add support for [Expense Accounts](/operations/v1.workspace.expense-accounts.list). * Add support for [Companies](/operations/v1.workspace.companies.list). * Add support for [Company Categories](/operations/v1.workspace.companies.categories.list). ### September 3, 2025 - v0.0.1 * [Project Photo Log: Photos - Create](/operations/v1.project.photo-log.create) added support for ordering Photos by EXIF timestamp via parameter `photo_timestamp`. ### August 13, 2025 * [Create Upload Intent API](/operations/v1.workspace.upload-intent.create) now requires a new POST parameter `upload_type` noting the uploaded file''s use case. ' servers: - url: https://tools.flipperforce.com/api/v1 tags: - name: User - name: Activity Log - name: Project - name: 'Project Expenses: Transactions' - name: 'Project Expenses: Line Items' - name: 'Project Expenses: Categories' - name: Project Income - name: 'Project Photo Log: Photos' - name: Project Receipts - name: Project Updates - name: 'Project Updates: Photos' - name: Company - name: 'Company: Categories' - name: Expense Accounts - name: Attachment Upload security: - PublicApiBearerAuth: [] paths: /user/account: get: operationId: v1.user.account description: 'Details about the currently authenticated User, including their available Workspaces and Permissions.' summary: Account tags: - User responses: '200': description: '' content: application/json: schema: type: object properties: data: type: object properties: user_account: description: Authenticated User's account details $ref: '#/components/schemas/User Account' chat_hash: type: - string - 'null' description: 'Verify the User''s identity with chat support. This field is only available when using an official client.' required: - user_account - chat_hash required: - data '401': $ref: '#/components/responses/AuthenticationException' /workspace/{workspace}/activity-log/list: get: operationId: v1.workspace.activity-log.list description: "Activity Log is a record of what actions have been performed within a Workspace by its Users. This is\ \ the best way to discover recent activity that has occurred in a Workspace.\n\nWhile not every action in the software\ \ is logged here, it includes important activity across most software tools.\n\nResults use cursor-based pagination\ \ and are ordered by `performed_at` with the most recent displaying first. Use `links.next` to fetch the next page\ \ of results.\n\nThe total number of records matching the search filter parameters is returned in `meta.total_count`\ \ and is useful for reporting purposes.\n\n## Search Filters\n\nUse the [Activity Log filters endpoint](/operations/v1.workspace.activity-log.filters)\ \ to discover Projects, Users and Activity Types usable as filter values.\n\nSubmit filters as query string parameters:\n\ \n* performed_at\n* project_uuids\n* user_uuids\n* activity_types\n\nFilters are additive and are applied using AND\ \ semantics:\n\n```text\n(filter1 AND filter2 AND ...)\n```\n\nFilter values `project_uuids`, `user_uuids`, and `activity_types`\ \ use OR semantics:\n\n```text\n(\n project_uuids IN (...)\n AND user_uuids IN (...)\n AND activity_types\ \ IN (...)\n)\n```\n\n## Search Filters - performed_at for querying by time\n\n`performed_at` format follows RFC 3339\ \ using second precision and a timezone. For example, for example `2026-06-01T00:00:00Z`.\n\nTimes in UTC timezone\ \ end in `Z`. Specify timezones by using UTC offsets such as `2026-05-31T19:00:00-04:00` for Eastern Daylight Time.\n\ \nEach timestamp requires a timezone.\n\nSearch values are normalized to UTC and results are returned as UTC.\n\n\ ## Example: Filter by multiple Projects and Activity Types\n\n`project_uuids[]` and `activity_types[]` filters support\ \ finding multiple values. Like `(project1 OR project2) AND (type1 OR type2)`.\n\nYou can find logs associated with\ \ multiple Project when the Activity Type is either `project.created` or `project.stage.updated`.\n\n```text\nGET\ \ /api/v1/workspace/{workspace}/activity-log/list?project_uuids[]=9d0e1f23-4567-489a-bcde-f0123456789a&project_uuids[]=dff54a48-2113-44c5-be0c-a3a9f84c25e7&activity_types[]=project.created&activity_types[]=project.stage.updated\n\ ```\n\n## Example: Find activity performed at or after July 1, 2026 at 12:00 a.m. EDT\n\nSet an inclusive lower bound\ \ using `performed_at[gte]` (greater-than or equal to). `-04:00` is the timezone offset for Eastern Daylight Time:\n\ \n```text\nGET /api/v1/workspace/{workspace}/activity-log/list?performed_at[gte]=2026-07-01T00:00:00-04:00\n```\n\n\ ## Example: Find activity performed before July 1, 2026 at 12:00 a.m. EDT\n\nSet an exclusive upper bound using `performed_at[lt]`\ \ (less-than). `-04:00` is the timezone offset for Eastern Daylight Time:\n\n```text\nGET /api/v1/workspace/{workspace}/activity-log/list?performed_at[lt]=2026-07-01T00:00:00-04:00\n\ ```\n\n## Example: Find activity performed in July 2026 (EDT)\n\nSet a lower bound (`performed_at[gte]`) and upper\ \ bound (`performed_at[lt]`) to find activity within a single month. Notice the upper bound (exclusive) is next month\ \ August 1 at 12:00am:\n\n```text\nGET /api/v1/workspace/{workspace}/activity-log/list?performed_at[gte]=2026-07-01T00:00:00-04:00&performed_at[lt]=2026-08-01T00:00:00-04:00\n\ ```" summary: List tags: - Activity Log parameters: - name: per_page in: query description: Number of records to return at a time. schema: type: integer default: 20 minimum: 1 maximum: 100 - name: performed_at[gte] in: query description: Return Activity Log entries performed at or after this second (inclusive). Use an RFC 3339 timestamp with a timezone, such as `2026-06-01T00:00:00Z`. Explicit offsets such as `2026-05-31T19:00:00-04:00` (for EDT) are accepted and normalized to UTC. schema: type: string - name: performed_at[lt] in: query description: Return Activity Log entries performed before this second (exclusive). Use an RFC 3339 timestamp with a timezone, such as `2026-07-01T00:00:00Z`. Explicit offsets such as `2026-05-31T19:00:00-04:00` (for EDT) are accepted and normalized to UTC. schema: type: string - name: project_uuids[] in: query description: Include one or more times to find Activity for a Workspace Project. Pass repeated values like `project_uuids[]=2f7c5034-25f8-45f3-a1fc-2df5c9af1fd2&project_uuids[]=02e7f93a-33da-4dba-82a6-a0a56aadb7e4`. schema: type: array items: type: string - name: user_uuids[] in: query description: Include one or more times to find Activity for a Workspace User. Pass repeated values like `user_uuids[]=uuid-a&user_uuids[]=uuid-b`. schema: type: array items: type: string - name: activity_types[] in: query description: Include one or more times to find specific types of Activity. schema: type: array items: type: string - name: cursor in: query schema: type: string - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid responses: '200': description: Paginated set of `Activity Log` content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Activity Log List' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. total_count: type: integer description: Number of records matching the request filters before pagination. required: - path - per_page - next_cursor - prev_cursor - total_count required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/activity-log/filters: get: operationId: v1.workspace.activity-log.filters description: 'List the Project, User, and Activity Type values accepted by the [Activity Log: List](/operations/v1.workspace.activity-log.list) endpoint. Projects returned are those with at least 1 record in the Activity Log. Users returned include past and current Workspace Users, even those with no activity in the Activity Log. Activity Types returned are those with at least 1 record in the Activity Log.' summary: Filters tags: - Activity Log parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid responses: '200': description: '`Activity Log Filters`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Activity Log Filters' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/list: get: operationId: v1.project.list description: Projects available to the Authenticated User across all of their Workspaces. summary: List tags: - Project parameters: - name: sort in: query description: Order Projects by this strategy. Defaults to `updated` schema: type: - string - 'null' enum: - updated - nearby - null - name: latitude in: query description: Required when sort is `nearby` schema: type: number minimum: -90 maximum: 90 - name: longitude in: query description: Required when sort is `nearby` schema: type: number minimum: -180 maximum: 180 responses: '200': description: Array of `Project` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Project' required: - data '422': $ref: '#/components/responses/ValidationException' '401': $ref: '#/components/responses/AuthenticationException' /workspace/{workspace}/project: post: operationId: v1.project.create description: 'Create a new Project by providing its address. ### Automatically Find Property Data Your [FlipperForce Subscription](https://tools.flipperforce.com/billing) includes access to nationwide data on over 150+ million properties across the United States. [See examples of this data.](https://www.flipperforce.com/software-features/property-data) Pass the flag `fetch_property_data: true` to automatically search for Property Specs, Owner Information, Property History, Sales History and more using this Project''s address. Fetching property data will increase API call processing time. If you are creating many Projects, omit this flag to maximize throughput without searching for property data. ### Project Pipeline Stage Use the `stage` property to specify the Pipeline Stage. This controls where in your Project workflow the new Project will begin. If you omit this property the Project will begin in the "New Lead" stage.' summary: Create tags: - Project parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1ProjectCreateRequest' responses: '201': description: '`Project`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}: patch: operationId: v1.project.update description: 'Update a Project. Submit only the fields you wish to update. If updating the property address, city, state, or zip, we will automatically look up the `lat` and `lng` GPS coordinates.' summary: Update tags: - Project parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/V1ProjectUpdateRequest' responses: '200': description: '`Project`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.delete description: Permanently delete a Project and all of its data. summary: Delete tags: - Project parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-transactions/list: get: operationId: v1.project.expense-transactions.list description: 'List Expense Transactions within a Project. ## Reporting on Total Amounts Use the [Project Expenses: Line Items - List API](/operations/v1.project.expense-line-items.list) to query for total expense amounts and build expense reports. ## Finding Transactions without a Receipt Use `has_receipt=false` to list only Expense Transactions that do not have a Receipt. For example, to find Transactions whose Receipts you still need to find or follow up with a contractor to scan. Or use `has_receipt=true` to list only Expense Transactions that have a Receipt. Omitting `has_receipt` (default) returns both cases.' summary: List tags: - 'Project Expenses: Transactions' parameters: - name: per_page in: query description: Number of records to return at a time. schema: type: integer default: 20 minimum: 1 maximum: 100 - name: has_receipt in: query description: Default (omitted) returns both cases. Pass `true` to only return Transactions with a Receipt, or `false` for Transactions without a Receipt. schema: type: boolean - name: cursor in: query schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '200': description: Paginated set of `Expense Transaction` content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Transaction List' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. total_count: type: integer description: Number of records matching the request filters before pagination. required: - path - per_page - next_cursor - prev_cursor - total_count required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-transactions/create: post: operationId: v1.project.expense-transactions.create description: "Create an Expense Transaction with Line Items to track your expenses. Associate them with a [Company](/operations/v1.workspace.companies.list),\ \ [Expense Category](/operations/v1.project.expense-categories.list) and [Expense Account](/operations/v1.workspace.expense-accounts.list)\ \ to then use reporting features.\n\nExpenses are visible in the web application user interface in the Project Expense\ \ Tracker tool.\n\n## Reporting on Transactions and Expenses\n\nA Transaction has many Expense Line Items. Use the\ \ [Project Expenses: Line Items API](/operations/v1.project.expense-line-items.list) for reporting purposes like:\n\ \n* Year-to-Date Totals\n* Per Company Totals\n* Per Expense Category Totals\n* Per Expense Account Totals\n\n## Understanding\ \ FlipperForce expense tracking concepts\n\nThink of each Expense Transaction as starting from the receipt/invoice\ \ you receive from a vendor, or as each charge on a credit card statement.\n\nEach purchase or payment is stored as\ \ an Expense Transaction. And each item or service purchased on that transaction (like items on a receipt) is stored\ \ as an Expense Line Item on that Expense Transaction.\n\nFlipperForce allows you to go beyond simple accounting by\ \ tracking each Expense Line Item in an Expense Category, so you can compare your Budget vs Actuals spending for each\ \ category.\n\n## Setup 1: Workspace Companies\n\nThe [Companies API](/operations/v1.workspace.companies.list) is\ \ for tracking each vendor you do business with. For example, The Home Depot where you purchase materials, or your\ \ most reliable general contractor who invoices you for completed jobs.\n\nCompanies are shared across all Projects\ \ in your Workspace, so you can track your spending with every vendor across every Project.\n\nCreate a Company record\ \ for each vendor you make purchases from.\n\n## Setup 2: Workspace Expense Accounts\n\nThe [Expense Accounts API](/operations/v1.workspace.expense-accounts.list)\ \ is for tracking each credit card, bank account, Venmo/PayPal account, or payment method used to pay for expenses.\n\ \nExpense Accounts are shared across all Projects in your Workspace, so you can track your spending for every Account.\n\ \nCreate an Expense Account record for each account your business makes purchases from.\n\n## Setup 3: Project Expense\ \ Categories\n\nThe [Project Expenses: Categories API](/operations/v1.project.expense-categories.list) is for categorizing\ \ your spending for each Expense Line Item. For example, Interior Doors, Kitchen, or Appliances.\n\n**NOTE:** Each\ \ Project has a separate list of Expense Categories. You must use the Expense Category associated with the Project\ \ where you are creating expenses.\n\nProject Expense Categories must be added from the Project's Deal Analysis -\ \ Repair Estimator tool. For example, within the \"Exteriors\" top-level category, create a new category called \"\ Roofing\" to track expenses like shingles, nails, underlayment, etc.\n\nThe fastest way to create repair categories\ \ (and thus expense categories) is by loading a Repair Estimator Template onto the Project.\n\n## Example: Creating\ \ an Expense Transaction with a Receipt\n\nWith setup complete, you can now create your first Expense Transaction.\n\ \nLet's use an example purchase from The Home Depot. Assume you received a receipt that has the following data:\n\n\ * Company: The Home Depot\n* Date: 06/13/26\n* Items:\n * 1/2 in. x 4 ft. x 8 ft. Plywood Sheet - $28.45\n *\ \ Deck Screws, 1 lb. Box - $9.97\n * 1 Gal. Interior Eggshell Paint - $29.98\n * 20V Cordless Drill - $42.67\n\ * Subtotal: $111.07\n* Sales Tax (8.45%): $9.38\n* Grand Total: $120.45\n* Chip Read XXXXXXXXXXX4213 VISA\n\n### Step\ \ 1: Upload the Receipt (optional)\n\nFollow the documentation in the [Project Receipts: Create API](/operations/v1.project.receipts.create)\ \ for uploading your Receipt file.\n\nUploading a Receipt is optional. You can also attach it later by updating the\ \ Expense Transaction.\n\nThe rest of the example will assume you received an HTTP Response that has the uploaded\ \ Receipt's `uuid`, which can be associated with the Transaction below.\n\n### Step 2: Find The Home Depot in your\ \ list of Companies\n\nUse the [Companies API](/operations/v1.workspace.companies.list) to find all Companies in your\ \ Workspace and locate the `uuid` of The Home Depot in your Workspace.\n\n### Step 3: Find Visa 4213 credit card in\ \ your list of Expense Accounts\n\nUse the [Expense Accounts: List API](/operations/v1.workspace.expense-accounts.list)\ \ to find the `uuid` of your Visa credit card with card number 4213.\n\n### Step 4: Find relevant Expense Categories\ \ for each item\n\nUse the [Project Expenses: Categories: List API](/operations/v1.project.expense-categories.list)\ \ to find the `uuid` of the Expense Categories relevant to each item you purchased.\n\nThe example Home Depot line\ \ items could be the following:\n\n* 1/2 in. x 4 ft. x 8 ft. Plywood Sheet - \"Framing\"\n* Deck Screws, 1 lb. Box\ \ - \"Decks/Porches\"\n* 1 Gal. Interior Eggshell Paint - \"Bathrooms\"\n* 20V Cordless Drill - \"Tools\"\n\n### Step\ \ 5: Create the Expense Transaction\n\nThe following example request associates the Company (The Home Depot), Expense\ \ Account (Visa 4213), Expense Categories, and Receipt from the previous instructions.\n\nSubmit each purchased item\ \ as the `expenses` array.\n\nExample Request:\n\n```json\nPOST /api/v1/project/41a5aedc-a598-403b-9499-a74dc50544e8/expense-transactions/create\n\ \n{\n \"date\": \"2026-06-13\",\n \"company_uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"expense_account_uuid\"\ : \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"total_tax\": 9.38,\n \"receipt_uuid\": \"7f8b5b9e-3e2a-4d8d-9f1b-5e88277d8d8d\"\ ,\n \"expenses\": [\n {\n \"name\": \"1/2 in. x 4 ft. x 8 ft. Plywood Sheet\",\n \"amount\": 28.45,\n\ \ \"class\": \"material\",\n \"expense_category_uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\n },\n\ \ {\n \"name\": \"Deck Screws, 1 lb. Box\",\n \"amount\": 9.97,\n \"class\": \"material\",\n \ \ \"expense_category_uuid\": \"4f5a6b7c-8d9e-4f01-9123-3456789abcde\"\n },\n {\n \"name\": \"1 Gal. Interior\ \ Eggshell Paint\",\n \"amount\": 29.98,\n \"class\": \"material\",\n \"expense_category_uuid\": \"\ 5a6b7c8d-9e0f-4012-a234-456789abcdef\"\n },\n {\n \"name\": \"20V Cordless Drill\",\n \"amount\":\ \ 42.67,\n \"class\": \"other\",\n \"expense_category_uuid\": \"6b7c8d9e-0f12-4123-b345-56789abcdef0\"\n\ \ }\n ]\n}\n```\n\nExample Response:\n\n```json\nHTTP/1.1 201 Created\n\n{\n \"data\": {\n \"uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\"\ ,\n \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n \ \ \"sequence_number\": 104,\n \"receipt_uuid\": \"7f8b5b9e-3e2a-4d8d-9f1b-5e88277d8d8d\",\n \"subtotal\": 111.07,\n\ \ \"total_tax\": 9.38,\n \"grand_total\": 120.45,\n \"expenses\": [\n {\n \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\"\ ,\n \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-14T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-13\",\n \ \ \"invoice_number\": null,\n \"name\": \"1/2 in. x 4 ft. x 8 ft. Plywood Sheet\",\n \"class\"\ : \"material\",\n \"amount\": 28.45,\n \"tax\": 2.40,\n \"total\": 30.85,\n \"expense_account\"\ : {\n \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n\ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The\ \ Home Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\ ,\n \"name\": \"Interior - Framing\"\n }\n },\n {\n \"uuid\": \"0e1f2345-6789-4abc-9def-0123456789ab\"\ ,\n \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-14T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-13\",\n \ \ \"invoice_number\": null,\n \"name\": \"Deck Screws, 1 lb. Box\",\n \"class\": \"material\",\n\ \ \"amount\": 9.97,\n \"tax\": 0.84,\n \"total\": 10.81,\n \"expense_account\": {\n \ \ \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n \ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The Home\ \ Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"4f5a6b7c-8d9e-4f01-9123-3456789abcde\"\ ,\n \"name\": \"Exterior - Decks/Porches\"\n }\n },\n {\n \"uuid\": \"1f234567-89ab-4cde-8f01-23456789abcd\"\ ,\n \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-14T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-13\",\n \ \ \"invoice_number\": null,\n \"name\": \"1 Gal. Interior Eggshell Paint\",\n \"class\": \"material\"\ ,\n \"amount\": 29.98,\n \"tax\": 2.53,\n \"total\": 32.51,\n \"expense_account\": {\n\ \ \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n \ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The Home\ \ Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"5a6b7c8d-9e0f-4012-a234-456789abcdef\"\ ,\n \"name\": \"Interior - Bathrooms\"\n }\n },\n {\n \"uuid\": \"23456789-abcd-4ef0-9123-456789abcdef\"\ ,\n \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-14T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-13\",\n \ \ \"invoice_number\": null,\n \"name\": \"20V Cordless Drill\",\n \"class\": \"other\",\n \ \ \"amount\": 42.67,\n \"tax\": 3.61,\n \"total\": 46.28,\n \"expense_account\": {\n \ \ \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n \"\ company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The Home Depot\"\ \n },\n \"expense_category\": {\n \"uuid\": \"6b7c8d9e-0f12-4123-b345-56789abcdef0\",\n \ \ \"name\": \"Other - Tools\"\n }\n }\n ]\n }\n}\n```\n\n## How taxes are handled\n\nMost receipts\ \ do not explicitly list how much tax was incurred for each item. But a receipt only lists the total tax charged as\ \ a percentage of the subtotal.\n\nFlipperForce automatically distributes the Total Tax across each line item amount.\n\ \nThis allows you to account for spending on taxes as part of your total construction costs.\n\nRead the following\ \ example transaction for how taxes are distributed:\n\n```monospace\nNails $100\nDecking $300\nShingles\ \ $600\n\n Subtotal $1000\n Total Tax $100\n\n Grand Total $1100\n```\n\nFlipperForce will automatically\ \ distribute the Total Tax across each Expense Line Item when you save the Transaction:\n\n```monospace\nItem \ \ | Amount | Tax | Total\n--------------+------------+-------+-------\nNails | $100 | $10\ \ | $110\nDecking | $300 | $30 | $330\nShingles | $600 | $60 | $660\n```\n\nThe Tax\ \ across all items still totals $100 (which was entered as Total Tax), and the Transaction Grand Total is computed\ \ as 110 + 330 + 660 = 1100.\n\n## Default fields from the root level\n\nSome fields submitted at the root level will\ \ be automatically applied to each item in the `expenses` array when omitted from the expense item.\n\n* `date`\n\ * `invoice_number`\n* `company_uuid`\n* `expense_account_uuid`\n* `expense_category_uuid`\n\nHere is an example using\ \ the `date` field and overwriting it:\n\n```json\n{\n \"date\": \"2026-06-13\",\n \"expenses\": [\n {\n \ \ // Unnecessary because the root level uses \"date\"\n \"date\": \"2026-06-13\",\n },\n {\n // But\ \ can be submitted with a different \"date\"\n // to override the root level value\n \"date\": \"2026-07-25\"\ ,\n },\n ]\n}\n```\n\n## Reporting on Total Amounts\n\nUse the [Project Expenses: Line Items - List API](/operations/v1.project.expense-line-items.list)\ \ to query for total expense amounts and build expense reports." summary: Create tags: - 'Project Expenses: Transactions' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Create Expense Transaction Request' responses: '201': description: '`Expense Transaction`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Transaction' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-transactions/{transactionUuid}: get: operationId: v1.project.expense-transactions.show description: Retrieve a single Expense Transaction with Expense line items. summary: Show tags: - 'Project Expenses: Transactions' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: transactionUuid in: path required: true description: Expense Transaction UUID schema: type: string format: uuid responses: '200': description: '`Expense Transaction`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Transaction' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null patch: operationId: v1.project.expense-transactions.update description: 'Update an Expense Transaction and submitted Expense line items. Omitted existing Expenses are not deleted. When `total_tax` is omitted, the Transaction''s current total tax is preserved and redistributed across all Expense line items after submitted changes are applied.' summary: Update tags: - 'Project Expenses: Transactions' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: transactionUuid in: path required: true description: Expense Transaction UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Update Expense Transaction Request' responses: '200': description: '`Expense Transaction`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Transaction' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.expense-transactions.delete description: Delete an Expense Transaction and its Expense line items. summary: Delete tags: - 'Project Expenses: Transactions' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: transactionUuid in: path required: true description: Expense Transaction UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-line-items/list: get: operationId: v1.project.expense-line-items.list description: "List Expense line items within a Project.\n\nExpense Line Items are the individual charges within an Expense\ \ Transaction, such as the items purchased and listed on a receipt.\n\n## Reporting on Total Amounts\n\nSee the `data.totals`\ \ property in the response for the sum total of various Expense Line Item fields (before pagination).\n\n* `data.totals.amount`\ \ - Sum of all `amount` values for all matching Expenses (excludes tax)\n* `data.totals.tax` - Sum of all `tax` values\ \ for all matching Expenses\n* `data.totals.total` - Sum of all `total` values for all matching Expenses (amount +\ \ tax)\n\nThe total number of records matching the query parameters is in `meta.total_count`.\n\n## Filter by date\ \ range\n\n Supports limiting to date ranges by using a combination of these operators:\n\n * date[gt] - greater than\n\ \ * date[gte] - greater than or equal to\n * date[lt] - less than\n * date[lte] - less than or equal to\n\n## Example:\ \ Find Expenses for a specific Date\n\n```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?date=2025-09-15\n\ ```\n\n## Example: Year-to-Date Totals\n\nRequest Expenses using a year-to-date range, then read the returned totals.\n\ \nFor example, Expenses year-to-date through June 19, 2026.\n\n* date[gte]=2026-01-01\n* date[lte]=2026-06-19\n\n\ ```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?date[gte]=2026-01-01&date[lte]=2026-06-19\n```\n\n\ Example response body excerpt:\n\n```json\n{\n \"data\": {\n \"totals\": {\n \"amount\": 475.25,\n \"\ tax\": 40.14,\n \"total\": 515.39\n },\n \"expenses\": [\n {\n \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\"\ ,\n \"created_at\": \"2026-06-19T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-19T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-19\",\n \ \ \"invoice_number\": \"HD-4213\",\n \"name\": \"Architectural roof shingles\",\n \"class\": \"\ material\",\n \"amount\": 475.25,\n \"tax\": 40.14,\n \"total\": 515.39,\n \"expense_account\"\ : {\n \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n\ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The\ \ Home Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\ ,\n \"name\": \"Roofing\"\n }\n }\n ]\n }\n}\n```\n\n## Example: Per Company Totals\n\nUse\ \ the [Companies List API](/operations/v1.workspace.companies.list) to find the UUID of the Company you want, then\ \ provide the UUID with filter `company_uuids[]`.\n\nThen read the response field `data.totals` to find the total.\n\ \n```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?company_uuids[]=2d3e4f5a-6b7c-4d8e-9f01-123456789abc\n\ ```\n\nExample response body excerpt:\n\n```json\n{\n \"data\": {\n \"totals\": {\n \"amount\": 475.25,\n\ \ \"tax\": 40.14,\n \"total\": 515.39\n },\n \"expenses\": [\n {\n \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\"\ ,\n \"created_at\": \"2026-06-19T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-19T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-19\",\n \ \ \"invoice_number\": \"HD-4213\",\n \"name\": \"Architectural roof shingles\",\n \"class\": \"\ material\",\n \"amount\": 475.25,\n \"tax\": 40.14,\n \"total\": 515.39,\n \"expense_account\"\ : {\n \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n\ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The\ \ Home Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\ ,\n \"name\": \"Roofing\"\n }\n }\n ]\n }\n}\n```\n\n## Example: Per Expense Category Totals\n\ \nUse the [Project Expenses: Categories List API](/operations/v1.project.expense-categories.list) to find the UUID\ \ of the Category you want, then provide the UUID with filter `expense_category_uuids[]`.\n\nThen read the response\ \ field `data.totals` to find the total.\n\n```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?expense_category_uuids[]=3e4f5a6b-7c8d-4e9f-8012-23456789abcd\n\ ```\n\nExample response body excerpt:\n\n```json\n{\n \"data\": {\n \"totals\": {\n \"amount\": 475.25,\n\ \ \"tax\": 40.14,\n \"total\": 515.39\n },\n \"expenses\": [\n {\n \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\"\ ,\n \"created_at\": \"2026-06-19T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-19T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-19\",\n \ \ \"invoice_number\": \"HD-4213\",\n \"name\": \"Architectural roof shingles\",\n \"class\": \"\ material\",\n \"amount\": 475.25,\n \"tax\": 40.14,\n \"total\": 515.39,\n \"expense_account\"\ : {\n \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n\ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The\ \ Home Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\ ,\n \"name\": \"Roofing\"\n }\n }\n ]\n }\n}\n```\n\n## Example: Per Expense Account Totals\n\ \nUse the [Expense Accounts List API](/operations/v1.workspace.expense-accounts.list) to find the UUID of the Account\ \ you want, then provide the UUID with filter `expense_account_uuids[]`.\n\nThen read the response field `data.totals`\ \ to find the total.\n\n```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?expense_account_uuids[]=1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\n\ ```\n\nExample response body excerpt:\n\n```json\n{\n \"data\": {\n \"totals\": {\n \"amount\": 475.25,\n\ \ \"tax\": 40.14,\n \"total\": 515.39\n },\n \"expenses\": [\n {\n \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\"\ ,\n \"created_at\": \"2026-06-19T15:30:00.000000Z\",\n \"updated_at\": \"2026-06-19T15:30:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2026-06-19\",\n \ \ \"invoice_number\": \"HD-4213\",\n \"name\": \"Architectural roof shingles\",\n \"class\": \"\ material\",\n \"amount\": 475.25,\n \"tax\": 40.14,\n \"total\": 515.39,\n \"expense_account\"\ : {\n \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n \"name\": \"Visa 4213\"\n },\n\ \ \"company\": {\n \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n \"name\": \"The\ \ Home Depot\"\n },\n \"expense_category\": {\n \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\ ,\n \"name\": \"Roofing\"\n }\n }\n ]\n }\n}\n```\n\n## Example: Expenses missing certain\ \ data\n\nThe API supports flags for returning Expenses without certain data:\n\n* Company: `has_company=false`\n\ * Expense Account: `has_expense_account=false`\n* Expense Category: `has_expense_category=false`\n* Class: `has_class=false`\n\ \nFor example, use `has_expense_account=false` to find Expenses without an Expense Account set:\n\n```text\nGET /api/v1/project/{projectV1}/expense-line-items/list?has_expense_account=false\n\ ```\n\nExample response body excerpt:\n\n```json\n{\n \"data\": {\n \"totals\": {\n \"amount\": 125.75,\n\ \ \"tax\": 10.56,\n \"total\": 136.31\n },\n \"expenses\": [\n {\n \"uuid\": \"0e1f2345-6789-4abc-9def-0123456789ab\"\ ,\n \"created_at\": \"2025-12-31T15:35:00.000000Z\",\n \"updated_at\": \"2025-12-31T15:35:00.000000Z\"\ ,\n \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n \"date\": \"2025-12-31\",\n \ \ \"invoice_number\": null,\n \"name\": \"Unassigned roofing receipt\",\n \"class\": \"other\"\ ,\n \"amount\": 125.75,\n \"tax\": 10.56,\n \"total\": 136.31,\n \"expense_account\":\ \ null,\n \"company\": null,\n \"expense_category\": null\n }\n ]\n }\n}\n```" summary: List tags: - 'Project Expenses: Line Items' parameters: - name: per_page in: query description: Number of records to return at a time. schema: type: integer default: 20 minimum: 1 maximum: 100 - name: date in: query description: Expense date in `YYYY-MM-DD` format for exact matching. Supports date ranges via by using operators like `date[gt]` (greater than), `date[gte]` (greater than or equal to), `date[lt]` (less than), and `date[lte]` (less than or equal to). schema: type: string - name: company_uuids[] in: query description: Company UUID assigned to Expenses. Pass repeated values like `company_uuids[]=uuid-a&company_uuids[]=uuid-b`. schema: type: array items: type: string - name: expense_account_uuids[] in: query description: Expense Account UUID assigned to Expenses. Pass repeated values like `expense_account_uuids[]=uuid-a&expense_account_uuids[]=uuid-b`. schema: type: array items: type: string - name: expense_category_uuids[] in: query description: Expense Category UUID assigned to Expenses. Pass repeated values like `expense_category_uuids[]=uuid-a&expense_category_uuids[]=uuid-b`. schema: type: array items: type: string - name: classes[] in: query description: 'Expense Class. Allowed values: `labor`, `material`, `labor-and-material`, `other`.' schema: type: array items: type: string - name: has_company in: query description: Whether to return only Expenses with or without an assigned Company. schema: type: boolean - name: has_expense_account in: query description: Whether to return only Expenses with or without an assigned Expense Account. schema: type: boolean - name: has_expense_category in: query description: Whether to return only Expenses with or without an assigned Expense Category. schema: type: boolean - name: has_class in: query description: Whether to return only Expenses with or without an assigned Class. schema: type: boolean - name: cursor in: query schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: date[gt] in: query description: 'Return Expense Line Items after this date, excluding the given date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[gte] in: query description: 'Return Expense Line Items on or after this date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[lt] in: query description: 'Return Expense Line Items before this date, excluding the given date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[lte] in: query description: 'Return Expense Line Items on or before this date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD responses: '200': description: Paginated set of `Expense Line Item` content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Line Item List' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. total_count: type: integer description: Number of records matching the request filters before pagination. required: - path - per_page - next_cursor - prev_cursor - total_count required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-line-items/{expenseUuid}: get: operationId: v1.project.expense-line-items.show description: Retrieve a single Expense line item. summary: Show tags: - 'Project Expenses: Line Items' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: expenseUuid in: path required: true description: Expense UUID schema: type: string format: uuid responses: '200': description: '`Expense Line Item`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Line Item' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null patch: operationId: v1.project.expense-line-items.update description: Update a single Expense line item and return the parent Expense Transaction. summary: Update tags: - 'Project Expenses: Line Items' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: expenseUuid in: path required: true description: Expense UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/Update Expense Line Item Request' responses: '200': description: '`Expense Transaction`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Transaction' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.expense-line-items.delete description: 'Delete a single Expense line item and return the parent Expense Transaction. If the deleted Expense was the Expense Transaction''s final line item and the Expense Transaction has no Receipt, the Expense Transaction is also deleted and a tombstone response is returned.' summary: Delete tags: - 'Project Expenses: Line Items' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: expenseUuid in: path required: true description: Expense UUID schema: type: string format: uuid responses: '200': description: '`Expense Transaction` `Expense Line Item Delete Tombstone`' content: application/json: schema: anyOf: - type: object properties: data: $ref: '#/components/schemas/Expense Transaction' required: - data - type: object properties: data: $ref: '#/components/schemas/Expense Line Item Delete Tombstone' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/expense-categories/list: get: operationId: v1.project.expense-categories.list description: 'List Expense Categories within a Project. Each Expense line item on an Expense Transaction can be assigned an Expense Category for cost management. See the Project''s Budget vs Actual tool or Expense Report to view expense category totals across the Project.' summary: List tags: - 'Project Expenses: Categories' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '200': description: Array of `Expense Category` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Expense Category' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/income/list: get: operationId: v1.project.income.list description: 'List Income records within a Project. Income is visible in the web application user interface in the Project Income Tracker tool. ## Reporting on Total Amounts See the `data.totals` property in the response for the sum total of Income before pagination. * `data.totals.amount` - Sum of all `amount` values for all matching Income records The total number of records matching the query parameters is in `meta.total_count`. ## Filter by date range Supports limiting to date ranges by using a combination of these operators: * date[gt] - greater than * date[gte] - greater than or equal to * date[lt] - less than * date[lte] - less than or equal to ## Example: Year-to-Date Income Request using a year-to-date range, then read the returned totals. For example, Income year-to-date through June 19, 2026. * date[gte]=2026-01-01 * date[lte]=2026-06-19 ```text GET /api/v1/project/{projectV1}/income/list?date[gte]=2026-01-01&date[lte]=2026-06-19 ``` ## Example: Rental Income ```text GET /api/v1/project/{projectV1}/income/list?types[]=rental ```' summary: List tags: - Project Income parameters: - name: per_page in: query description: Number of records to return at a time. schema: type: integer default: 20 minimum: 1 maximum: 100 - name: date in: query description: Income Date in `YYYY-MM-DD` format for exact matching. Supports date ranges via by using operators like `date[gt]` (greater than), `date[gte]` (greater than or equal to), `date[lt]` (less than), and `date[lte]` (less than or equal to). schema: type: string - name: types[] in: query description: 'Income type. Allowed values: `rental`, `resale`, `other`.' schema: type: array items: type: string - name: cursor in: query schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: date[gt] in: query description: 'Return Income records after this date, excluding the given date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[gte] in: query description: 'Return Income records on or after this date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[lt] in: query description: 'Return Income records before this date, excluding the given date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD - name: date[lte] in: query description: 'Return Income records on or before this date. Format: `YYYY-MM-DD`.' schema: type: string format: YYYY-MM-DD responses: '200': description: Paginated set of `Income` content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Income List' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. total_count: type: integer description: Number of records matching the request filters before pagination. required: - path - per_page - next_cursor - prev_cursor - total_count required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/income/create: post: operationId: v1.project.income.create description: 'Create an Income record to track income received for a Project. Income is visible in the web application user interface in the Project Income Tracker tool.' summary: Create tags: - Project Income parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Create Income Request' responses: '201': description: '`Income`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Income' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/income/{incomeUuid}: get: operationId: v1.project.income.show description: Retrieve a single Income record. summary: Show tags: - Project Income parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: incomeUuid in: path required: true description: Income UUID schema: type: string format: uuid responses: '200': description: '`Income`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Income' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null patch: operationId: v1.project.income.update description: Update a single Income record. summary: Update tags: - Project Income parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: incomeUuid in: path required: true description: Income UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/Update Income Request' responses: '200': description: '`Income`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Income' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.income.delete description: Delete an Income record. summary: Delete tags: - Project Income parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: incomeUuid in: path required: true description: Income UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/photo-log: get: operationId: v1.project.photo-log.list description: 'List all photos in a Project''s Photo Log. Photos are grouped by the date they were taken.' summary: List tags: - 'Project Photo Log: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '200': description: '`Project Photo Log`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Photo Log' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/photo-log/create: post: operationId: v1.project.photo-log.create description: 'Create a Photo Log Photo using an uploaded photo from an [Upload Intent](/operations/v1.workspace.upload-intent.create). Submitting the `photo_timestamp` parameter as a Unix timestamp in seconds (not milliseconds) since the Unix epoch will allow us to order your photos based on when they were captured. You can derive this from your photo''s EXIF data or the timestamp the photo file was created.' summary: Create tags: - 'Project Photo Log: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: type: object properties: intent_uuid: type: string format: uuid description: '[Upload Intent](/operations/v1.workspace.upload-intent.create) with a successfully uploaded photo' batch_uuid: type: string format: uuid description: Imagine a User has selected 3 photos from their device, and captured 2 new photos with their camera. They tap Upload to begin uploading that batch of photos. API clients should generate a single Batch UUID (version 4) at that time, and submit that same Batch UUID for each of those 5 API calls. The API uses Batch UUID to associate those 5 photos together as one Activity Log entry. photo_date: type: string format: YYYY-MM-DD description: Date this Photo was captured. Photos with the same Date display ordered next to each other in the Photo Log. photo_timestamp: type: integer description: Timestamp when this Photo was captured. Represented in seconds since Unix epoch. Allows us to order photos in the Photo Log based on when they were captured. photo_description: type: string description: Text displayed alongside the photo. Useful for communicating more context about what is in the photo or that the viewer would find informative. required: - intent_uuid - photo_date responses: '201': description: '`Project Photo Log: Photo`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Photo Log: Photo' required: - data '422': $ref: '#/components/responses/ValidationException' '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/photo-log/{photoUuid}: patch: operationId: v1.project.photo-log.update description: Update the metadata for a single Photo Log Photo. summary: Update tags: - 'Project Photo Log: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: photoUuid in: path required: true description: Photo Log Photo UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/V1PhotoLogUpdateRequest' responses: '200': description: '`Project Photo Log: Photo`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Photo Log: Photo' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.photo-log.destroy description: Delete a Photo Log Photo. summary: Delete tags: - 'Project Photo Log: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: photoUuid in: path required: true description: Photo Log Photo UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/receipts/list: get: operationId: v1.project.receipts.list description: 'List Receipts within a Project. Results are ordered by `issue_date`, then `created_at` time. Results use cursor pagination.' summary: List tags: - Project Receipts parameters: - name: per_page in: query description: Number of records to return at a time. schema: type: integer default: 20 minimum: 1 maximum: 1000 - name: cursor in: query schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '200': description: Paginated set of `Receipt` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Receipt' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. required: - path - per_page - next_cursor - prev_cursor required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/receipts/create: post: operationId: v1.project.receipts.create description: 'Store an uploaded file as a Project Receipt by using an [Upload Intent](/operations/v1.workspace.upload-intent.create) for each file. This endpoint does not currently support associating the Receipt with Expenses. Only storing the file as a Receipt. ## Associating to Expenses A Receipt can be associated to a [Project Expense Transaction](/operations/v1.project.expense-transactions.create) so you can track which Expenses and Transactions are accounted for on the Receipt. A single Receipt can only be associated to one Transaction. ## FlipperForce Field - Upload Receipts using our mobile app If you have Receipt files or photos on your phone, uploading Receipts using our mobile app "FlipperForce Field" may be easier than manually instrumenting our Public API. * [iOS Mobile App](https://apps.apple.com/us/app/flipperforce/id6746277826) * [Android Mobile App](https://play.google.com/store/apps/details?hl=en_US&id=com.flipperforce)' summary: Create tags: - Project Receipts parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1DocumentsReceiptCreateRequest' responses: '201': description: '`Receipt`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Receipt' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/receipts/{receiptUuid}: patch: operationId: v1.project.receipts.update description: Update metadata of a Project Receipt. summary: Update tags: - Project Receipts parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: receiptUuid in: path required: true description: Receipt UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/V1DocumentsReceiptUpdateRequest' responses: '200': description: '`Receipt`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Receipt' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.receipts.delete description: Delete a Project Receipt. summary: Delete tags: - Project Receipts parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: receiptUuid in: path required: true description: Receipt UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/updates/list: get: operationId: v1.project.updates.list description: 'Project Updates for a single Project. Results use cursor-based pagination. Response path `links.next` will either be a URL (string) to fetch the next page of results, or will be `null` if no more results exist.' summary: List tags: - Project Updates parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '200': description: Paginated set of `Project Update` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Project Update' links: type: object properties: first: type: - string - 'null' last: type: - string - 'null' prev: type: - string - 'null' next: type: - string - 'null' required: - first - last - prev - next meta: type: object properties: path: type: - string - 'null' description: Base path for paginator generated URLs. per_page: type: integer description: Number of items shown per page. minimum: 0 next_cursor: type: - string - 'null' description: The "cursor" that points to the next set of items. prev_cursor: type: - string - 'null' description: The "cursor" that points to the previous set of items. required: - path - per_page - next_cursor - prev_cursor required: - data - links - meta '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/updates/create: post: operationId: v1.project.updates.create description: 'Store a new Project Update that describes a real-time progress report and daily log to keep your team, business partners, and lenders informed and aligned as your Project progresses. - [Read more about Project Updates](https://www.flipperforce.com/software-features/project-updates)' summary: Create tags: - Project Updates parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1ProjectProgressUpdateRequest' responses: '201': description: '`Project Update`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Update' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/updates/{updateUuid}: put: operationId: v1.project.updates.update description: 'Update an existing Project Update. - [Read more about Project Updates](https://www.flipperforce.com/software-features/project-updates)' summary: Update tags: - Project Updates parameters: - name: updateUuid in: path required: true schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1ProjectProgressUpdateRequest' responses: '200': description: '`Project Update`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Update' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.project.updates.destroy description: 'Delete an existing Project Update. - [Read more about Project Updates](https://www.flipperforce.com/software-features/project-updates)' summary: Delete tags: - Project Updates parameters: - name: updateUuid in: path required: true schema: type: string - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/updates/{updateUuid}/photos: post: operationId: v1.project.updates.photos.create description: 'Attach a Photo to this Update using an uploaded photo from an [Upload Intent](/operations/v1.workspace.upload-intent.create) or an existing Photo such as from the [Photo Log](/operations/v1.project.photo-log.list). Photos can originate from several use cases: * Upload Intent - Submit `intent_uuid` to use a newly uploaded photo * Existing File - Submit `file_uuid` to use an existing File. Note: the File must already be associated with this Project. Submitting a `file_uuid` will duplicate that File on the backend so it can be included in the Progress Update. The returned `data.photo.uuid` will not be the submitted `file_uuid` because it is the duplicated File.' summary: Create tags: - 'Project Updates: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: updateUuid in: path required: true description: Project Update UUID to add Photos to schema: type: string format: uuid requestBody: content: application/json: schema: type: object properties: intent_uuid: type: string description: 'Optional. Submit this or `file_uuid`. [Upload Intent](/operations/v1.workspace.upload-intent.create) with a recently uploaded photo.' file_uuid: type: string description: 'Optional. Submit this or `intent_uuid`. [File](/schemas/File) from another use case, such as a File from a Photo Log Photo. Note that this is the low-level File UUID, not the Photo Log Photo UUID. For example, submit `photo_log_photo.photo.uuid` and not `photo_log_photo.uuid`' photo_order: type: integer description: 'Optional. Sequence this Photo should be displayed relative to other photos that have the same Photo Date. If left blank, photo will display before other existing photos.' responses: '201': description: '`Project Update: Photo`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Project Update: Photo' required: - data '422': $ref: '#/components/responses/ValidationException' '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /project/{projectV1}/updates/photos/{photoUuid}: delete: operationId: v1.project.updates.photos.destroy description: 'Remove photo from a Progress Update. The Photo will remain available in FlipperForce within Project Documents, but will not be listed with the Progress Update.' summary: Remove tags: - 'Project Updates: Photos' parameters: - name: projectV1 in: path required: true description: Project UUID schema: type: string format: uuid - name: photoUuid in: path required: true description: Project Update Photo UUID to delete schema: type: string format: uuid responses: '204': description: No content '404': $ref: '#/components/responses/ModelNotFoundException' '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/list: get: operationId: v1.workspace.companies.list description: 'List Companies within a Workspace, ordered by name. Companies are vendors, businesses, contractors, subcontractors, or suppliers you do business with for your Projects. For example, Home Depot, your General Contractors, Painters, Real Estate Broker, Lender, Title Company, etc. Companies can be grouped using [Company Categories](/operations/v1.workspace.companies.categories.list), such as General Contractors, Painters, Hardware Stores, etc. Within the web application, Companies can be associated with Expense Transactions, Repair Bids, Scheduled Items, and assigned to Scope of Work items.' summary: List tags: - Company parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid responses: '200': description: Array of `Company` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Company' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/list/category/{categoryUuid}: get: operationId: v1.workspace.companies.list.category description: List Companies within a Workspace and Company Category, ordered by name. summary: List By Category tags: - Company parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: categoryUuid in: path required: true description: Company Category UUID schema: type: string format: uuid responses: '200': description: Array of `Company` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Company' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/create: post: operationId: v1.workspace.companies.create description: Create a Company within a Workspace. summary: Create tags: - Company parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1CompanyCreateRequest' responses: '201': description: '`Company`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Company' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/{companyUuid}: patch: operationId: v1.workspace.companies.update description: Update a Company within a Workspace. summary: Update tags: - Company parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: companyUuid in: path required: true description: Company UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/V1CompanyUpdateRequest' responses: '200': description: '`Company`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Company' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.workspace.companies.delete description: Delete a Company within a Workspace. summary: Delete tags: - Company parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: companyUuid in: path required: true description: Company UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/categories/list: get: operationId: v1.workspace.companies.categories.list description: 'List Company Categories within a Workspace, ordered by name. Company Categories allow grouping [Companies](/operations/v1.workspace.companies.list). Companies are vendors, businesses, contractors, subcontractors, or suppliers you do business with for your Projects. For example, Home Depot, your General Contractors, Painters, Real Estate Broker, Lender, Title Company, etc.' summary: List tags: - 'Company: Categories' parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid responses: '200': description: Array of `Company Category` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Company Category' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/categories/create: post: operationId: v1.workspace.companies.categories.create description: Create a Company Category within a Workspace. summary: Create tags: - 'Company: Categories' parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/V1CompanyCategoryCreateRequest' responses: '201': description: '`Company Category`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Company Category' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/companies/categories/{categoryUuid}: patch: operationId: v1.workspace.companies.categories.update description: Update a Company Category within a Workspace. summary: Update tags: - 'Company: Categories' parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: categoryUuid in: path required: true description: Company Category UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/V1CompanyCategoryUpdateRequest' responses: '200': description: '`Company Category`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Company Category' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.workspace.companies.categories.delete description: Delete a Company Category within a Workspace. summary: Delete tags: - 'Company: Categories' parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: categoryUuid in: path required: true description: Company Category UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/expense-accounts/list: get: operationId: v1.workspace.expense-accounts.list description: 'List Expense Accounts within a Workspace, ordered by name. Expense Accounts are financial accounts (like a checking account or credit card) used to track which account an Expense was charged to.' summary: List tags: - Expense Accounts parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid responses: '200': description: Array of `Expense Account` content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Expense Account' required: - data '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/expense-accounts/create: post: operationId: v1.workspace.expense-accounts.create description: Create an Expense Account within a Workspace. summary: Create tags: - Expense Accounts parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/Create Expense Account Request' responses: '201': description: '`Expense Account`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Account' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/expense-accounts/{accountUuid}: patch: operationId: v1.workspace.expense-accounts.update description: Update an Expense Account within a Workspace. summary: Update tags: - Expense Accounts parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: accountUuid in: path required: true description: Expense Account UUID schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/Update Expense Account Request' responses: '200': description: '`Expense Account`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Expense Account' required: - data '401': $ref: '#/components/responses/AuthenticationException' '422': $ref: '#/components/responses/ValidationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null delete: operationId: v1.workspace.expense-accounts.delete description: Delete an Expense Account within a Workspace. summary: Delete tags: - Expense Accounts parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid - name: accountUuid in: path required: true description: Expense Account UUID schema: type: string format: uuid responses: '204': description: No content '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null /workspace/{workspace}/upload-intent: post: operationId: v1.workspace.upload-intent.create description: "Creating an Upload Intent is Step 1 in uploading files.\n\nSubmit metadata about the file you intend to\ \ upload. The Response\nincludes a Signed URL, HTTP Method, and HTTP Headers where your client\nwill be temporarily\ \ authorized to upload the file. Use the Response data\nto construct a file upload request in Step 2.\n\nStep 2 is\ \ using the Signed URL, Method, and Headers from Step 1 to upload\nthe file to file storage:\n\n```\nx-amz-acl: private\n\ Content-MD5: rz1TrXzmoB4WmdeUde+CIQ==\nContent-Type: image/png\n... above are example headers from an Upload Intent\ \ ...\nPOST https://the-signed-url-here\nraw-binary-file-data-here\n```\n\nStep 3 after uploading succeeds is to call\ \ the next API for the specific\nuse case you uploaded the file. Each use case has its own API call where\nyou must\ \ supply the `uuid` returned in Step 1, allowing Step 3 to find\nand reference the uploaded file:\n\n* [Create a Project\ \ Receipt](/operations/v1.project.receipts.create)\n* [Create a Photo Log Photo](/operations/v1.project.photo-log.create)\n\ * [Create a Project Update Photo](/operations/v1.project.updates.photos.create)\n\n### Response from Signed URL: Response\ \ Codes\n\n| Code | Description |\n| - | - |\n| 200 OK | File successfully received and satisfied all validation\ \ checks. No body content. |\n| 400 Bad Request | Perhaps the uploaded file's MD5 checksum did not match what was\ \ given in the Upload Intent. Retry by requesting a new Upload Intent and signed URL. |\n| 403 Forbidden | The signed\ \ URL has expired. Retry by request a new Upload Intent and signed URL. |\n\n### Response from Signed URL\n\nThe Signed\ \ URL response defaults to returning XML. If you want JSON,\nsubmit a header `Accept: application/json`.\n\nExample\ \ Error Response Body when the Content-MD5 header does not match\nwhat was submitted in the Request Body:\n\n```\n\ {\n \"Code\": \"BadDigest\",\n \"Message\": \"\",\n \"BucketName\": \"flipperforce-prod\",\n \"RequestId\": \"\ tx000007027848ea442f7f9-006839cfe7-1060947b4-nyc3c\",\n \"HostId\": \"1060947b4-nyc3c-nyc3-zg03\"\n}\n```" summary: Create Upload Intent tags: - Attachment Upload parameters: - name: workspace in: path required: true description: Workspace UUID schema: type: string format: uuid requestBody: required: true content: application/json: schema: type: object properties: upload_type: description: '(Required) Specify how you intend to use the uploaded file. The metadata submitted will be used to validate the file type can be used for this use case. Accepted values: * `photo-log-photo` - [Project Photo Log: Photo](/operations/v1.project.photo-log.create) * `project-update-photo` - [Project Update: Photo](/operations/v1.project.updates.photos.create) * `receipt` - [Project Receipt](/operations/v1.project.receipts.create)' $ref: '#/components/schemas/AttachmentUploadIntentType' filename: type: string description: Name of the file, such as "IMG_1234.jpg" maxLength: 1000 checksum: type: string description: MD5 checksum of the file, such as "a763097058593e8ac1ba9d17de1155df" pattern: ^[0-9a-fA-F]{32}$ minLength: 32 maxLength: 32 mime_type: type: string description: 'IANA Media Type. Common types that are supported: image/jpeg, image/png, image/gif, image/webp, image/heic, image/heif, image/avif' size: type: integer description: File size in bytes minimum: 0 maximum: 0 required: - filename - checksum - mime_type - size responses: '201': description: '`Upload Intent`' content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Upload Intent' required: - data '422': $ref: '#/components/responses/ValidationException' '401': $ref: '#/components/responses/AuthenticationException' '403': description: When the authenticated User Account is forbidden from accessing the content or software features content: application/json: schema: type: object properties: message: type: string description: Human-readable description of why access was not allowed reason: type: - string - 'null' description: 'Machine-readable code for why access was not allowed. Possible values: * `UNKNOWN` - Access Forbidden * `UNSUPPORTED_CLIENT` - Unsupported client. * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription. * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature. * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access. * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access. * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it. * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace. * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request. ' enum: - UNKNOWN - UNSUPPORTED_CLIENT - SUBSCRIPTION_MISSING - SUBSCRIPTION_PAYMENT_DUE - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE - FEATURE_ACCESS_DENIED - PROJECT_ACCESS_DENIED - PROJECT_ARCHIVED - WORKSPACE_ACCESS_DENIED - WORKSPACE_SELECTION_MISSING - null components: securitySchemes: PublicApiBearerAuth: type: http description: 'Use the Public API key provided by FlipperForce as a Bearer token. Send the key exactly as provided in the Authorization header: `Authorization: Bearer `.' scheme: bearer bearerFormat: FlipperForce Public API key schemas: Activity Log: type: object properties: uuid: type: string description: Public identifier. activity_type: type: string description: Machine-readable Activity Type value. performed_at: type: string description: 'Timestamp when the activity happened in ISO 8601 Zulu format. Example: `2026-06-07T16:20:00Z`' performed_by: anyOf: - description: User who performed the activity. `uuid` is the User's public identifier. $ref: '#/components/schemas/Activity Log Actor' - type: 'null' project: anyOf: - description: Project associated with the activity, when the activity belongs to one. $ref: '#/components/schemas/Activity Log Project Context' - type: 'null' message: type: string description: Short summary of the activity that occurred. Exact wording may change and should not be parsed as structured data. targets: type: array description: Resources directly affected by the activity. A null UUID means the target does not support locating by UUID in the API. items: $ref: '#/components/schemas/Activity Log Target' details: type: object description: Additional fields useful without making another API request. Exact properties are intentionally undocumented and may change. Fields may differ even for activity of the same type. Treat fields and values as optional. required: - uuid - activity_type - performed_at - performed_by - project - message - targets - details title: Activity Log Activity Log Actor: type: object properties: uuid: type: string description: Public User identifier. name: type: string description: User display name. required: - uuid - name title: Activity Log Actor Activity Log Filters: type: object properties: projects: type: array description: Projects referenced by visible Activity Log history and available to the account. items: $ref: '#/components/schemas/Activity Log Project Filter' users: type: array description: Current Workspace Users and historical actors, including current Users without Activity Log history. items: $ref: '#/components/schemas/Activity Log User Filter' activity_types: type: array description: Activity Type values present in visible Workspace history and accepted by `activity_types[]`. items: type: string required: - projects - users - activity_types title: Activity Log Filters Activity Log List: type: array items: $ref: '#/components/schemas/Activity Log' title: Activity Log List Activity Log Project Context: type: object properties: uuid: type: string description: Public Project identifier. name: type: string description: Project display name. required: - uuid - name title: Activity Log Project Context Activity Log Project Filter: type: object properties: uuid: type: string description: Public Project identifier accepted by `project_uuids[]`. label: type: string description: Project name. required: - uuid - label title: Activity Log Project Filter Activity Log Target: type: object properties: type: type: string description: Stable machine-readable resource type, such as `project` or `project_status`. uuid: type: - string - 'null' description: Public resource identifier, or null when the target does not support locating by UUID in the API. name: type: - string - 'null' description: Display name captured for the activity. links: description: URLs for Public API resources related to this target. $ref: '#/components/schemas/Activity Log Target Links' required: - type - uuid - name - links title: Activity Log Target Activity Log Target Links: type: object properties: self: type: - string - 'null' description: GET URL for the target, or null when no GET-by-UUID endpoint is available. required: - self title: Activity Log Target Links Activity Log User Filter: type: object properties: uuid: type: string description: Public User identifier accepted by `user_uuids[]`. label: type: string description: User's full name. required: - uuid - label title: Activity Log User Filter AttachmentUploadIntentType: type: string description: 'Metadata for AttachmentUploadIntent to denote which type of file the intent was created for. ' enum: - photo-log-photo - project-update-photo - receipt title: AttachmentUploadIntentType Company: type: object properties: uuid: type: string description: Public identifier. created_at: type: string description: 'Timestamp when Company was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: string description: 'Timestamp when Company was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' name: type: string description: Human-readable Company name. email: type: - string - 'null' description: Email address for this Company. license_id: type: - string - 'null' description: License identifier entered for this Company. address_1: type: - string - 'null' description: 'Address - Line 1. Example: `123 N Main Street`' address_2: type: - string - 'null' description: Address - Line 2. city: type: - string - 'null' description: Municipality where this Company is located. region: type: - string - 'null' description: State, province, or region where this Company is located. postal_code: type: - string - 'null' description: Zip code, postal code, or similar where this Company is located. country: type: - string - 'null' description: Country where this Company is located. phone: type: - string - 'null' description: Phone number for this Company. website: type: - string - 'null' description: Website entered for this Company. notes: type: - string - 'null' description: Internal notes about this Company. rating: type: - integer - 'null' description: Rating from 1 to 5 entered for this Company. review: type: - string - 'null' description: Review entered for this Company. tax_id: type: - string - 'null' description: Tax identifier entered for this Company. is_1099_eligible: type: - boolean - 'null' description: Whether this Company is eligible to receive 1099 tax forms. workers_comp_insurance: type: - boolean - 'null' description: Whether this Company has Workers' Compensation insurance. workers_comp_insurance_expiration: type: - string - 'null' description: Workers' Compensation insurance expiration date in `YYYY-MM-DD` format. general_liability_insurance: type: - boolean - 'null' description: Whether this Company has General Liability insurance. general_liability_insurance_expiration: type: - string - 'null' description: General Liability insurance expiration date in `YYYY-MM-DD` format. category_uuids: type: array description: Company Category UUIDs assigned to this Company. items: type: string required: - uuid - created_at - updated_at - name - email - license_id - address_1 - address_2 - city - region - postal_code - country - phone - website - notes - rating - review - tax_id - is_1099_eligible - workers_comp_insurance - workers_comp_insurance_expiration - general_liability_insurance - general_liability_insurance_expiration - category_uuids title: Company Company Category: type: object properties: uuid: type: string description: Public identifier created_at: type: string description: 'Timestamp when record was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: string description: 'Timestamp when record was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' name: type: string description: Human-readable category name used to group Companies. required: - uuid - created_at - updated_at - name title: Company Category Create Expense Account Request: type: object properties: name: type: string description: Human-readable financial account name used to group Expenses. maxLength: 191 required: - name title: Create Expense Account Request Create Expense Transaction Request: type: object properties: receipt_uuid: type: - string - 'null' description: Receipt UUID to associate with the created Expense Transaction and every created Expense line item. Only 1 Receipt can be associated on an Expense Transaction, and a Receipt cannot be associated to more than one Expense Transaction. date: type: string description: Default date for created Expense line items in `YYYY-MM-DD` format. Individual `expenses` records can override this value with their own `date`. company_uuid: type: - string - 'null' description: Default Company/vendor UUID for created Expense line items. Individual `expenses` records can override this value with their own `company_uuid`. This Company must be in your Workspace. expense_account_uuid: type: - string - 'null' description: Default Expense Account UUID for created Expense line items. Individual `expenses` records can override this value with their own `expense_account_uuid`. This Expense Account must be in your Workspace. expense_category_uuid: type: - string - 'null' description: Default Expense Category UUID for created Expense line items. Individual `expenses` records can override this value with their own `expense_category_uuid`. This Expense Category must be in the Project where the Expense Transaction is created. total_tax: type: number description: Required. Total tax charged for the entire Expense Transaction. Such as `1234.56`. Once received, FlipperForce will automatically distribute the tax amount proportionally to all Expenses on the Transaction. invoice_number: type: - string - 'null' description: Default invoice number for created Expense line items. Individual `expenses` records can override this value with their own `invoice_number`. expenses: type: array description: Required. Expense line items to create for this Expense Transaction (at least 1). For example, the individual items or services that were charged and printed on a receipt or invoice. items: type: object description: Required. Expense line item. properties: date: type: string description: Provide this field unless `date` is provided at the root-level. Date this Expense was incurred in `YYYY-MM-DD` format. invoice_number: type: - string - 'null' description: Invoice Number. When omitted, the root-level `invoice_number` is used when provided. expense_account_uuid: type: - string - 'null' description: Expense Account UUID. When omitted, the root-level `expense_account_uuid` is used when provided. company_uuid: type: - string - 'null' description: Company UUID for the vendor who supplied the purchased item or service. When omitted, the root-level `company_uuid` is used when provided. expense_category_uuid: type: - string - 'null' description: Expense Category UUID. When omitted, the root-level `expense_category_uuid` is used when provided. name: type: string description: Required. Description of the purchased item or service. class: type: - string - 'null' description: Expense Classification. Allowed values are `labor`, `material`, `labor-and-material`, and `other`. enum: - labor - material - labor-and-material - other - null amount: type: number description: Required. Expense amount BEFORE tax, in dollars. Such as `1234.56` required: - name - amount required: - total_tax - expenses title: Create Expense Transaction Request Create Income Request: type: object properties: date: type: string description: Required. Date this income was received in `YYYY-MM-DD` format. description: type: string description: Required. User-facing description shown in the Income Tracker table. type: type: - string - 'null' description: Income classification. Allowed values are `rental`, `resale`, and `other`. enum: - rental - resale - other - null amount: type: number description: Required. Income amount in dollars. Such as `1234.56`. required: - date - description - amount title: Create Income Request Expense Account: type: object properties: uuid: type: string description: Public identifier. created_at: type: - string - 'null' description: 'Timestamp when Expense Account was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: - string - 'null' description: 'Timestamp when Expense Account was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' name: type: string description: Human-readable financial account name used to group Expenses. required: - uuid - created_at - updated_at - name title: Expense Account Expense Category: type: object properties: uuid: type: string description: Public identifier. created_at: type: string description: 'Timestamp when record was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: string description: 'Timestamp when record was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' name: type: string description: Human-readable category name. required: - uuid - created_at - updated_at - name title: Expense Category Expense Line Item: type: object properties: uuid: type: string description: Public identifier. created_at: type: - string - 'null' description: 'Timestamp when Expense was created in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' updated_at: type: - string - 'null' description: 'Timestamp when Expense was last changed in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' transaction_uuid: type: - string - 'null' description: Parent Expense Transaction public identifier. date: type: - string - 'null' description: Date this Expense was incurred in `YYYY-MM-DD` format. invoice_number: type: - string - 'null' description: Invoice number entered for this Expense. name: type: string description: Description of the purchased item or service. class: type: - string - 'null' description: 'Expense classification. One of: `labor`, `material`, `labor-and-material`, `other`.' amount: type: - number - 'null' description: Expense amount BEFORE tax, in dollars. Such as `1234.56` tax: type: - number - 'null' description: Tax allocated to this Expense, in dollars. Such as `1234.56`. This field is read-only and can only be written via the parent Transaction's `tax_total` field. total: type: - number - 'null' description: Calculated automatically as amount plus tax, in dollars. Such as `1234.56`. This field is read-only and automatically calculated. expense_account: type: - object - 'null' description: Expense Account assigned to this Expense. properties: uuid: type: string name: type: string required: - uuid - name company: type: - object - 'null' description: Company/vendor assigned to this Expense. properties: uuid: type: string name: type: string required: - uuid - name expense_category: type: - object - 'null' description: Expense Category assigned to this Expense. properties: uuid: type: string name: type: string required: - uuid - name required: - uuid - created_at - updated_at - transaction_uuid - date - invoice_number - name - class - amount - tax - total - expense_account - company - expense_category title: Expense Line Item Expense Line Item Delete Tombstone: type: object properties: deleted_transaction_uuid: type: string description: UUID of the Expense Transaction deleted because its final Expense was deleted. deleted_expense_uuid: type: string description: UUID of the final Expense deleted from the Transaction. message: type: string description: Human-readable explanation for why the parent Expense Transaction was deleted. required: - deleted_transaction_uuid - deleted_expense_uuid - message title: Expense Line Item Delete Tombstone Expense Line Item List: type: object properties: totals: type: object description: Sums across all Expense Line Items matching the request filters, before pagination. properties: amount: type: number tax: type: number total: type: number required: - amount - tax - total expenses: type: array description: Current page of Expense Line Items. items: $ref: '#/components/schemas/Expense Line Item' required: - totals - expenses title: Expense Line Item List Expense Transaction: type: object properties: uuid: type: string description: Public identifier. created_at: type: - string - 'null' description: 'Timestamp when Expense Transaction was created in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' updated_at: type: - string - 'null' description: 'Timestamp when Expense Transaction was last changed in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' sequence_number: type: - integer - 'null' description: Project-scoped sequence number shown in the web app as `T#`. receipt_uuid: type: - string - 'null' description: Receipt UUID associated with this Expense Transaction. subtotal: type: number description: Sum of Expense amounts before tax, in dollars. Such as `1234.56` total_tax: type: number description: Sum of tax values from all Expenses, in dollars. Such as `1234.56` grand_total: type: number description: Sum of Expense totals including tax, in dollars. Such as `1234.56` expenses: type: array description: Expense line items belonging to this Expense Transaction. items: $ref: '#/components/schemas/Expense Line Item' required: - uuid - created_at - updated_at - sequence_number - receipt_uuid - subtotal - total_tax - grand_total - expenses title: Expense Transaction Expense Transaction List: type: array items: $ref: '#/components/schemas/Expense Transaction' title: Expense Transaction List File: type: object properties: uuid: type: string description: Public identifier name: type: string description: 'Short human-readable description to distinguish this file from other files across the entire Project' size: type: integer description: File size in bytes type: type: string description: 'Roughly what kind of file is available. Such as `pdf` or `jpeg`. Note that this is not a file MIME-type, but can be used by clients to change how they handle the file.' source_url: type: object description: URLs to full versions of the file properties: view: type: string description: URL to view the file on the device, as an inline HTTP response download: type: string description: URL to download the file, as a download HTTP response required: - view - download preview_url: type: object description: 'URLs to view smaller versions of the file''s contents. Images will return a smaller version of the image itself. Documents will return a placeholder document image and not the file''s actual contents.' properties: thumbnail: type: string description: Up to approximately 300px wide large: type: string description: Up to approximately 600px wide required: - thumbnail - large required: - uuid - name - size - type - source_url - preview_url title: File Income: type: object properties: uuid: type: string description: Public identifier. created_at: type: - string - 'null' description: 'Timestamp when Income was created in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' updated_at: type: - string - 'null' description: 'Timestamp when Income was last changed in ISO 8601 Zulu format with microseconds. Example: `2026-06-07T16:20:00.123456Z`' date: type: - string - 'null' description: Date this income was received in `YYYY-MM-DD` format. description: type: string description: User-facing description shown in the Income Tracker table. type: type: - string - 'null' description: 'Income classification. One of: `rental`, `resale`, `other`.' amount: type: - number - 'null' description: Income amount in dollars. Such as `1234.56`. required: - uuid - created_at - updated_at - date - description - type - amount title: Income Income List: type: object properties: totals: type: object description: Sums across all Income records matching the request filters, before pagination. properties: amount: type: number required: - amount income: type: array description: Current page of Income records. items: $ref: '#/components/schemas/Income' required: - totals - income title: Income List Project: type: object properties: uuid: type: string description: Public Identifier workspace_uuid: type: string description: Workspace Public Identifier created_at: type: string description: 'Timestamp when Project was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: string description: 'Timestamp when Project was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' name: type: string description: 'Short description to distinguish one Project from another. Most Projects use an abbreviated Address.' full_address: type: string description: All address parts assembled into a single string address_1: type: - string - 'null' description: 'Address Line 1. Example: `123 N Main Street`' address_2: type: - string - 'null' description: Address Line 2 city: type: - string - 'null' description: 'Municipality where Project is located. Example: `Kansas City`' state: type: - string - 'null' description: '2-letter US State abbreviation where Project is located. Example: `MO` for Missouri' postal_code: type: - string - 'null' description: 'Zip code or similar where Project is located. Example: `64151`' country: type: - string - 'null' description: Address - Country is the 2-character country code. lat: type: - number - 'null' description: 'GPS Latitude of this Project''s physical location. Such as `39.048926`. NULL if the Project Address cannot be found by our GPS coordinate data provider.' lng: type: - number - 'null' description: 'GPS Longitude of this Project''s physical location. Such as `-94.484024`. NULL if the Project Address cannot be found by our GPS coordinate data provider.' investment_strategy: type: string description: 'Investment Strategy is the real estate strategy being used to generate a profit, such as a flip, rental, or wholesale. Defaults to Fix and Flip if no value is submitted. Only supports the following values: **Flip:** * `fix_and_flip` - Fix and Flip * `wholesale` - Wholesale * `wholetail` - Wholetail **New Construction:** * `build_to_rent` - Build to Rent * `new_construction` - Build to Sell **Rental:** * `brrrr` - BRRRR * `buy_and_hold` - Buy and Hold * `rental` - Rental * `short_term_rental` - Short Term Rental **Other:** * `other` - Other' stage: type: string description: 'Current Stage. These are the "keys" from the [User Account API](/operations/v1.user.account) and [Workspace Schema](/schemas/Workspace) field `project_stages`.' type: type: string description: 'Property Type describes the kind of structure. Such as Single Family, Duplex, Quadplex, Apartment Building, etc.' style: type: string description: Property Style such as Ranch, Split Level, Two-Story, Three-Story, Condo, etc. square_feet: type: integer description: Structure's finished square feet. beds: description: 'Number of Bedrooms. Can be an integer like `3` or a decimal like `3.5`.' anyOf: - type: integer - type: number - type: 'null' baths: description: 'Number of Bathrooms. Can be an integer like `3` or a decimal like `3.5`.' anyOf: - type: integer - type: number - type: 'null' year_built: type: string description: Year when the current structure was built on the land. featured_image_url: type: string description: Absolute URL to Project photo permissions: type: array description: 'Software Features the User is granted on this Project according to the Workspace''s Subscription Plan, and how the User''s account is configured in the Workspace. Please contact us for a complete list and what they mean.' items: type: string required: - uuid - workspace_uuid - created_at - updated_at - name - full_address - address_1 - address_2 - city - state - postal_code - country - lat - lng - investment_strategy - stage - type - style - square_feet - beds - baths - year_built - featured_image_url - permissions title: Project Project Photo Log: type: object properties: photos_by_date: type: array items: $ref: '#/components/schemas/Project Photo Log: Date Group' required: - photos_by_date title: Project Photo Log 'Project Photo Log: Date Group': type: object properties: group_date: type: string description: Photos should display in a group titled by this date. In format `YYYY-MM-DD` photos: type: array description: Photos grouped by this date items: $ref: '#/components/schemas/Project Photo Log: Photo' required: - group_date - photos title: 'Project Photo Log: Date Group' 'Project Photo Log: Photo': type: object properties: uuid: type: string description: Public Identifier order: type: integer description: 'Sequence position of this Photo relative to other Photos with the same Photo Date. Smaller numbers will display before larger numbers. Often this is the Unix timestamp of when the Photo was captured. But if the photos have been manually re-ordered, the order will begin from 0 and increment by 1. If two photos have the same order, photos created more recently will display first.' created_at: type: string description: 'Timestamp when Photo was added to Photo Log in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' photo_date: type: string description: Date Group where this Photo is organized. In format `YYYY-MM-DD` photo_description: type: - string - 'null' description: 'Text displayed alongside the photo. Useful for communicating more context about what is in the photo or that the viewer would find informative.' photo: description: 'Details about a single Photo, such as URLs for displaying it at various sizes' $ref: '#/components/schemas/File' required: - uuid - order - created_at - photo_date - photo_description - photo title: 'Project Photo Log: Photo' Project Update: type: object properties: uuid: type: string description: Public identifier created_at: type: string description: 'Timestamp when record was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' updated_at: type: string description: 'Timestamp when record was last changed in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' posted_at: type: - string - 'null' description: 'Timestamp that orders the Update relative to other Updates. Timestamps in the future should still be displayed. Example: `2025-04-30T21:21:10Z`' title: type: - string - 'null' description: 'Sentence summarizing the contents of the update. Can be NULL if the Update was created without a title.' description: type: string description: 'Long description with full details. Rich text supported with markup in HTML.' author: description: User who posted the Update $ref: '#/components/schemas/User' photos: type: array items: $ref: '#/components/schemas/Project Update: Photo' required: - uuid - created_at - updated_at - posted_at - title - description - author - photos title: Project Update 'Project Update: Photo': type: object properties: uuid: type: string description: Unique identifier order: type: integer description: 'Order number for displaying this photo relative to others. Photos are not guaranteed to have sequential ordering (i.e. 1, 2, 3, etc). A Photo with `order` of `5` should display before another Photo with `order` of `10`.' photo: description: Photo details $ref: '#/components/schemas/File' required: - uuid - order - photo title: 'Project Update: Photo' ProjectPipelineStage: type: string description: 'Project Pipeline Stage controls which phase of the Project Workflow a Project is in. Projects start as leads, then track renovation and construction, and finally being sold or retained for a portfolio. ' enum: - lead - contacting_seller - appointment_set - offer_made - negotiation - pending_purchase - construction_on_hold - planning_permitting - under_construction - punch_list - active_listing - pending_sale - completed_portfolio - rental_inventory - wholesale_inventory title: ProjectPipelineStage ProjectStrategy: type: string description: 'Project Investment Strategy. ' enum: - brrrr - build_to_rent - buy_and_hold - fix_and_flip - new_construction - other - rental - short_term_rental - wholesale - wholetail title: ProjectStrategy Receipt: type: object properties: uuid: type: string description: Public identifier created_at: type: string description: 'Timestamp when Receipt was created in ISO 8601 Zulu format with microseconds. Example: `2025-04-30T21:21:10.123456Z`' issue_date: type: - string - 'null' description: 'Date when the vendor issued the Receipt. Such as when it was printed at the vendor''s point of sale. Date string formatted as YYYY-MM-DD such as `2025-07-23`.' notes: type: - string - 'null' description: Any additional details about this Receipt from_client: type: string description: 'Details on where this Receipt originated, such as the web application, mobile application, or external integration.' file: description: Receipt file $ref: '#/components/schemas/File' required: - uuid - created_at - issue_date - notes - from_client - file title: Receipt Update Expense Account Request: type: object properties: name: type: string description: Human-readable financial account name used to group Expenses. maxLength: 191 title: Update Expense Account Request Update Expense Line Item Request: type: object properties: total_tax: type: - number - 'null' description: Total tax for the parent Transaction. When omitted, current Transaction tax is preserved and redistributed. date: type: - string - 'null' description: Date this Expense was incurred in `YYYY-MM-DD` format. invoice_number: type: - string - 'null' description: Invoice number entered for this Expense. expense_account_uuid: type: - string - 'null' description: Expense Account UUID assigned to this Expense. company_uuid: type: - string - 'null' description: Company/vendor UUID assigned to this Expense. expense_category_uuid: type: - string - 'null' description: Expense Category UUID assigned to this Expense. name: type: string description: Description of the purchased item or service. Omit the field to leave the name unchanged, but when present must contain a name. class: type: - string - 'null' description: Expense classification. amount: type: - number - 'null' description: Expense amount BEFORE tax, in dollars. Such as `1234.56` title: Update Expense Line Item Request Update Expense Transaction Request: type: object properties: receipt_uuid: type: - string - 'null' description: Receipt UUID to associate with the created Expense Transaction and every created Expense line item. Only 1 Receipt can be associated on an Expense Transaction, and a Receipt cannot be associated to more than one Expense Transaction. Send `null` to unlink (disassociate) the Transaction's current Receipt. total_tax: type: number description: Total tax charged for the entire Expense Transaction. Such as `1234.56`. When omitted, FlipperForce preserves the Transaction's current total tax and redistributes it across all Expense line items after submitted changes are applied. expenses: type: array description: Expense line items to update or create. When omitted all existing Expenses are kept as-is. They are not deleted. items: type: object description: Expense line item. properties: uuid: type: string description: Expense UUID of the existing Expense to update. If you omit this field, a new Expense record will be created with this data. date: type: string description: Required. Date this Expense was incurred in `YYYY-MM-DD` format. invoice_number: type: - string - 'null' description: Invoice number entered for this Expense. expense_account_uuid: type: - string - 'null' description: Expense Account UUID assigned to this Expense. This Expense Account must be in your Workspace. company_uuid: type: - string - 'null' description: Company/vendor UUID assigned to this Expense. This Company must be in your Workspace. expense_category_uuid: type: - string - 'null' description: Expense Category UUID assigned to this Expense. This Expense Category must be in the same Project as the Expense Transaction. name: type: string description: Description of the purchased item or service. class: type: - string - 'null' description: Expense classification. amount: type: number description: Expense amount BEFORE tax, in dollars. Such as `1234.56` required: - date - name - amount additionalProperties: {} required: - expenses title: Update Expense Transaction Request Update Income Request: type: object properties: date: type: string description: Date this income was received in `YYYY-MM-DD` format. description: type: string description: User-facing description shown in the Income Tracker table. type: type: - string - 'null' description: Income classification. Allowed values are `rental`, `resale`, and `other`. enum: - rental - resale - other - null amount: type: number description: Income amount in dollars. Such as `1234.56`. title: Update Income Request Upload Intent: type: object properties: uuid: type: string description: Upload Intent unique identifier expires_at: type: string description: 'Uploading a file to this URL will no longer be possible after this time.' url: type: string description: 'Signed URL where file contents must be submitted. Only valid for a limited amount of time, and only authorized for the file whose metadata was submitted.' method: type: string description: 'Signed URL requires using this HTTP method be used when submitting file contents. Such as PUT or POST.' headers: type: object description: 'HTTP headers that must be included when uploading the file to the included URL. Keys are HTTP header names, values are the header value to send.' additionalProperties: type: string required: - uuid - expires_at - url - method - headers title: Upload Intent User: type: object properties: uuid: type: string description: Public identifier first_name: type: string last_name: type: string email: type: string avatar: type: - string - 'null' description: URL to User's avatar photo. NULL if they have not uploaded a photo. required: - uuid - first_name - last_name - email - avatar title: User User Account: type: object properties: user: $ref: '#/components/schemas/User' workspaces: type: array description: Each Workspace the User is a member of items: $ref: '#/components/schemas/Workspace' required: - user - workspaces title: User Account V1CompanyCategoryCreateRequest: type: object properties: name: type: string description: Human-readable category name used to group Companies. required: - name title: V1CompanyCategoryCreateRequest V1CompanyCategoryUpdateRequest: type: object properties: name: type: string description: Human-readable category name used to group Companies. title: V1CompanyCategoryUpdateRequest V1CompanyCreateRequest: type: object properties: name: type: string description: Human-readable Company name. email: type: - string - 'null' description: Email address for this Company. license_id: type: - string - 'null' description: License Number, such as a contractor or trade license number. address_1: type: - string - 'null' description: 'Address - Line 1. Example: `123 N Main Street`' address_2: type: - string - 'null' description: Address - Line 2. city: type: - string - 'null' description: Municipality where this Company is located. region: type: - string - 'null' description: State, province, or region where this Company is located. postal_code: type: - string - 'null' description: Zip code, postal code, or similar where this Company is located. country: type: - string - 'null' description: Country where this Company is located. phone: type: - string - 'null' description: Phone Number website: type: - string - 'null' description: URL notes: type: - string - 'null' description: Your internal notes about this Company. rating: type: - integer - 'null' description: Track how many "stars" from 1 to 5 you would give this Company. review: type: - string - 'null' description: Details about your past working relationship with this Company. tax_id: type: - string - 'null' description: Tax Identifier, such as EIN (Federal Tax ID) that is useful when issuing 1099 Forms. is_1099_eligible: type: - boolean - 'null' description: Whether this Company is eligible to receive 1099 tax forms. workers_comp_insurance: type: - boolean - 'null' description: Whether this Company has Workers' Compensation insurance. workers_comp_insurance_expiration: type: - string - 'null' description: Workers' Compensation insurance expiration date in `YYYY-MM-DD` format. general_liability_insurance: type: - boolean - 'null' description: Whether this Company has General Liability insurance. general_liability_insurance_expiration: type: - string - 'null' description: General Liability insurance expiration date in `YYYY-MM-DD` format. category_uuids: type: array description: Company Category UUIDs to assign to this Company. items: type: string description: Company Category UUID assigned to this Company. required: - name title: V1CompanyCreateRequest V1CompanyUpdateRequest: type: object properties: name: type: string description: Human-readable Company name. email: type: - string - 'null' description: Email address for this Company. license_id: type: - string - 'null' description: License Number, such as a contractor or trade license number. address_1: type: - string - 'null' description: 'Address - Line 1. Example: `123 N Main Street`' address_2: type: - string - 'null' description: Address - Line 2. city: type: - string - 'null' description: Municipality where this Company is located. region: type: - string - 'null' description: State, province, or region where this Company is located. postal_code: type: - string - 'null' description: Zip code, postal code, or similar where this Company is located. country: type: - string - 'null' description: Country where this Company is located. phone: type: - string - 'null' description: Phone Number website: type: - string - 'null' description: URL notes: type: - string - 'null' description: Your internal notes about this Company. rating: type: - integer - 'null' description: Track how many "stars" from 1 to 5 you would give this Company. review: type: - string - 'null' description: Details about your past working relationship with this Company. tax_id: type: - string - 'null' description: Tax Identifier, such as EIN (Federal Tax ID) that is useful when issuing 1099 Forms. is_1099_eligible: type: - boolean - 'null' description: Whether this Company is eligible to receive 1099 tax forms. workers_comp_insurance: type: - boolean - 'null' description: Whether this Company has Workers' Compensation insurance. workers_comp_insurance_expiration: type: - string - 'null' description: Workers' Compensation insurance expiration date in `YYYY-MM-DD` format. general_liability_insurance: type: - boolean - 'null' description: Whether this Company has General Liability insurance. general_liability_insurance_expiration: type: - string - 'null' description: General Liability insurance expiration date in `YYYY-MM-DD` format. category_uuids: type: array description: Company Category UUIDs to assign to this Company. Submit an empty array to remove all categories. items: type: string description: Company Category UUID assigned to this Company. title: V1CompanyUpdateRequest V1DocumentsReceiptCreateRequest: type: object properties: intent_uuid: type: string description: '[Upload Intent](/operations/v1.workspace.upload-intent.create) UUID for the successfully uploaded Receipt file.' name: type: - string - 'null' description: '(Optional) Short description of the file, such as its filename or describing what items were purchased. Available in response as `file.name`' maxLength: 191 issue_date: type: - string - 'null' format: date description: '(Optional) Date the Receipt was provided by the vendor. Such as the date printed on the Receipt given at the point of sale. Format: YYYY-MM-DD like `2025-10-18` for October 18, 2025.' notes: type: - string - 'null' description: (Optional) Details not captured in other fields. maxLength: 10000 required: - intent_uuid title: V1DocumentsReceiptCreateRequest V1DocumentsReceiptUpdateRequest: type: object properties: name: type: string description: '(Optional) Short description of the file, such as its filename or describing what items were purchased. Available in response as `file.name`' issue_date: type: - string - 'null' description: '(Optional) Date the Receipt was provided by the vendor. Such as the date printed on the Receipt given at the point of sale. Format: YYYY-MM-DD like `2025-10-18` for October 18, 2025.' notes: type: - string - 'null' description: (Optional) Details not captured in other fields. title: V1DocumentsReceiptUpdateRequest V1PhotoLogUpdateRequest: type: object properties: photo_date: type: string format: date description: 'Optional. Date this Photo was captured. Photos with the same Date display ordered next to each other in the Photo Log.' photo_description: type: - string - 'null' description: 'Optional. Text displayed alongside the photo. Useful for communicating more context about what is in the photo.' title: V1PhotoLogUpdateRequest V1ProjectCreateRequest: type: object properties: fetch_property_data: type: boolean description: 'Your FlipperForce Subscription includes access to nationwide data on over 150+ million properties across the United States. [See examples of this data.](https://www.flipperforce.com/software-features/property-data) Pass the flag `fetch_property_data: true` to automatically search for Property Specs, Owner Information, Property History, Sales History and more using this Project''s address. Fetching property data will increase API call processing time. If you are creating many Projects, omit this flag to maximize throughput without searching for property data.' name: type: string description: Projects are referenced by their Name throughout the software, such as in lists of Projects or search boxes. Many people use the Address like "123 Main Street" but add as much detail as needed. maxLength: 191 description: type: - string - 'null' description: (Optional) Catch-all details about the Project that do not fit into other available fields. maxLength: 999999 address_1: type: string description: Address - Line 1. For example, "123 NE Main Street". maxLength: 191 address_2: type: - string - 'null' description: (Optional) Address - Line 2. For example, "Unit 421". Leave empty for most addresses. maxLength: 191 city: type: string description: Address - City or Municipality maxLength: 191 state: type: string description: Address - State or Region. For US-based addresses, submit the 2-letter state code. Such as `FL` for Florida. maxLength: 191 postal_code: type: string description: Address - Zip Code or Postal Code. For US-based addresses, submit the 5-digit zip code. Such as `33130` for Miami, FL. maxLength: 191 country: type: - string - 'null' description: (Optional) Address - Country is the 2-character country code. Defaults to `US` for the United States if no value is submitted. Only accepts [ISO 3166 ALPHA-2 values](https://www.iban.com/country-codes). minLength: 2 maxLength: 2 investment_strategy: anyOf: - description: '(Optional) Investment Strategy is the real estate strategy being used to generate a profit, such as a flip, rental, or wholesale. Defaults to Fix and Flip if no value is submitted. Only accepts the following values: **Flip:** * `fix_and_flip` - Fix and Flip * `wholesale` - Wholesale * `wholetail` - Wholetail **New Construction:** * `build_to_rent` - Build to Rent * `new_construction` - Build to Sell **Rental:** * `brrrr` - BRRRR * `buy_and_hold` - Buy and Hold * `rental` - Rental * `short_term_rental` - Short Term Rental **Other:** * `other` - Other' $ref: '#/components/schemas/ProjectStrategy' - type: 'null' stage: description: '(Optional) Pipeline Stage controls which phase of the Project workflow this Project is in. Projects start as leads, then track renovation and construction, and finally being sold or retained for a portfolio. Defaults to `lead` Stage if no value is submitted. Only accepts the following values: **Lead Pipeline:** * `lead` - New Lead * `contacting_seller` - Contacting Seller * `appointment_set` - Appointment Set * `offer_made` - Offer Made * `negotiation` - Negotiating * `pending_purchase` - Pending Purchase **Active Project Pipeline:** * `construction_on_hold` - Construction On-Hold * `planning_permitting` - Planning/Permitting * `under_construction` - Under Construction * `punch_list` - Punch List * `active_listing` - Active Listing * `pending_sale` - Pending Sale **Portfolio:** * `completed_portfolio` - Completed/Sold * `rental_inventory` - Rental Inventory * `wholesale_inventory` - Wholesale Inventory' $ref: '#/components/schemas/ProjectPipelineStage' type: type: - string - 'null' description: (Optional) Property Type describes the kind of structure. Such as Single Family, Duplex, Quadplex, Apartment Building, etc. maxLength: 191 style: type: - string - 'null' description: (Optional) Property Style such as Ranch, Split Level, Two-Story, Three-Story, Condo, etc. maxLength: 191 required: - name - address_1 - city - state - postal_code title: V1ProjectCreateRequest V1ProjectProgressUpdateRequest: type: object properties: title: type: - string - 'null' description: Sentence summarizing the contents of the update. description: type: string description: 'Description of what''s new with the Project. Basic HTML formatting is supported. For example: - Formatting: `p, b, i` - Spacing: `p, div` - Header: `h2, h3` - Link: `` - Image: `` CSS and JavaScript are not supported. All HTML is sanitized and rewritten for security purposes. We will likely modify the HTML you send to display properly across the application.' posted_at: type: string description: 'Timestamp used to order/sort the Updates in ISO 8601 Zulu format. Example: `2025-04-30T21:21:10Z` -- NOTE: An Update with a timestamp in the future will display immediately. It will appear as the date and time given. This field is really only used for ordering.' required: - title - description - posted_at title: V1ProjectProgressUpdateRequest V1ProjectUpdateRequest: type: object properties: name: type: string description: 'Projects are referenced by their Name throughout the software, such as in lists of Projects or search boxes. Many people use the Address like "123 Main Street" but add as much detail as needed.' maxLength: 191 description: type: - string - 'null' description: 'Catch-all details about the Project that do not fit into other available fields.' maxLength: 999999 address_1: type: string description: Address - Line 1. For example, "123 NE Main Street". maxLength: 191 address_2: type: - string - 'null' description: 'Address - Line 2 For example, "Unit 421". Leave empty for most addresses.' maxLength: 191 city: type: string description: Address - City or Municipality maxLength: 191 state: type: string description: 'Address - State or Region. For US-based addresses, submit the 2-letter state code. Such as `FL` for Florida.' maxLength: 191 postal_code: type: string description: 'Address - Zip Code or Postal Code. For US-based addresses, submit the 5-digit zip code. Such as `33130` for Miami, FL.' maxLength: 191 country: type: - string - 'null' description: 'Address - Country is the 2-character country code. Defaults to `US` for the United States if no value is submitted. Only accepts [ISO 3166 ALPHA-2 values](https://www.iban.com/country-codes).' minLength: 2 maxLength: 2 lat: type: - number - 'null' description: 'GPS Latitude of this Project''s physical location. Such as `39.048926`' lng: type: - number - 'null' description: 'GPS Longitude of this Project''s physical location. Such as `-94.484024`' investment_strategy: description: 'Investment Strategy is the real estate strategy being used to generate a profit, such as a flip, rental, or wholesale. Defaults to Fix and Flip if no value is submitted. Only supports the following values: **Flip:** * `fix_and_flip` - Fix and Flip * `wholesale` - Wholesale * `wholetail` - Wholetail **New Construction:** * `build_to_rent` - Build to Rent * `new_construction` - Build to Sell **Rental:** * `brrrr` - BRRRR * `buy_and_hold` - Buy and Hold * `rental` - Rental * `short_term_rental` - Short Term Rental **Other:** * `other` - Other' $ref: '#/components/schemas/ProjectStrategy' stage: description: 'Project Stage controls which phase of the Project workflow this Project is in. Projects start as leads, then track renovation and construction, and finally being sold or retained for a portfolio. Defaults to `lead` Stage if no value is submitted. Each Workspace can customize the Project Stage text labels, but the keys stay the same. Default list of Project Stages available are below. See the [User Account API](/operations/v1.user.account) for the list specific to that Workspace. **Lead Pipeline:** * `lead` - New Lead * `contacting_seller` - Contacting Seller * `appointment_set` - Appointment Set * `offer_made` - Offer Made * `negotiation` - Negotiating * `pending_purchase` - Pending Purchase **Active Project Pipeline:** * `construction_on_hold` - Construction On-Hold * `planning_permitting` - Planning/Permitting * `under_construction` - Under Construction * `punch_list` - Punch List * `active_listing` - Active Listing * `pending_sale` - Pending Sale **Portfolio:** * `completed_portfolio` - Completed/Sold * `rental_inventory` - Rental Inventory * `wholesale_inventory` - Wholesale Inventory' $ref: '#/components/schemas/ProjectPipelineStage' type: type: - string - 'null' description: 'Property Type describes the kind of structure. Such as Single Family, Duplex, Quadplex, Apartment Building, etc.' maxLength: 191 style: type: - string - 'null' description: Property Style such as Ranch, Split Level, Two-Story, Three-Story, Condo, etc. maxLength: 191 square_feet: type: - integer - 'null' description: Structure's finished square feet. beds: description: 'Number of Bedrooms. Can be an integer like `3` or a decimal like `3.5`.' anyOf: - type: integer - type: number - type: 'null' baths: description: 'Number of Bathrooms. Can be an integer like `3` or a decimal like `3.5`.' anyOf: - type: integer - type: number - type: 'null' year_built: type: - string - 'null' description: Year when the current structure was built on the land. lot_size: type: - string - 'null' description: 'Area of the lot. Use API field `lot_size_unit` to denote whether `lot_size` is measured in square feet or acres. The default is `square_feet`. This data is returned string even though it is numeric. It could be `"12500"` when using square feet, or `"0.1099862258"` when using acres.' maxLength: 191 lot_size_unit: type: string description: Unit of measure for `lot_size`. Must be `square_feet` or `acres`. enum: - square_feet - acres garages: type: - integer - 'null' description: 'Number of garage spaces or parking spaces, whichever makes the most sense for the property type.' minimum: 0 maximum: 999 title: V1ProjectUpdateRequest Workspace: type: object properties: uuid: type: string description: Public identifier owner: description: 'User that maintains the Workspace''s Subscription and highest level permissions.' $ref: '#/components/schemas/User' company: type: - object - 'null' description: Company Profile for this Workspace. properties: name: type: - string - 'null' email: type: - string - 'null' phone: type: - string - 'null' website: type: - string - 'null' required: - name - email - phone - website role: type: string description: 'What account type the User holds within this Workspace. Such as `Owner`, `Team Admin`, `Team Member`' user_permissions: type: array description: 'Software Features the User is allowed to use when working within the Workspace. Varies according to the Workspace''s Subscription Plan and how the User''s account is configured in the Workspace. Please contact us for a complete list of possible values.' items: type: string project_stages: type: object description: 'Projects within a Workspace can be assigned to one of these Project Stage keys. Keys are the machine-readable values accepted by the API. Values are the human-readable text for that Stage. A Project''s current Stage is returned via the Project schema as field `stage`. Workspace Owners can customize the human-readable values using the web application, but the machine-readable values cannot be changed. For example, if the human-readable text for `pending_purchase` was customized to be "Evaluating Deal" then the API still requires submitting `pending_purchase` to move the Project to the Evaluating Deal Stage.' additionalProperties: type: string required: - uuid - owner - company - role - user_permissions - project_stages title: Workspace responses: AuthenticationException: description: Unauthenticated content: application/json: schema: type: object properties: message: type: string description: Error overview. required: - message ValidationException: description: Validation error content: application/json: schema: type: object properties: message: type: string description: Errors overview. errors: type: object description: A detailed description of each field that failed validation. additionalProperties: type: array items: type: string required: - message - errors ModelNotFoundException: description: Not found content: application/json: schema: type: object properties: message: type: string description: Error overview. required: - message