openapi: 3.2.0 info: title: FlipperForce Public Company 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 security: - PublicApiBearerAuth: [] tags: - name: Company paths: /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 components: responses: 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 AuthenticationException: description: Unauthenticated content: application/json: schema: type: object properties: message: type: string description: Error overview. required: - message schemas: 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 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 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