Fund That Flip Project Expenses: Transactions API

The Project Expenses: Transactions API from Fund That Flip — 3 operation(s) for project expenses: transactions.

Operations 5

GET /project/{projectV1}/expense-transactions/list List #
POST /project/{projectV1}/expense-transactions/create Create #
GET /project/{projectV1}/expense-transactions/{transactionUuid} Show #
PATCH /project/{projectV1}/expense-transactions/{transactionUuid} Update #
DELETE /project/{projectV1}/expense-transactions/{transactionUuid} Delete #

Work with this as data

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-expenses-transactions-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 Specification

fund-that-flip-project-expenses-transactions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: 'FlipperForce Public Project Expenses: Transactions 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 Expenses: Transactions'
paths:
  /project/{projectV1}/expense-transactions/list:
    get:
      operationId: v1.project.expense-transactions.list
      description: 'List Expense Transactions within a Project.


        ## Reporting on Total Amounts


        Use the [Project Expenses: Line Items - List API](/operations/v1.project.expense-line-items.list) to query for total expense amounts and build expense reports.


        ## Finding Transactions without a Receipt


        Use `has_receipt=false` to list only Expense Transactions that do not have a Receipt. For example, to find Transactions whose Receipts you still need to find or follow up with a contractor to scan.


        Or use `has_receipt=true` to list only Expense Transactions that have a Receipt.


        Omitting `has_receipt` (default) returns both cases.'
      summary: List
      tags:
      - 'Project Expenses: Transactions'
      parameters:
      - name: per_page
        in: query
        description: Number of records to return at a time.
        schema:
          type: integer
          default: 20
          minimum: 1
          maximum: 100
      - name: has_receipt
        in: query
        description: Default (omitted) returns both cases. Pass `true` to only return Transactions with a Receipt, or `false` for Transactions without a Receipt.
        schema:
          type: boolean
      - name: cursor
        in: query
        schema:
          type: string
      - name: projectV1
        in: path
        required: true
        description: Project UUID
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Paginated set of `Expense Transaction`
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Expense_Transaction_List'
                  links:
                    type: object
                    properties:
                      first:
                        type:
                        - string
                        - 'null'
                      last:
                        type:
                        - string
                        - 'null'
                      prev:
                        type:
                        - string
                        - 'null'
                      next:
                        type:
                        - string
                        - 'null'
                    required:
                    - first
                    - last
                    - prev
                    - next
                  meta:
                    type: object
                    properties:
                      path:
                        type:
                        - string
                        - 'null'
                        description: Base path for paginator generated URLs.
                      per_page:
                        type: integer
                        description: Number of items shown per page.
                        minimum: 0
                      next_cursor:
                        type:
                        - string
                        - 'null'
                        description: The "cursor" that points to the next set of items.
                      prev_cursor:
                        type:
                        - string
                        - 'null'
                        description: The "cursor" that points to the previous set of items.
                      total_count:
                        type: integer
                        description: Number of records matching the request filters before pagination.
                    required:
                    - path
                    - per_page
                    - next_cursor
                    - prev_cursor
                    - total_count
                required:
                - data
                - links
                - meta
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '422':
          $ref: '#/components/responses/ValidationException'
        '403':
          description: When the authenticated User Account is forbidden from accessing the content or software features
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Human-readable description of why access was not allowed
                  reason:
                    type:
                    - string
                    - 'null'
                    description: 'Machine-readable code for why access was not allowed. Possible values:

                      * `UNKNOWN` - Access Forbidden

                      * `UNSUPPORTED_CLIENT` - Unsupported client.

                      * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature.

                      * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access.

                      * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access.

                      * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it.

                      * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace.

                      * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request.

                      '
                    enum:
                    - UNKNOWN
                    - UNSUPPORTED_CLIENT
                    - SUBSCRIPTION_MISSING
                    - SUBSCRIPTION_PAYMENT_DUE
                    - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE
                    - FEATURE_ACCESS_DENIED
                    - PROJECT_ACCESS_DENIED
                    - PROJECT_ARCHIVED
                    - WORKSPACE_ACCESS_DENIED
                    - WORKSPACE_SELECTION_MISSING
                    - null
  /project/{projectV1}/expense-transactions/create:
    post:
      operationId: v1.project.expense-transactions.create
      description: "Create an Expense Transaction with Line Items to track your expenses. Associate them with a [Company](/operations/v1.workspace.companies.list), [Expense Category](/operations/v1.project.expense-categories.list) and [Expense Account](/operations/v1.workspace.expense-accounts.list) to then use reporting features.\n\nExpenses are visible in the web application user interface in the Project Expense Tracker tool.\n\n## Reporting on Transactions and Expenses\n\nA Transaction has many Expense Line Items. Use the [Project Expenses: Line Items API](/operations/v1.project.expense-line-items.list) for reporting purposes like:\n\n* Year-to-Date Totals\n* Per Company Totals\n* Per Expense Category Totals\n* Per Expense Account Totals\n\n## Understanding FlipperForce expense tracking concepts\n\nThink of each Expense Transaction as starting from the receipt/invoice you receive from a vendor, or as each charge on a credit card statement.\n\nEach purchase or payment is stored as an Expense Transaction. And each item or service purchased on that transaction (like items on a receipt) is stored as an Expense Line Item on that Expense Transaction.\n\nFlipperForce allows you to go beyond simple accounting by tracking each Expense Line Item in an Expense Category, so you can compare your Budget vs Actuals spending for each category.\n\n## Setup 1: Workspace Companies\n\nThe [Companies API](/operations/v1.workspace.companies.list) is for tracking each vendor you do business with. For example, The Home Depot where you purchase materials, or your most reliable general contractor who invoices you for completed jobs.\n\nCompanies are shared across all Projects in your Workspace, so you can track your spending with every vendor across every Project.\n\nCreate a Company record for each vendor you make purchases from.\n\n## Setup 2: Workspace Expense Accounts\n\nThe [Expense Accounts API](/operations/v1.workspace.expense-accounts.list) is for tracking each credit card, bank account, Venmo/PayPal account, or payment method used to pay for expenses.\n\nExpense Accounts are shared across all Projects in your Workspace, so you can track your spending for every Account.\n\nCreate an Expense Account record for each account your business makes purchases from.\n\n## Setup 3: Project Expense Categories\n\nThe [Project Expenses: Categories API](/operations/v1.project.expense-categories.list) is for categorizing your spending for each Expense Line Item. For example, Interior Doors, Kitchen, or Appliances.\n\n**NOTE:** Each Project has a separate list of Expense Categories. You must use the Expense Category associated with the Project where you are creating expenses.\n\nProject Expense Categories must be added from the Project's Deal Analysis - Repair Estimator tool. For example, within the \"Exteriors\" top-level category, create a new category called \"Roofing\" to track expenses like shingles, nails, underlayment, etc.\n\nThe fastest way to create repair categories (and thus expense categories) is by loading a Repair Estimator Template onto the Project.\n\n## Example: Creating an Expense Transaction with a Receipt\n\nWith setup complete, you can now create your first Expense Transaction.\n\nLet's use an example purchase from The Home Depot. Assume you received a receipt that has the following data:\n\n* Company: The Home Depot\n* Date: 06/13/26\n* Items:\n    * 1/2 in. x 4 ft. x 8 ft. Plywood Sheet - $28.45\n    * Deck Screws, 1 lb. Box - $9.97\n    * 1 Gal. Interior Eggshell Paint - $29.98\n    * 20V Cordless Drill - $42.67\n* Subtotal: $111.07\n* Sales Tax (8.45%): $9.38\n* Grand Total: $120.45\n* Chip Read XXXXXXXXXXX4213 VISA\n\n### Step 1: Upload the Receipt (optional)\n\nFollow the documentation in the [Project Receipts: Create API](/operations/v1.project.receipts.create) for uploading your Receipt file.\n\nUploading a Receipt is optional. You can also attach it later by updating the Expense Transaction.\n\nThe rest of the example will assume you received an HTTP Response that has the uploaded Receipt's `uuid`, which can be associated with the Transaction below.\n\n### Step 2: Find The Home Depot in your list of Companies\n\nUse the [Companies API](/operations/v1.workspace.companies.list) to find all Companies in your Workspace and locate the `uuid` of The Home Depot in your Workspace.\n\n### Step 3: Find Visa 4213 credit card in your list of Expense Accounts\n\nUse the [Expense Accounts: List API](/operations/v1.workspace.expense-accounts.list) to find the `uuid` of your Visa credit card with card number 4213.\n\n### Step 4: Find relevant Expense Categories for each item\n\nUse the [Project Expenses: Categories: List API](/operations/v1.project.expense-categories.list) to find the `uuid` of the Expense Categories relevant to each item you purchased.\n\nThe example Home Depot line items could be the following:\n\n* 1/2 in. x 4 ft. x 8 ft. Plywood Sheet - \"Framing\"\n* Deck Screws, 1 lb. Box - \"Decks/Porches\"\n* 1 Gal. Interior Eggshell Paint - \"Bathrooms\"\n* 20V Cordless Drill - \"Tools\"\n\n### Step 5: Create the Expense Transaction\n\nThe following example request associates the Company (The Home Depot), Expense Account (Visa 4213), Expense Categories, and Receipt from the previous instructions.\n\nSubmit each purchased item as the `expenses` array.\n\nExample Request:\n\n```json\nPOST /api/v1/project/41a5aedc-a598-403b-9499-a74dc50544e8/expense-transactions/create\n\n{\n  \"date\": \"2026-06-13\",\n  \"company_uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n  \"expense_account_uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n  \"total_tax\": 9.38,\n  \"receipt_uuid\": \"7f8b5b9e-3e2a-4d8d-9f1b-5e88277d8d8d\",\n  \"expenses\": [\n    {\n      \"name\": \"1/2 in. x 4 ft. x 8 ft. Plywood Sheet\",\n      \"amount\": 28.45,\n      \"class\": \"material\",\n      \"expense_category_uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\"\n    },\n    {\n      \"name\": \"Deck Screws, 1 lb. Box\",\n      \"amount\": 9.97,\n      \"class\": \"material\",\n      \"expense_category_uuid\": \"4f5a6b7c-8d9e-4f01-9123-3456789abcde\"\n    },\n    {\n      \"name\": \"1 Gal. Interior Eggshell Paint\",\n      \"amount\": 29.98,\n      \"class\": \"material\",\n      \"expense_category_uuid\": \"5a6b7c8d-9e0f-4012-a234-456789abcdef\"\n    },\n    {\n      \"name\": \"20V Cordless Drill\",\n      \"amount\": 42.67,\n      \"class\": \"other\",\n      \"expense_category_uuid\": \"6b7c8d9e-0f12-4123-b345-56789abcdef0\"\n    }\n  ]\n}\n```\n\nExample Response:\n\n```json\nHTTP/1.1 201 Created\n\n{\n  \"data\": {\n    \"uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n    \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n    \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n    \"sequence_number\": 104,\n    \"receipt_uuid\": \"7f8b5b9e-3e2a-4d8d-9f1b-5e88277d8d8d\",\n    \"subtotal\": 111.07,\n    \"total_tax\": 9.38,\n    \"grand_total\": 120.45,\n    \"expenses\": [\n      {\n        \"uuid\": \"9d0e1f23-4567-489a-bcde-f0123456789a\",\n        \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n        \"date\": \"2026-06-13\",\n        \"invoice_number\": null,\n        \"name\": \"1/2 in. x 4 ft. x 8 ft. Plywood Sheet\",\n        \"class\": \"material\",\n        \"amount\": 28.45,\n        \"tax\": 2.40,\n        \"total\": 30.85,\n        \"expense_account\": {\n          \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n          \"name\": \"Visa 4213\"\n        },\n        \"company\": {\n          \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n          \"name\": \"The Home Depot\"\n        },\n        \"expense_category\": {\n          \"uuid\": \"3e4f5a6b-7c8d-4e9f-8012-23456789abcd\",\n          \"name\": \"Interior - Framing\"\n        }\n      },\n      {\n        \"uuid\": \"0e1f2345-6789-4abc-9def-0123456789ab\",\n        \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n        \"date\": \"2026-06-13\",\n        \"invoice_number\": null,\n        \"name\": \"Deck Screws, 1 lb. Box\",\n        \"class\": \"material\",\n        \"amount\": 9.97,\n        \"tax\": 0.84,\n        \"total\": 10.81,\n        \"expense_account\": {\n          \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n          \"name\": \"Visa 4213\"\n        },\n        \"company\": {\n          \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n          \"name\": \"The Home Depot\"\n        },\n        \"expense_category\": {\n          \"uuid\": \"4f5a6b7c-8d9e-4f01-9123-3456789abcde\",\n          \"name\": \"Exterior - Decks/Porches\"\n        }\n      },\n      {\n        \"uuid\": \"1f234567-89ab-4cde-8f01-23456789abcd\",\n        \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n        \"date\": \"2026-06-13\",\n        \"invoice_number\": null,\n        \"name\": \"1 Gal. Interior Eggshell Paint\",\n        \"class\": \"material\",\n        \"amount\": 29.98,\n        \"tax\": 2.53,\n        \"total\": 32.51,\n        \"expense_account\": {\n          \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n          \"name\": \"Visa 4213\"\n        },\n        \"company\": {\n          \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n          \"name\": \"The Home Depot\"\n        },\n        \"expense_category\": {\n          \"uuid\": \"5a6b7c8d-9e0f-4012-a234-456789abcdef\",\n          \"name\": \"Interior - Bathrooms\"\n        }\n      },\n      {\n        \"uuid\": \"23456789-abcd-4ef0-9123-456789abcdef\",\n        \"created_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"updated_at\": \"2026-06-14T15:30:00.000000Z\",\n        \"transaction_uuid\": \"8c9d0e1f-2345-4567-89ab-cdef01234567\",\n        \"date\": \"2026-06-13\",\n        \"invoice_number\": null,\n        \"name\": \"20V Cordless Drill\",\n        \"class\": \"other\",\n        \"amount\": 42.67,\n        \"tax\": 3.61,\n        \"total\": 46.28,\n        \"expense_account\": {\n          \"uuid\": \"1c2d3e4f-5a6b-4c7d-8e9f-0123456789ab\",\n          \"name\": \"Visa 4213\"\n        },\n        \"company\": {\n          \"uuid\": \"2d3e4f5a-6b7c-4d8e-9f01-123456789abc\",\n          \"name\": \"The Home Depot\"\n        },\n        \"expense_category\": {\n          \"uuid\": \"6b7c8d9e-0f12-4123-b345-56789abcdef0\",\n          \"name\": \"Other - Tools\"\n        }\n      }\n    ]\n  }\n}\n```\n\n## How taxes are handled\n\nMost receipts do not explicitly list how much tax was incurred for each item. But a receipt only lists the total tax charged as a percentage of the subtotal.\n\nFlipperForce automatically distributes the Total Tax across each line item amount.\n\nThis allows you to account for spending on taxes as part of your total construction costs.\n\nRead the following example transaction for how taxes are distributed:\n\n```monospace\nNails          $100\nDecking        $300\nShingles       $600\n\n     Subtotal $1000\n    Total Tax  $100\n\n  Grand Total $1100\n```\n\nFlipperForce will automatically distribute the Total Tax across each Expense Line Item when you save the Transaction:\n\n```monospace\nItem          |     Amount |   Tax | Total\n--------------+------------+-------+-------\nNails         |       $100 |   $10 |  $110\nDecking       |       $300 |   $30 |  $330\nShingles      |       $600 |   $60 |  $660\n```\n\nThe Tax across all items still totals $100 (which was entered as Total Tax), and the Transaction Grand Total is computed as 110 + 330 + 660 = 1100.\n\n## Default fields from the root level\n\nSome fields submitted at the root level will be automatically applied to each item in the `expenses` array when omitted from the expense item.\n\n* `date`\n* `invoice_number`\n* `company_uuid`\n* `expense_account_uuid`\n* `expense_category_uuid`\n\nHere is an example using the `date` field and overwriting it:\n\n```json\n{\n  \"date\": \"2026-06-13\",\n  \"expenses\": [\n    {\n      // Unnecessary because the root level uses \"date\"\n      \"date\": \"2026-06-13\",\n    },\n    {\n      // But can be submitted with a different \"date\"\n      // to override the root level value\n      \"date\": \"2026-07-25\",\n    },\n  ]\n}\n```\n\n## Reporting on Total Amounts\n\nUse the [Project Expenses: Line Items - List API](/operations/v1.project.expense-line-items.list) to query for total expense amounts and build expense reports."
      summary: Create
      tags:
      - 'Project Expenses: Transactions'
      parameters:
      - name: projectV1
        in: path
        required: true
        description: Project UUID
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Create_Expense_Transaction_Request'
      responses:
        '201':
          description: '`Expense Transaction`'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Expense_Transaction'
                required:
                - data
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '422':
          $ref: '#/components/responses/ValidationException'
        '403':
          description: When the authenticated User Account is forbidden from accessing the content or software features
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Human-readable description of why access was not allowed
                  reason:
                    type:
                    - string
                    - 'null'
                    description: 'Machine-readable code for why access was not allowed. Possible values:

                      * `UNKNOWN` - Access Forbidden

                      * `UNSUPPORTED_CLIENT` - Unsupported client.

                      * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature.

                      * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access.

                      * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access.

                      * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it.

                      * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace.

                      * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request.

                      '
                    enum:
                    - UNKNOWN
                    - UNSUPPORTED_CLIENT
                    - SUBSCRIPTION_MISSING
                    - SUBSCRIPTION_PAYMENT_DUE
                    - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE
                    - FEATURE_ACCESS_DENIED
                    - PROJECT_ACCESS_DENIED
                    - PROJECT_ARCHIVED
                    - WORKSPACE_ACCESS_DENIED
                    - WORKSPACE_SELECTION_MISSING
                    - null
  /project/{projectV1}/expense-transactions/{transactionUuid}:
    get:
      operationId: v1.project.expense-transactions.show
      description: Retrieve a single Expense Transaction with Expense line items.
      summary: Show
      tags:
      - 'Project Expenses: Transactions'
      parameters:
      - name: projectV1
        in: path
        required: true
        description: Project UUID
        schema:
          type: string
          format: uuid
      - name: transactionUuid
        in: path
        required: true
        description: Expense Transaction UUID
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: '`Expense Transaction`'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Expense_Transaction'
                required:
                - data
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '403':
          description: When the authenticated User Account is forbidden from accessing the content or software features
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Human-readable description of why access was not allowed
                  reason:
                    type:
                    - string
                    - 'null'
                    description: 'Machine-readable code for why access was not allowed. Possible values:

                      * `UNKNOWN` - Access Forbidden

                      * `UNSUPPORTED_CLIENT` - Unsupported client.

                      * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature.

                      * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access.

                      * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access.

                      * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it.

                      * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace.

                      * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request.

                      '
                    enum:
                    - UNKNOWN
                    - UNSUPPORTED_CLIENT
                    - SUBSCRIPTION_MISSING
                    - SUBSCRIPTION_PAYMENT_DUE
                    - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE
                    - FEATURE_ACCESS_DENIED
                    - PROJECT_ACCESS_DENIED
                    - PROJECT_ARCHIVED
                    - WORKSPACE_ACCESS_DENIED
                    - WORKSPACE_SELECTION_MISSING
                    - null
    patch:
      operationId: v1.project.expense-transactions.update
      description: 'Update an Expense Transaction and submitted Expense line items. Omitted existing Expenses are not deleted.


        When `total_tax` is omitted, the Transaction''s current total tax is preserved and redistributed across all Expense line items after submitted changes are applied.'
      summary: Update
      tags:
      - 'Project Expenses: Transactions'
      parameters:
      - name: projectV1
        in: path
        required: true
        description: Project UUID
        schema:
          type: string
          format: uuid
      - name: transactionUuid
        in: path
        required: true
        description: Expense Transaction UUID
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Update_Expense_Transaction_Request'
      responses:
        '200':
          description: '`Expense Transaction`'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Expense_Transaction'
                required:
                - data
        '401':
          $ref: '#/components/responses/AuthenticationException'
        '422':
          $ref: '#/components/responses/ValidationException'
        '403':
          description: When the authenticated User Account is forbidden from accessing the content or software features
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: Human-readable description of why access was not allowed
                  reason:
                    type:
                    - string
                    - 'null'
                    description: 'Machine-readable code for why access was not allowed. Possible values:

                      * `UNKNOWN` - Access Forbidden

                      * `UNSUPPORTED_CLIENT` - Unsupported client.

                      * `SUBSCRIPTION_MISSING` - A Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PAYMENT_DUE` - A paid Subscription is required. Visit the application website to manage the Subscription.

                      * `SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE` - The Subscription Plan does not support using this Software Feature.

                      * `FEATURE_ACCESS_DENIED` - Your account within this Workspace is not allowed to use this Software Feature. Contact the Workspace Owner to request access.

                      * `PROJECT_ACCESS_DENIED` - Your account is not allowed to access this Project. Contact the Workspace Owner to request access.

                      * `PROJECT_ARCHIVED` - This Project is Archived and cannot be accessed. You must restore this Project to Active Status to use it.

                      * `WORKSPACE_ACCESS_DENIED` - You do not have an account within this Workspace.

                      * `WORKSPACE_SELECTION_MISSING` - You must select a Workspace before making this request.

                      '
                    enum:
                    - UNKNOWN
                    - UNSUPPORTED_CLIENT
                    - SUBSCRIPTION_MISSING
                    - SUBSCRIPTION_PAYMENT_DUE
                    - SUBSCRIPTION_PLAN_UNSUPPORTED_FEATURE
                    - FEATURE_ACCESS_DENIED
                    - PROJECT_ACCESS_DENIED
                    - PROJECT_ARCHIVED
                    - WORKSPACE_ACCESS_DENIED
                    - WORKSPACE_SELECTION_MISSING
                    - null
    delete:
      operationId: v1.project.expense-transactions

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