openapi: 3.2.0 info: title: FlipperForce Public Project 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: Project paths: /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 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: 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 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 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 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 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 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