FlipperForce Public API

The FlipperForce Public API is the REST API behind Upright's (formerly Fund That Flip's) FlipperForce project management platform for real estate redevelopers. It exposes 50 operations across projects, expense transactions and line items, expense categories and accounts, project income, receipts, photo logs, project updates, companies and company categories, file upload intents, the user account and the workspace activity log. Access is by request only: a workspace owner requests a Public API key from Workspace Settings > Integrations, and the key is sent as an HTTP Bearer token.

OpenAPI Specification

fund-that-flip-flipperforce-public-api.yml Raw ↑
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: q

# --- truncated at 32 KB (300 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fund-that-flip/refs/heads/main/openapi/fund-that-flip-flipperforce-public-api.yml