Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/fund-that-flip-project-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
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` -
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fund-that-flip/refs/heads/main/openapi/fund-that-flip-project-api-openapi.yml