# QuickBooks Online

> Invoice customers, record payments, bills and expenses, and run reports in QuickBooks Online.

App · Accounting & Finance · 79 actions · 7 triggers. Web page: https://docs.lodol.com/docs/integrations/quickbooks

## Triggers

Start a workflow when something happens in QuickBooks Online. See [how triggers work](https://docs.lodol.com/docs/concepts/triggers.md).

### New QuickBooks customer

Runs when a customer is added in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `display_name` (text)
- `company_name` (text)
- `email` (text)
- `phone` (text)
- `balance` (number)
- `created_at` (text)
- `record` (object)

### New QuickBooks vendor

Runs when a vendor is added in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `display_name` (text)
- `company_name` (text)
- `email` (text)
- `phone` (text)
- `balance` (number)
- `created_at` (text)
- `record` (object)

### New QuickBooks invoice

Runs when an invoice is created in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `doc_number` (text)
- `customer_id` (text)
- `customer_name` (text)
- `total` (number)
- `balance` (number)
- `txn_date` (text)
- `due_date` (text)
- `email` (text)
- `currency` (text)
- `created_at` (text)
- `record` (object)

### QuickBooks invoice paid

Runs when a customer payment pays off an invoice in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `doc_number` (text)
- `customer_id` (text)
- `customer_name` (text)
- `total` (number)
- `txn_date` (text)
- `due_date` (text)
- `currency` (text)
- `payment_id` (text)
- `payment_date` (text)
- `paid_at` (text)
- `record` (object)

### New QuickBooks payment

Runs when a customer payment is recorded in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `customer_id` (text)
- `customer_name` (text)
- `total` (number)
- `unapplied` (number)
- `txn_date` (text)
- `invoice_ids` (list)
- `currency` (text)
- `created_at` (text)
- `record` (object)

### New QuickBooks bill

Runs when a bill is entered in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `doc_number` (text)
- `vendor_id` (text)
- `vendor_name` (text)
- `total` (number)
- `balance` (number)
- `txn_date` (text)
- `due_date` (text)
- `currency` (text)
- `created_at` (text)
- `record` (object)

### New QuickBooks estimate

Runs when an estimate is created in QuickBooks Online.

**Event fields**: What a run starts with. Later steps read each field with an @ reference.

- `id` (text)
- `doc_number` (text)
- `customer_id` (text)
- `customer_name` (text)
- `total` (number)
- `status` (text)
- `txn_date` (text)
- `expiration_date` (text)
- `email` (text)
- `currency` (text)
- `created_at` (text)
- `record` (object)

## Actions

### Add a note in QuickBooks

Attach a text note to a transaction or contact.

**Inputs**

- Attach to (`entity_type`, text, required): The kind of record to attach to. One of: `Invoice`, `Estimate`, `SalesReceipt` (Sales receipt), `CreditMemo` (Credit memo), `RefundReceipt` (Refund receipt), `Payment`, `Bill`, `BillPayment` (Bill payment), `Purchase` (Expense), `PurchaseOrder` (Purchase order), and 9 more.
- Record ID (`entity_id`, text, required): That record's Id, such as an invoice Id.
- Note (`note`, text, required): The note.

**Outputs**

- `Attachable` (object)
- `time` (text)

**Example output**

```json
{
  "Attachable": {
    "AttachableRef": [
      {
        "EntityRef": {
          "type": "Invoice",
          "value": "130"
        }
      }
    ],
    "Id": "5000000000000123457",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Note": "Customer asked for net 45 terms.",
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Attach a file in QuickBooks

Upload a file, such as a receipt or a signed contract, and attach it to a transaction or contact. Up to 100MB.

**Inputs**

- File (`file`, text, required): The file to attach: upload one, or use a file from an earlier step.
- Attach to (`entity_type`, text, required): The kind of record to attach to. One of: `Invoice`, `Estimate`, `SalesReceipt` (Sales receipt), `CreditMemo` (Credit memo), `RefundReceipt` (Refund receipt), `Payment`, `Bill`, `BillPayment` (Bill payment), `Purchase` (Expense), `PurchaseOrder` (Purchase order), and 9 more.
- Record ID (`entity_id`, text, required): That record's Id, such as an invoice Id.
- File name (`file_name`, text): The file's name in QuickBooks. Defaults to the uploaded file's name.
- Note (`note`, text): A note shown with the attachment.
- Include when sending (`include_on_send`, true/false): Send the file along when the transaction is emailed.

**Outputs**

- `Attachable` (object)
- `time` (text)

**Example output**

```json
{
  "Attachable": {
    "AttachableRef": [
      {
        "EntityRef": {
          "type": "Invoice",
          "value": "130"
        },
        "IncludeOnSend": false
      }
    ],
    "ContentType": "application/pdf",
    "FileName": "receipt.pdf",
    "Id": "5000000000000123456",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Size": 48213,
    "SyncToken": "0",
    "TempDownloadUri": "https://intuit-qbo-prod-30.s3.amazonaws.com/receipt.pdf"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Convert a QuickBooks estimate to an invoice

Invoice an accepted estimate: creates an invoice with the estimate's customer and lines, linked back to it, and QuickBooks closes the estimate.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Due date (`due_date`, date): When payment is due.
- Invoice number (`doc_number`, text): The invoice's number. Leave blank to let QuickBooks number it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks account

Add an account to the chart of accounts, such as a new bank account or expense category. QuickBooks accounts can't be deleted, only made inactive in QuickBooks.

**Inputs**

- Name (`name`, text, required): The account's name. It can't contain double quotes or colons.
- Account type (`account_type`, text, required): What kind of account it is. One of: `Bank`, `Other Current Asset`, `Fixed Asset`, `Other Asset`, `Accounts Receivable`, `Equity`, `Expense`, `Other Expense`, `Cost of Goods Sold`, `Accounts Payable`, and 5 more.
- Detail type (`account_sub_type`, text): A finer type within the account type, such as Checking for a Bank account or OfficeGeneralAdministrativeExpenses for an Expense account. Defaults to the type's most common one.
- Number (`account_number`, text): The account number, when the company numbers its accounts.
- Description (`description`, text): What the account is for.
- Parent account (`parent_account_id`, text): Make it a sub-account of this account (of the same type).
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Account` (object)
- `time` (text)

**Example output**

```json
{
  "Account": {
    "AccountSubType": "Checking",
    "AccountType": "Bank",
    "Active": true,
    "Classification": "Asset",
    "CurrencyRef": {
      "name": "United States Dollar",
      "value": "USD"
    },
    "CurrentBalance": 1201.0,
    "FullyQualifiedName": "Checking",
    "Id": "35",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Name": "Checking",
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks bill

Record a bill a vendor sent you, to pay later with 'Pay a QuickBooks bill'. Give one line by category or by product, or several in Line items.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.
- Amount (`line_amount`, number): The line's total. At least 0.
- Category (`expense_account_id`, text): The category: the account the money went to, such as Office Supplies.
- Description (`line_description`, text): What the line is for.
- Product/service (`item_id`, text): A product or service bought by the unit, instead of a category.
- Quantity (`quantity`, number): How many, for a product or service. At least 0.
- Unit cost (`unit_price`, number): The cost of one, for a product or service.
- Billable to customer (`billable_customer_id`, text): A customer to pass this cost on to: the line is marked billable to them.
- Tax code (`tax_code_id`, text): The line's tax code, where the company tracks tax on purchases.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"account_id": "20", "amount": 45, "description": "Paper"}]. Keys: amount, description, account_id (a category), or item_id with quantity and unit_price; customer_id and billable, class_id, tax_code_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Due date (`due_date`, date): When payment is due.
- Bill no. (`doc_number`, text): The vendor's bill or invoice number.
- Terms (`terms_id`, text): Payment terms, such as Net 30, which set the due date when none is given.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Bill` (object)
- `time` (text)

**Example output**

```json
{
  "Bill": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "Balance": 45.0,
    "DocNumber": "INV-8812",
    "DueDate": "2026-10-30",
    "Id": "150",
    "Line": [
      {
        "AccountBasedExpenseLineDetail": {
          "AccountRef": {
            "name": "Office Expenses",
            "value": "15"
          },
          "BillableStatus": "NotBillable"
        },
        "Amount": 45.0,
        "Description": "Printer paper",
        "DetailType": "AccountBasedExpenseLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks credit memo

Give a customer credit, for a return or an overcharge, that can be applied to their invoices with 'Create a QuickBooks payment'.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.
- Amount (`line_amount`, number): The line's total. Leave blank to use quantity times unit price. At least 0.
- Description (`line_description`, text): What the line is for, as the customer sees it.
- Product/service (`item_id`, text): The product or service sold. Leave blank to use the company's 'Services' item: QuickBooks ignores the amount of a line without an item.
- Quantity (`quantity`, number): How many. At least 0.
- Unit price (`unit_price`, number): The price of one.
- Service date (`service_date`, date): When the work was done.
- Tax code (`tax_code_id`, text): The line's sales tax code. In US companies that's TAX or NON.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"item_id": "1", "quantity": 2, "unit_price": 150, "description": "Design"}]. Keys: amount, description, item_id, quantity, unit_price, service_date, tax_code_id, class_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Class (`class_id`, text): The class to track this under, when the company uses class tracking.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `CreditMemo` (object)
- `time` (text)

**Example output**

```json
{
  "CreditMemo": {
    "Balance": 300.0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1040",
    "Id": "190",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "RemainingCredit": 300.0,
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks customer

Create a new customer in QuickBooks Online.

**Inputs**

- Display name (`display_name`, text, required): The name QuickBooks shows. It must be unique across all customers, vendors and employees, including inactive ones.
- First name (`given_name`, text): First name.
- Last name (`family_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Main phone number.
- Company (`company_name`, text): Company name.
- Mobile (`mobile`, text): Mobile number.
- Website (`website`, text): Website address.
- Address line 1 (`address_line1`, text): Billing address, first line.
- Address line 2 (`address_line2`, text): Billing address, second line.
- City (`city`, text): City.
- State (`state`, text): State, province or region code, such as CA.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Notes (`notes`, text): Private notes about the customer.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Customer` (object)
- `time` (text)

**Example output**

```json
{
  "Customer": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Acme Corp",
    "DisplayName": "Acme Corp",
    "FamilyName": "Doe",
    "GivenName": "Jane",
    "Id": "58",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "ap@acme.example"
    },
    "PrimaryPhone": {
      "FreeFormNumber": "(555) 555-0100"
    },
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks deposit

Record a bank deposit. The simple form deposits an amount from an account such as an income account; Line items can also deposit payments waiting in Undeposited Funds.

**Inputs**

- Deposit to (`deposit_to_account_id`, text, required): The bank account the money went into.
- Amount (`amount`, number): The amount deposited. At least 0.
- From account (`from_account_id`, text): The account the money came from, such as an income account.
- Description (`description`, text): What the deposit is for.
- Received from (`received_from_customer_id`, text): The customer it came from.
- Payment method (`payment_method_id`, text): How it was paid: cash, check, a card...
- Check no. (`check_num`, text): The check number, for a check.
- Lines (advanced) (`line_items`, list): Several lines instead of the simple form. Keys: amount, account_id, description, entity_id (a customer) with entity_type, payment_method_id, check_num, class_id; or txn_id with txn_type (Payment or SalesReceipt) to deposit a payment waiting in Undeposited Funds.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Deposit` (object)
- `time` (text)

**Example output**

```json
{
  "Deposit": {
    "DepositToAccountRef": {
      "name": "Checking",
      "value": "35"
    },
    "Id": "240",
    "Line": [
      {
        "Amount": 250.0,
        "DepositLineDetail": {
          "AccountRef": {
            "name": "Sales of Product Income",
            "value": "79"
          },
          "Entity": {
            "name": "Acme Corp",
            "value": "58"
          }
        },
        "DetailType": "DepositLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 250.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks estimate

Create an estimate (quote) for a customer, with one line from the line fields or several from Line items.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.
- Amount (`line_amount`, number): The line's total. Leave blank to use quantity times unit price. At least 0.
- Description (`line_description`, text): What the line is for, as the customer sees it.
- Product/service (`item_id`, text): The product or service sold. Leave blank to use the company's 'Services' item: QuickBooks ignores the amount of a line without an item.
- Quantity (`quantity`, number): How many. At least 0.
- Unit price (`unit_price`, number): The price of one.
- Service date (`service_date`, date): When the work was done.
- Tax code (`tax_code_id`, text): The line's sales tax code. In US companies that's TAX or NON.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"item_id": "1", "quantity": 2, "unit_price": 150, "description": "Design"}]. Keys: amount, description, item_id, quantity, unit_price, service_date, tax_code_id, class_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Expiration date (`expiration_date`, date): When the estimate expires.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Class (`class_id`, text): The class to track this under, when the company uses class tracking.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Estimate` (object)
- `time` (text)

**Example output**

```json
{
  "Estimate": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1038",
    "EmailStatus": "NotSet",
    "ExpirationDate": "2026-10-30",
    "Id": "170",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "TxnStatus": "Pending"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks expense

Record money already spent: a card charge, a check or a cash purchase. Give one line by category, or several in Line items.

**Inputs**

- Paid from (`payment_account_id`, text, required): The bank or credit card account it was paid from.
- Payment type (`payment_type`, text): Cash, Check or CreditCard. Defaults to Cash. One of: `Cash`, `Check`, `CreditCard` (Credit card). Default: `Cash`.
- Amount (`line_amount`, number): The line's total. At least 0.
- Category (`expense_account_id`, text): The category: the account the money went to, such as Office Supplies.
- Description (`line_description`, text): What the line is for.
- Payee (vendor) (`vendor_id`, text): Who was paid.
- Billable to customer (`billable_customer_id`, text): A customer to pass this cost on to: the line is marked billable to them.
- Tax code (`tax_code_id`, text): The line's tax code, where the company tracks tax on purchases.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"account_id": "20", "amount": 45, "description": "Paper"}]. Keys: amount, description, account_id (a category), or item_id with quantity and unit_price; customer_id and billable, class_id, tax_code_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Ref no. (`doc_number`, text): The check or reference number.
- Payment method (`payment_method_id`, text): How it was paid: cash, check, a card...
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Purchase` (object)
- `time` (text)

**Example output**

```json
{
  "Purchase": {
    "AccountRef": {
      "name": "Visa",
      "value": "42"
    },
    "EntityRef": {
      "name": "Bob's Burger Joint",
      "type": "Vendor",
      "value": "56"
    },
    "Id": "160",
    "Line": [
      {
        "AccountBasedExpenseLineDetail": {
          "AccountRef": {
            "name": "Office Expenses",
            "value": "15"
          },
          "BillableStatus": "NotBillable"
        },
        "Amount": 45.0,
        "Description": "Printer paper",
        "DetailType": "AccountBasedExpenseLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PaymentType": "CreditCard",
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks invoice

Create an invoice for a customer, with one line from the line fields or several from Line items. It isn't emailed; use 'Send a QuickBooks invoice' for that.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.
- Amount (`line_amount`, number): The line's total. Leave blank to use quantity times unit price. At least 0.
- Description (`line_description`, text): What the line is for, as the customer sees it.
- Product/service (`item_id`, text): The product or service sold. Leave blank to use the company's 'Services' item: QuickBooks ignores the amount of a line without an item.
- Quantity (`quantity`, number): How many. At least 0.
- Unit price (`unit_price`, number): The price of one.
- Service date (`service_date`, date): When the work was done.
- Tax code (`tax_code_id`, text): The line's sales tax code. In US companies that's TAX or NON.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"item_id": "1", "quantity": 2, "unit_price": 150, "description": "Design"}]. Keys: amount, description, item_id, quantity, unit_price, service_date, tax_code_id, class_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Due date (`due_date`, date): When payment is due.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Terms (`terms_id`, text): Payment terms, such as Net 30, which set the due date when none is given.
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Class (`class_id`, text): The class to track this under, when the company uses class tracking.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks item

Add a product or service to sell or buy. Service and inventory items need an income account; inventory items also need an asset account, an expense account and a starting quantity.

**Inputs**

- Name (`name`, text, required): The item's name, unique among items.
- Type (`item_type`, text): Service, non-inventory product, or inventory product. Defaults to Service. One of: `Service`, `NonInventory` (Non-inventory product), `Inventory` (Inventory product). Default: `Service`.
- Sales description (`description`, text): The description on sales forms.
- Sales price (`unit_price`, number): The sales price.
- Income account (`income_account_id`, text): The income account sales of it post to. Required for Service and Inventory items; an Inventory item's must have the Sales of Product Income detail type.
- Purchase description (`purchase_description`, text): The description on purchase forms.
- Cost (`purchase_cost`, number): What it costs to buy.
- Expense account (`expense_account_id`, text): The expense account purchases of it post to (Cost of Goods Sold for inventory). Required for Inventory items.
- SKU (`sku`, text): Its stock-keeping unit code.
- Taxable (`taxable`, true/false): Whether sales tax applies to it (US).
- Inventory asset account (`asset_account_id`, text): Inventory only: the inventory asset account that tracks its value.
- Quantity on hand (`quantity_on_hand`, number): Inventory only: how many you have now. At least 0.
- As of date (`inventory_start_date`, date): Inventory only: the date the starting quantity is as of. Defaults to today.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Item` (object)
- `time` (text)

**Example output**

```json
{
  "Item": {
    "Active": true,
    "FullyQualifiedName": "Services",
    "Id": "1",
    "IncomeAccountRef": {
      "name": "Services",
      "value": "1"
    },
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Name": "Services",
    "SyncToken": "0",
    "Taxable": false,
    "Type": "Service",
    "UnitPrice": 150
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks journal entry

Post a journal entry. The simple form moves an amount from a credit account to a debit account; Line items takes any number of lines. Debits and credits must balance.

**Inputs**

- Amount (`amount`, number): The amount to move. At least 0.
- Debit account (`debit_account_id`, text): The account to debit.
- Credit account (`credit_account_id`, text): The account to credit.
- Description (`description`, text): What the entry is for, on both lines.
- Lines (advanced) (`line_items`, list): The entry's lines instead of the simple form, e.g. [{"posting_type": "Debit", "account_id": "11", "amount": 100}, {"posting_type": "Credit", "account_id": "44", "amount": 100}]. Keys: posting_type, amount, account_id, description, entity_type and entity_id (a Customer, Vendor or Employee; required on receivable and payable lines), class_id, department_id.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Adjusting entry (`adjustment`, true/false): Mark it as an adjusting entry.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `JournalEntry` (object)
- `time` (text)

**Example output**

```json
{
  "JournalEntry": {
    "Adjustment": false,
    "DocNumber": "JE-12",
    "Id": "230",
    "Line": [
      {
        "Amount": 100.0,
        "Description": "September insurance",
        "DetailType": "JournalEntryLineDetail",
        "Id": "0",
        "JournalEntryLineDetail": {
          "AccountRef": {
            "name": "Insurance",
            "value": "11"
          },
          "PostingType": "Debit"
        }
      },
      {
        "Amount": 100.0,
        "Description": "September insurance",
        "DetailType": "JournalEntryLineDetail",
        "Id": "1",
        "JournalEntryLineDetail": {
          "AccountRef": {
            "name": "Checking",
            "value": "35"
          },
          "PostingType": "Credit"
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks payment

Record a payment in QuickBooks Online, optionally linked to an invoice.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.
- Amount (`total_amount`, number, required): The amount received. At least 0.
- Invoice ID (`invoice_id`, text): An invoice the whole amount pays.
- Apply to (advanced) (`applied_to`, list): Split the amount across several invoices or credit memos instead, e.g. [{"invoice_id": "130", "amount": 100}, {"invoice_id": "131", "amount": 50}]. Use "txn_type": "CreditMemo" to apply a credit memo. Any amount not applied stays on the customer's account as a credit.
- Payment date (`payment_date`, date): When it was received. Defaults to today.
- Payment method (`payment_method_id`, text): How it was paid: cash, check, a card...
- Reference no. (`reference_number`, text): The check number or other reference.
- Deposit to (`deposit_to_account_id`, text): Where the money went. Defaults to Undeposited Funds, to be deposited later.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Payment` (object)
- `time` (text)

**Example output**

```json
{
  "Payment": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "Id": "140",
    "Line": [
      {
        "Amount": 300.0,
        "LinkedTxn": [
          {
            "TxnId": "130",
            "TxnType": "Invoice"
          }
        ]
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "UnappliedAmt": 0
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks purchase order

Order goods or services from a vendor. Give one line by product or by category, or several in Line items.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.
- Product/service (`item_id`, text): A product or service bought by the unit, instead of a category.
- Quantity (`quantity`, number): How many, for a product or service. At least 0.
- Unit cost (`unit_price`, number): The cost of one, for a product or service.
- Amount (`line_amount`, number): The line's total. At least 0.
- Category (`expense_account_id`, text): The category: the account the money went to, such as Office Supplies.
- Description (`line_description`, text): What the line is for.
- Billable to customer (`billable_customer_id`, text): A customer to pass this cost on to: the line is marked billable to them.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"account_id": "20", "amount": 45, "description": "Paper"}]. Keys: amount, description, account_id (a category), or item_id with quantity and unit_price; customer_id and billable, class_id, tax_code_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Expected date (`due_date`, date): When you expect it.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Email to (`email_to`, text): The vendor's email address for this order.
- Message to vendor (`memo`, text): A message to the vendor, printed on the order.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `PurchaseOrder` (object)
- `time` (text)

**Example output**

```json
{
  "PurchaseOrder": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "DocNumber": "1005",
    "EmailStatus": "NotSet",
    "Id": "210",
    "Line": [
      {
        "Amount": 90.0,
        "DetailType": "ItemBasedExpenseLineDetail",
        "Id": "1",
        "ItemBasedExpenseLineDetail": {
          "BillableStatus": "NotBillable",
          "ItemRef": {
            "name": "Pump",
            "value": "11"
          },
          "Qty": 3,
          "UnitPrice": 30
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "POEmail": {
      "Address": "orders@bobs.example"
    },
    "POStatus": "Open",
    "SyncToken": "0",
    "TotalAmt": 90.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks refund receipt

Refund a customer: record money paid back to them out of a bank account.

**Inputs**

- Refund from (`refund_from_account_id`, text, required): The account the refund was paid from.
- Customer (`customer_id`, text): The customer this is for. Pick one, or use an Id from 'List QuickBooks customers'.
- Amount (`line_amount`, number): The line's total. Leave blank to use quantity times unit price. At least 0.
- Description (`line_description`, text): What is being refunded.
- Product/service (`item_id`, text): The product or service refunded. Leave blank to use the company's 'Services' item.
- Quantity (`quantity`, number): How many. At least 0.
- Unit price (`unit_price`, number): The price of one.
- Tax code (`tax_code_id`, text): The line's sales tax code.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"item_id": "1", "quantity": 2, "unit_price": 150, "description": "Design"}]. Keys: amount, description, item_id, quantity, unit_price, service_date, tax_code_id, class_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Payment method (`payment_method_id`, text): How it was paid: cash, check, a card...
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `RefundReceipt` (object)
- `time` (text)

**Example output**

```json
{
  "RefundReceipt": {
    "Balance": 0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DepositToAccountRef": {
      "name": "Checking",
      "value": "35"
    },
    "DocNumber": "1041",
    "Id": "200",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks sales receipt

Record a sale that was paid for at the time, so no invoice is needed. Give one line from the line fields or several from Line items.

**Inputs**

- Customer (`customer_id`, text): The customer this is for. Pick one, or use an Id from 'List QuickBooks customers'.
- Amount (`line_amount`, number): The line's total. Leave blank to use quantity times unit price. At least 0.
- Description (`line_description`, text): What the line is for, as the customer sees it.
- Product/service (`item_id`, text): The product or service sold. Leave blank to use the company's 'Services' item: QuickBooks ignores the amount of a line without an item.
- Quantity (`quantity`, number): How many. At least 0.
- Unit price (`unit_price`, number): The price of one.
- Service date (`service_date`, date): When the work was done.
- Tax code (`tax_code_id`, text): The line's sales tax code. In US companies that's TAX or NON.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"item_id": "1", "quantity": 2, "unit_price": 150, "description": "Design"}]. Keys: amount, description, item_id, quantity, unit_price, service_date, tax_code_id, class_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Payment method (`payment_method_id`, text): How it was paid: cash, check, a card...
- Reference no. (`reference_number`, text): The check number or other payment reference.
- Deposit to (`deposit_to_account_id`, text): Where the money went. Defaults to Undeposited Funds, to be deposited later.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Class (`class_id`, text): The class to track this under, when the company uses class tracking.
- Location (`department_id`, text): The location (QuickBooks' departments) to track this under, when the company uses locations.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `SalesReceipt` (object)
- `time` (text)

**Example output**

```json
{
  "SalesReceipt": {
    "Balance": 0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DepositToAccountRef": {
      "name": "Undeposited Funds",
      "value": "4"
    },
    "DocNumber": "1039",
    "Id": "180",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PaymentMethodRef": {
      "name": "Cash",
      "value": "1"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks time activity

Log time an employee or contractor worked, optionally billable to a customer.

**Inputs**

- Hours (`hours`, number, required): Hours worked; add Minutes for the rest. At least 0.
- Worker type (`worker_type`, text): Whether an employee or a vendor (contractor) did the work. Defaults to Employee. One of: `Employee`, `Vendor` (Vendor (contractor)). Default: `Employee`.
- Employee (`employee_id`, text): The employee, when the worker is an employee.
- Vendor (`vendor_id`, text): The contractor, when the worker is a vendor.
- Minutes (`minutes`, number): Minutes worked beyond the hours. At least 0.
- Date (`txn_date`, date): The day the work was done. Defaults to today.
- Customer (`customer_id`, text): The customer this is for. Pick one, or use an Id from 'List QuickBooks customers'.
- Service (`item_id`, text): The service performed.
- Billable (`billable`, true/false): Whether to bill the customer for the time.
- Hourly rate (`hourly_rate`, number): The rate to bill, when billable.
- Description (`description`, text): What was done.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `TimeActivity` (object)
- `time` (text)

**Example output**

```json
{
  "TimeActivity": {
    "BillableStatus": "Billable",
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "Description": "Site visit",
    "EmployeeRef": {
      "name": "Emily Platt",
      "value": "55"
    },
    "HourlyRate": 75,
    "Hours": 3,
    "Id": "260",
    "ItemRef": {
      "name": "Services",
      "value": "1"
    },
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Minutes": 30,
    "NameOf": "Employee",
    "SyncToken": "0",
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks transfer

Move money between two of the company's accounts, such as checking to savings.

**Inputs**

- From account (`from_account_id`, text, required): The account the money leaves.
- To account (`to_account_id`, text, required): The account the money goes to.
- Amount (`amount`, number, required): How much to move. At least 0.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.

**Outputs**

- `Transfer` (object)
- `time` (text)

**Example output**

```json
{
  "Transfer": {
    "Amount": 500.0,
    "FromAccountRef": {
      "name": "Checking",
      "value": "35"
    },
    "Id": "250",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "ToAccountRef": {
      "name": "Savings",
      "value": "36"
    },
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks vendor

Add a vendor (supplier) you buy from and pay bills to.

**Inputs**

- Display name (`display_name`, text, required): The name QuickBooks shows. It must be unique across all customers, vendors and employees, including inactive ones.
- First name (`given_name`, text): First name.
- Last name (`family_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Main phone number.
- Company (`company_name`, text): Company name.
- Mobile (`mobile`, text): Mobile number.
- Website (`website`, text): Website address.
- Address line 1 (`address_line1`, text): Billing address, first line.
- Address line 2 (`address_line2`, text): Billing address, second line.
- City (`city`, text): City.
- State (`state`, text): State, province or region code, such as CA.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Account number (`account_number`, text): Your account number with this vendor.
- Track for 1099 (`is_1099`, true/false): Whether the vendor gets a 1099 (US).
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Vendor` (object)
- `time` (text)

**Example output**

```json
{
  "Vendor": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Bob's Burger Joint",
    "DisplayName": "Bob's Burger Joint",
    "Id": "56",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "orders@bobs.example"
    },
    "SyncToken": "0",
    "Vendor1099": false
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Create a QuickBooks vendor credit

Record a credit or refund a vendor owes you, which can be applied against their bills.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.
- Amount (`line_amount`, number): The line's total. At least 0.
- Category (`expense_account_id`, text): The category: the account the money went to, such as Office Supplies.
- Description (`line_description`, text): What the line is for.
- Product/service (`item_id`, text): A product or service bought by the unit, instead of a category.
- Quantity (`quantity`, number): How many, for a product or service. At least 0.
- Unit cost (`unit_price`, number): The cost of one, for a product or service.
- Line items (advanced) (`line_items`, list): Several lines instead of the single line above, e.g. [{"account_id": "20", "amount": 45, "description": "Paper"}]. Keys: amount, description, account_id (a category), or item_id with quantity and unit_price; customer_id and billable, class_id, tax_code_id. A line in QuickBooks' own shape (with a DetailType) is sent as given.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Ref no. (`doc_number`, text): The vendor's credit note number.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `VendorCredit` (object)
- `time` (text)

**Example output**

```json
{
  "VendorCredit": {
    "Balance": 45.0,
    "Id": "220",
    "Line": [
      {
        "AccountBasedExpenseLineDetail": {
          "AccountRef": {
            "name": "Office Expenses",
            "value": "15"
          },
          "BillableStatus": "NotBillable"
        },
        "Amount": 45.0,
        "Description": "Printer paper",
        "DetailType": "AccountBasedExpenseLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Deactivate a QuickBooks customer

Make a customer inactive, which is how QuickBooks removes one: it disappears from lists and pickers, and its transactions stay on the books.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.

**Outputs**

- `Customer` (object)
- `time` (text)

**Example output**

```json
{
  "Customer": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Acme Corp",
    "DisplayName": "Acme Corp",
    "FamilyName": "Doe",
    "GivenName": "Jane",
    "Id": "58",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "ap@acme.example"
    },
    "PrimaryPhone": {
      "FreeFormNumber": "(555) 555-0100"
    },
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Deactivate a QuickBooks vendor

Make a vendor inactive, which is how QuickBooks removes one: it disappears from lists and pickers, and its transactions stay on the books.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.

**Outputs**

- `Vendor` (object)
- `time` (text)

**Example output**

```json
{
  "Vendor": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Bob's Burger Joint",
    "DisplayName": "Bob's Burger Joint",
    "Id": "56",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "orders@bobs.example"
    },
    "SyncToken": "0",
    "Vendor1099": false
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Delete a QuickBooks bill

Delete a bill permanently. Payments made against it must be deleted first.

**Inputs**

- Bill ID (`bill_id`, text, required): The bill's Id, from 'Create a QuickBooks bill' or 'List QuickBooks bills'.

**Outputs**

- `Bill` (object)
- `deleted` (true/false)
- `id` (text)
- `time` (text)
- `type` (text)

**Example output**

```json
{
  "Bill": {
    "Id": "150",
    "domain": "QBO",
    "status": "Deleted"
  },
  "deleted": true,
  "id": "150",
  "time": "2026-09-30T10:15:00.000-07:00",
  "type": "Bill"
}
```

### Delete a QuickBooks estimate

Delete an estimate permanently. An invoice made from it must be deleted first.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.

**Outputs**

- `Estimate` (object)
- `deleted` (true/false)
- `id` (text)
- `time` (text)
- `type` (text)

**Example output**

```json
{
  "Estimate": {
    "Id": "170",
    "domain": "QBO",
    "status": "Deleted"
  },
  "deleted": true,
  "id": "170",
  "time": "2026-09-30T10:15:00.000-07:00",
  "type": "Estimate"
}
```

### Delete a QuickBooks invoice

Delete an invoice permanently. Payments applied to it must be removed first.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.

**Outputs**

- `Invoice` (object)
- `deleted` (true/false)
- `id` (text)
- `time` (text)
- `type` (text)

**Example output**

```json
{
  "Invoice": {
    "Id": "130",
    "domain": "QBO",
    "status": "Deleted"
  },
  "deleted": true,
  "id": "130",
  "time": "2026-09-30T10:15:00.000-07:00",
  "type": "Invoice"
}
```

### Delete a QuickBooks transaction

Delete any transaction, attachment or note permanently: a payment, expense, journal entry, deposit and so on. Transactions linked to others must be unlinked first. Customers, vendors, items and accounts can't be deleted, only deactivated.

**Inputs**

- Type (`transaction_type`, text, required): The kind of record to delete. One of: `Invoice`, `Estimate`, `SalesReceipt` (Sales receipt), `CreditMemo` (Credit memo), `RefundReceipt` (Refund receipt), `Payment`, `Bill`, `BillPayment` (Bill payment), `Purchase` (Expense), `PurchaseOrder` (Purchase order), and 6 more.
- ID (`transaction_id`, text, required): Its Id.

**Outputs**: The record deleted. QuickBooks' own reply also holds an Id and Deleted status under the record type's name.

- `deleted` (true/false)
- `id` (text)
- `time` (text)
- `type` (text)

**Example output**

```json
{
  "deleted": true,
  "id": "160",
  "time": "2026-09-30T10:15:00.000-07:00",
  "type": "Purchase"
}
```

### Download a QuickBooks attachment

Save a file attached in QuickBooks so later steps can use it.

**Inputs**

- Attachment ID (`attachment_id`, text, required): The attachment's Id, from 'List QuickBooks attachments' or 'Attach a file in QuickBooks'.

**Outputs**

- `Attachable` (object)
- `content_type` (text)
- `document_ref` (text)
- `documents` (list)
- `filename` (text)
- `size_bytes` (number)
- `url` (text)

**Example output**

```json
{
  "Attachable": {
    "AttachableRef": [
      {
        "EntityRef": {
          "type": "Invoice",
          "value": "130"
        },
        "IncludeOnSend": false
      }
    ],
    "ContentType": "application/pdf",
    "FileName": "receipt.pdf",
    "Id": "5000000000000123456",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Size": 48213,
    "SyncToken": "0",
    "TempDownloadUri": "https://intuit-qbo-prod-30.s3.amazonaws.com/receipt.pdf"
  },
  "content_type": "application/pdf",
  "document_ref": "doc_7c6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_7c6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
      "filename": "receipt.pdf",
      "size_bytes": 48213,
      "url": "/actions/core/serve-document/doc_7c6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
    }
  ],
  "filename": "receipt.pdf",
  "size_bytes": 48213,
  "url": "/actions/core/serve-document/doc_7c6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
}
```

### Get a QuickBooks accounts payable aging report

What the company owes vendors, bucketed by how overdue it is: one row per vendor, or per open bill when detailed.

**Inputs**

- As of (`report_date`, date): The day to age balances as of. Defaults to today.
- Detailed (`detailed`, true/false): List each open transaction instead of one total per name. Default: `false`.
- Days per period (`aging_period_days`, number): Detailed report only: days per aging bucket. Defaults to 30. At least 1.
- Number of periods (`number_of_periods`, number): Detailed report only: how many aging buckets. Defaults to 4. At least 1.
- Vendor (`vendor_id`, text): Only this vendor's transactions.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Vendor",
    "Current",
    "1 - 30",
    "31 - 60",
    "61 - 90",
    "91 and over",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_name": "AgedPayables",
  "rows": [
    {
      "amount": 45.0,
      "depth": 0,
      "id": "56",
      "kind": "data",
      "label": "Bob's Burger Joint",
      "values": {
        "1 - 30": null,
        "31 - 60": null,
        "61 - 90": null,
        "91 and over": null,
        "Current": 45.0,
        "Total": 45.0
      }
    }
  ],
  "start_period": "2026-09-30",
  "totals": {
    "GrandTotal": 45.0
  }
}
```

### Get a QuickBooks accounts receivable aging report

What customers owe, bucketed by how overdue it is: one row per customer, or per open invoice when detailed.

**Inputs**

- As of (`report_date`, date): The day to age balances as of. Defaults to today.
- Detailed (`detailed`, true/false): List each open transaction instead of one total per name. Default: `false`.
- Days per period (`aging_period_days`, number): Detailed report only: days per aging bucket. Defaults to 30. At least 1.
- Number of periods (`number_of_periods`, number): Detailed report only: how many aging buckets. Defaults to 4. At least 1.
- Customer (`customer_id`, text): Only this customer's transactions.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Customer",
    "Current",
    "1 - 30",
    "31 - 60",
    "61 - 90",
    "91 and over",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_name": "AgedReceivables",
  "rows": [
    {
      "amount": 300.0,
      "depth": 0,
      "id": "58",
      "kind": "data",
      "label": "Acme Corp",
      "values": {
        "1 - 30": null,
        "31 - 60": null,
        "61 - 90": null,
        "91 and over": null,
        "Current": 300.0,
        "Total": 300.0
      }
    }
  ],
  "start_period": "2026-09-30",
  "totals": {
    "GrandTotal": 300.0
  }
}
```

### Get a QuickBooks balance sheet

Assets, liabilities and equity as of the end date, as rows and totals by section.

**Inputs**

- Start date (`start_date`, date): The first day to report on.
- End date (`end_date`, date): The last day to report on.
- Period (`date_macro`, text): A named period instead of start and end dates. Without either, QuickBooks reports this fiscal year to date. One of: `Today`, `Yesterday`, `This Week`, `Last Week`, `This Week-to-date`, `Last Week-to-date`, `Next Week`, `Next 4 Weeks`, `This Month`, `Last Month`, and 13 more.
- Accounting method (`accounting_method`, text): Cash or accrual basis. Defaults to the company's own setting. One of: `Accrual`, `Cash`.
- Columns (`summarize_by`, text): Split the amounts into columns by month, customer and so on. Defaults to a single Total column. One of: `Total` (Total only), `Month` (Months), `Week` (Weeks), `Days`, `Quarter` (Quarters), `Year` (Years), `Customers`, `Vendors`, `Classes`, `Departments` (Locations), `Employees`, `ProductsAndServices` (Products and services).
- Customer (`customer_id`, text): Only this customer's transactions.
- Class (`class_id`, text): Only amounts tracked under this class.
- Location (`department_id`, text): Only amounts tracked under this location.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Account",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_basis": "Accrual",
  "report_name": "BalanceSheet",
  "rows": [
    {
      "amount": 24742.44,
      "depth": 0,
      "group": "TotalAssets",
      "kind": "total",
      "label": "Total Assets",
      "values": {
        "Total": 24742.44
      }
    },
    {
      "amount": 24742.44,
      "depth": 0,
      "group": "TotalLiabilitiesAndEquity",
      "kind": "total",
      "label": "Total Liabilities and Equity",
      "values": {
        "Total": 24742.44
      }
    }
  ],
  "start_period": "2026-01-01",
  "summarize_columns_by": "Total",
  "totals": {
    "TotalAssets": 24742.44,
    "TotalLiabilitiesAndEquity": 24742.44
  }
}
```

### Get a QuickBooks bill

Retrieve a single bill by ID, including its open balance.

**Inputs**

- Bill ID (`bill_id`, text, required): The bill's Id, from 'Create a QuickBooks bill' or 'List QuickBooks bills'.

**Outputs**

- `Bill` (object)
- `time` (text)

**Example output**

```json
{
  "Bill": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "Balance": 45.0,
    "DocNumber": "INV-8812",
    "DueDate": "2026-10-30",
    "Id": "150",
    "Line": [
      {
        "AccountBasedExpenseLineDetail": {
          "AccountRef": {
            "name": "Office Expenses",
            "value": "15"
          },
          "BillableStatus": "NotBillable"
        },
        "Amount": 45.0,
        "Description": "Printer paper",
        "DetailType": "AccountBasedExpenseLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks cash flow statement

Cash in and out over a period by operating, investing and financing activity, as rows and totals by section.

**Inputs**

- Start date (`start_date`, date): The first day to report on.
- End date (`end_date`, date): The last day to report on.
- Period (`date_macro`, text): A named period instead of start and end dates. Without either, QuickBooks reports this fiscal year to date. One of: `Today`, `Yesterday`, `This Week`, `Last Week`, `This Week-to-date`, `Last Week-to-date`, `Next Week`, `Next 4 Weeks`, `This Month`, `Last Month`, and 13 more.
- Columns (`summarize_by`, text): Split the amounts into columns by month, customer and so on. Defaults to a single Total column. One of: `Total` (Total only), `Month` (Months), `Week` (Weeks), `Days`, `Quarter` (Quarters), `Year` (Years), `Customers`, `Vendors`, `Classes`, `Departments` (Locations), `Employees`, `ProductsAndServices` (Products and services).
- Customer (`customer_id`, text): Only this customer's transactions.
- Vendor (`vendor_id`, text): Only this vendor's transactions.
- Class (`class_id`, text): Only amounts tracked under this class.
- Location (`department_id`, text): Only amounts tracked under this location.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Account",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_name": "CashFlow",
  "rows": [
    {
      "amount": 5000.0,
      "depth": 0,
      "group": "CashIncrease",
      "kind": "total",
      "label": "Net cash increase for period",
      "values": {
        "Total": 5000.0
      }
    }
  ],
  "start_period": "2026-09-01",
  "summarize_columns_by": "Total",
  "totals": {
    "CashIncrease": 5000.0
  }
}
```

### Get a QuickBooks customer

Retrieve a single customer by ID from QuickBooks Online.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.

**Outputs**

- `Customer` (object)
- `time` (text)

**Example output**

```json
{
  "Customer": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Acme Corp",
    "DisplayName": "Acme Corp",
    "FamilyName": "Doe",
    "GivenName": "Jane",
    "Id": "58",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "ap@acme.example"
    },
    "PrimaryPhone": {
      "FreeFormNumber": "(555) 555-0100"
    },
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks estimate

Retrieve a single estimate by ID, including its status.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.

**Outputs**

- `Estimate` (object)
- `time` (text)

**Example output**

```json
{
  "Estimate": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1038",
    "EmailStatus": "NotSet",
    "ExpirationDate": "2026-10-30",
    "Id": "170",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "TxnStatus": "Pending"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks estimate PDF

Save an estimate as the PDF a customer would receive. Later steps can attach or email the file.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.

**Outputs**

- `content_type` (text)
- `document_ref` (text)
- `documents` (list)
- `entity` (text)
- `filename` (text)
- `id` (text)
- `size_bytes` (number)
- `url` (text)

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_ref": "doc_5a6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_5a6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
      "filename": "estimate-170.pdf",
      "size_bytes": 41120,
      "url": "/actions/core/serve-document/doc_5a6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
    }
  ],
  "entity": "Estimate",
  "filename": "estimate-170.pdf",
  "id": "170",
  "size_bytes": 41120,
  "url": "/actions/core/serve-document/doc_5a6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
}
```

### Get a QuickBooks invoice

Retrieve a single invoice by ID from QuickBooks Online.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks invoice PDF

Save an invoice as the PDF a customer would receive, styled by the company's invoice template. Later steps can attach or email the file.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.

**Outputs**

- `content_type` (text)
- `document_ref` (text)
- `documents` (list)
- `entity` (text)
- `filename` (text)
- `id` (text)
- `size_bytes` (number)
- `url` (text)

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_ref": "doc_4f6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_4f6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
      "filename": "invoice-130.pdf",
      "size_bytes": 48213,
      "url": "/actions/core/serve-document/doc_4f6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
    }
  ],
  "entity": "Invoice",
  "filename": "invoice-130.pdf",
  "id": "130",
  "size_bytes": 48213,
  "url": "/actions/core/serve-document/doc_4f6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
}
```

### Get a QuickBooks item

Retrieve a single product or service by ID, including its price, accounts and, for inventory, quantity on hand.

**Inputs**

- Product/service (`item_id`, text, required): The product or service. Pick one, or use an Id from 'List QuickBooks items'.

**Outputs**

- `Item` (object)
- `time` (text)

**Example output**

```json
{
  "Item": {
    "Active": true,
    "FullyQualifiedName": "Services",
    "Id": "1",
    "IncomeAccountRef": {
      "name": "Services",
      "value": "1"
    },
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Name": "Services",
    "SyncToken": "0",
    "Taxable": false,
    "Type": "Service",
    "UnitPrice": 150
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks payment

Retrieve a single customer payment by ID, including the invoices it paid.

**Inputs**

- Payment ID (`payment_id`, text, required): The payment's Id, from 'Create a QuickBooks payment' or 'List QuickBooks payments'.

**Outputs**

- `Payment` (object)
- `time` (text)

**Example output**

```json
{
  "Payment": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "Id": "140",
    "Line": [
      {
        "Amount": 300.0,
        "LinkedTxn": [
          {
            "TxnId": "130",
            "TxnType": "Invoice"
          }
        ]
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "UnappliedAmt": 0
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks profit and loss report

Income, expenses and net income for a period, as rows a workflow can loop over and totals by section (Income, Expenses, NetIncome...).

**Inputs**

- Start date (`start_date`, date): The first day to report on.
- End date (`end_date`, date): The last day to report on.
- Period (`date_macro`, text): A named period instead of start and end dates. Without either, QuickBooks reports this fiscal year to date. One of: `Today`, `Yesterday`, `This Week`, `Last Week`, `This Week-to-date`, `Last Week-to-date`, `Next Week`, `Next 4 Weeks`, `This Month`, `Last Month`, and 13 more.
- Accounting method (`accounting_method`, text): Cash or accrual basis. Defaults to the company's own setting. One of: `Accrual`, `Cash`.
- Columns (`summarize_by`, text): Split the amounts into columns by month, customer and so on. Defaults to a single Total column. One of: `Total` (Total only), `Month` (Months), `Week` (Weeks), `Days`, `Quarter` (Quarters), `Year` (Years), `Customers`, `Vendors`, `Classes`, `Departments` (Locations), `Employees`, `ProductsAndServices` (Products and services).
- Customer (`customer_id`, text): Only this customer's transactions.
- Class (`class_id`, text): Only amounts tracked under this class.
- Location (`department_id`, text): Only amounts tracked under this location.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Account",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_basis": "Accrual",
  "report_name": "ProfitAndLoss",
  "rows": [
    {
      "amount": null,
      "depth": 0,
      "group": "Income",
      "kind": "header",
      "label": "Income",
      "values": {
        "Total": null
      }
    },
    {
      "amount": 2250.0,
      "depth": 1,
      "id": "82",
      "kind": "data",
      "label": "Design income",
      "values": {
        "Total": 2250.0
      }
    },
    {
      "amount": 2250.0,
      "depth": 0,
      "group": "Income",
      "kind": "total",
      "label": "Total Income",
      "values": {
        "Total": 2250.0
      }
    },
    {
      "amount": 1650.0,
      "depth": 0,
      "group": "NetIncome",
      "kind": "total",
      "label": "Net Income",
      "values": {
        "Total": 1650.0
      }
    }
  ],
  "start_period": "2026-09-01",
  "summarize_columns_by": "Total",
  "totals": {
    "Income": 2250.0,
    "NetIncome": 1650.0
  }
}
```

### Get a QuickBooks purchase order

Retrieve a single purchase order by ID, including whether it's still open.

**Inputs**

- Purchase order ID (`purchase_order_id`, text, required): The purchase order's Id, from 'Create a QuickBooks purchase order' or 'List QuickBooks purchase orders'.

**Outputs**

- `PurchaseOrder` (object)
- `time` (text)

**Example output**

```json
{
  "PurchaseOrder": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "DocNumber": "1005",
    "EmailStatus": "NotSet",
    "Id": "210",
    "Line": [
      {
        "Amount": 90.0,
        "DetailType": "ItemBasedExpenseLineDetail",
        "Id": "1",
        "ItemBasedExpenseLineDetail": {
          "BillableStatus": "NotBillable",
          "ItemRef": {
            "name": "Pump",
            "value": "11"
          },
          "Qty": 3,
          "UnitPrice": 30
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "POEmail": {
      "Address": "orders@bobs.example"
    },
    "POStatus": "Open",
    "SyncToken": "0",
    "TotalAmt": 90.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks sales receipt

Retrieve a single sales receipt by ID.

**Inputs**

- Sales receipt ID (`sales_receipt_id`, text, required): The sales receipt's Id, from 'Create a QuickBooks sales receipt' or 'List QuickBooks sales receipts'.

**Outputs**

- `SalesReceipt` (object)
- `time` (text)

**Example output**

```json
{
  "SalesReceipt": {
    "Balance": 0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DepositToAccountRef": {
      "name": "Undeposited Funds",
      "value": "4"
    },
    "DocNumber": "1039",
    "Id": "180",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PaymentMethodRef": {
      "name": "Cash",
      "value": "1"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get a QuickBooks sales receipt PDF

Save a sales receipt as the PDF a customer would receive. Later steps can attach or email the file.

**Inputs**

- Sales receipt ID (`sales_receipt_id`, text, required): The sales receipt's Id, from 'Create a QuickBooks sales receipt' or 'List QuickBooks sales receipts'.

**Outputs**

- `content_type` (text)
- `document_ref` (text)
- `documents` (list)
- `entity` (text)
- `filename` (text)
- `id` (text)
- `size_bytes` (number)
- `url` (text)

**Example output**

```json
{
  "content_type": "application/pdf",
  "document_ref": "doc_6b6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
  "documents": [
    {
      "content_type": "application/pdf",
      "document_ref": "doc_6b6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d",
      "filename": "sales-receipt-180.pdf",
      "size_bytes": 39876,
      "url": "/actions/core/serve-document/doc_6b6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
    }
  ],
  "entity": "SalesReceipt",
  "filename": "sales-receipt-180.pdf",
  "id": "180",
  "size_bytes": 39876,
  "url": "/actions/core/serve-document/doc_6b6f7b1c2d3e4a5b8c9d0e1f2a3b4c5d"
}
```

### Get a QuickBooks vendor

Retrieve a single vendor (supplier) by ID.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.

**Outputs**

- `Vendor` (object)
- `time` (text)

**Example output**

```json
{
  "Vendor": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Bob's Burger Joint",
    "DisplayName": "Bob's Burger Joint",
    "Id": "56",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "orders@bobs.example"
    },
    "SyncToken": "0",
    "Vendor1099": false
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Get QuickBooks company info

Read the connected company's name, legal name, address, contact details, country and fiscal year start.

**Inputs**: None.

**Outputs**

- `CompanyInfo` (object)
- `time` (text)

**Example output**

```json
{
  "CompanyInfo": {
    "CompanyAddr": {
      "City": "San Pablo",
      "CountrySubDivisionCode": "CA",
      "Line1": "123 Sierra Way",
      "PostalCode": "87999"
    },
    "CompanyName": "Craig's Design and Landscaping Services",
    "Country": "US",
    "Email": {
      "Address": "noreply@quickbooks.com"
    },
    "FiscalYearStartMonth": "January",
    "Id": "1",
    "LegalName": "Craig's Design and Landscaping Services",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "4"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks accounts

List accounts from the chart of accounts, optionally narrowed by type, classification or name. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Account type (`account_type`, text): Only accounts of this type. One of: `Bank`, `Other Current Asset`, `Fixed Asset`, `Other Asset`, `Accounts Receivable`, `Equity`, `Expense`, `Other Expense`, `Cost of Goods Sold`, `Accounts Payable`, and 5 more.
- Classification (`classification`, text): Only accounts in this group: Asset, Liability, Equity, Revenue or Expense. One of: `Asset`, `Liability`, `Equity`, `Revenue`, `Expense`.
- Name contains (`name_contains`, text): Only records whose name contains this text (not case-sensitive).
- Include inactive (`include_inactive`, true/false): Also return records that were made inactive. By default only active ones are listed. Default: `false`.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Account": [
      {
        "AccountSubType": "Checking",
        "AccountType": "Bank",
        "Active": true,
        "Classification": "Asset",
        "CurrencyRef": {
          "name": "United States Dollar",
          "value": "USD"
        },
        "CurrentBalance": 1201.0,
        "FullyQualifiedName": "Checking",
        "Id": "35",
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "Name": "Checking",
        "SyncToken": "0"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks attachments

List the files and notes attached to one transaction or contact.

**Inputs**

- Record type (`entity_type`, text, required): The kind of record. One of: `Invoice`, `Estimate`, `SalesReceipt` (Sales receipt), `CreditMemo` (Credit memo), `RefundReceipt` (Refund receipt), `Payment`, `Bill`, `BillPayment` (Bill payment), `Purchase` (Expense), `PurchaseOrder` (Purchase order), and 9 more.
- Record ID (`entity_id`, text, required): That record's Id, such as an invoice Id.
- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Attachable": [
      {
        "AttachableRef": [
          {
            "EntityRef": {
              "type": "Invoice",
              "value": "130"
            },
            "IncludeOnSend": false
          }
        ],
        "ContentType": "application/pdf",
        "FileName": "receipt.pdf",
        "Id": "5000000000000123456",
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "Size": 48213,
        "SyncToken": "0",
        "TempDownloadUri": "https://intuit-qbo-prod-30.s3.amazonaws.com/receipt.pdf"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks bills

List bills from vendors, optionally narrowed by vendor, payment status or date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Vendor (`vendor_id`, text): Only this vendor's transactions.
- Status (`status`, text): Only unpaid (open balance), paid, or overdue (open and past due) bills. One of: `any`, `unpaid`, `paid`, `overdue`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Bill": [
      {
        "APAccountRef": {
          "name": "Accounts Payable (A/P)",
          "value": "33"
        },
        "Balance": 45.0,
        "DocNumber": "INV-8812",
        "DueDate": "2026-10-30",
        "Id": "150",
        "Line": [
          {
            "AccountBasedExpenseLineDetail": {
              "AccountRef": {
                "name": "Office Expenses",
                "value": "15"
              },
              "BillableStatus": "NotBillable"
            },
            "Amount": 45.0,
            "Description": "Printer paper",
            "DetailType": "AccountBasedExpenseLineDetail",
            "Id": "1"
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TotalAmt": 45.0,
        "TxnDate": "2026-09-30",
        "VendorRef": {
          "name": "Bob's Burger Joint",
          "value": "56"
        }
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks changes

Everything of the chosen kinds created, changed or deleted since a moment in the last 30 days, in one call. Deleted records come back with status 'Deleted' and only their Id. Up to 1,000 records per kind.

**Inputs**

- Record types (`entities`, text, required): The kinds of record to report on. One or more of: `Account`, `Bill`, `BillPayment` (Bill payment), `Class`, `CreditMemo` (Credit memo), `Customer`, `Department` (Location), `Deposit`, `Employee`, `Estimate`, and 13 more.
- Changed since (`changed_since`, date and time, required): The moment to report changes since, within the last 30 days.

**Outputs**

- `changed_since` (text)
- `changes` (object): The changed records of each chosen type, by type name, e.g. changes.Invoice. A deleted record has status Deleted.
- `counts` (object): How many records changed, by type name.
- `time` (text)

**Example output**

```json
{
  "changed_since": "2026-09-29T00:00:00Z",
  "changes": {
    "Customer": [
      {
        "Id": "59",
        "domain": "QBO",
        "status": "Deleted"
      }
    ],
    "Invoice": [
      {
        "Balance": 300.0,
        "BillEmail": {
          "Address": "ap@acme.example"
        },
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "DocNumber": "1037",
        "DueDate": "2026-10-30",
        "EmailStatus": "NotSet",
        "Id": "130",
        "Line": [
          {
            "Amount": 300.0,
            "Description": "Garden design",
            "DetailType": "SalesItemLineDetail",
            "Id": "1",
            "LineNum": 1,
            "SalesItemLineDetail": {
              "ItemRef": {
                "name": "Services",
                "value": "1"
              },
              "Qty": 2,
              "UnitPrice": 150
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30"
      }
    ]
  },
  "counts": {
    "Customer": 1,
    "Invoice": 1
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks credit memos

List credit memos, optionally narrowed by customer or date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Customer (`customer_id`, text): Only this customer's transactions.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "CreditMemo": [
      {
        "Balance": 300.0,
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "DocNumber": "1040",
        "Id": "190",
        "Line": [
          {
            "Amount": 300.0,
            "Description": "Garden design",
            "DetailType": "SalesItemLineDetail",
            "Id": "1",
            "LineNum": 1,
            "SalesItemLineDetail": {
              "ItemRef": {
                "name": "Services",
                "value": "1"
              },
              "Qty": 2,
              "UnitPrice": 150
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "RemainingCredit": 300.0,
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks customers

List customers, optionally narrowed by name, email or when they last changed. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Name contains (`name_contains`, text): Only records whose name contains this text (not case-sensitive).
- Email (`email`, text): Only the customer with exactly this email address.
- Include inactive (`include_inactive`, true/false): Also return records that were made inactive. By default only active ones are listed. Default: `false`.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Customer": [
      {
        "Active": true,
        "Balance": 0,
        "CompanyName": "Acme Corp",
        "DisplayName": "Acme Corp",
        "FamilyName": "Doe",
        "GivenName": "Jane",
        "Id": "58",
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "PrimaryEmailAddr": {
          "Address": "ap@acme.example"
        },
        "PrimaryPhone": {
          "FreeFormNumber": "(555) 555-0100"
        },
        "SyncToken": "0"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks estimates

List estimates (quotes), optionally narrowed by customer or date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Customer (`customer_id`, text): Only this customer's transactions.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Estimate": [
      {
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "DocNumber": "1038",
        "EmailStatus": "NotSet",
        "ExpirationDate": "2026-10-30",
        "Id": "170",
        "Line": [
          {
            "Amount": 300.0,
            "Description": "Garden design",
            "DetailType": "SalesItemLineDetail",
            "Id": "1",
            "LineNum": 1,
            "SalesItemLineDetail": {
              "ItemRef": {
                "name": "Services",
                "value": "1"
              },
              "Qty": 2,
              "UnitPrice": 150
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30",
        "TxnStatus": "Pending"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks expenses

List expenses (checks, card charges and cash purchases), optionally narrowed by date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Purchase": [
      {
        "AccountRef": {
          "name": "Visa",
          "value": "42"
        },
        "EntityRef": {
          "name": "Bob's Burger Joint",
          "type": "Vendor",
          "value": "56"
        },
        "Id": "160",
        "Line": [
          {
            "AccountBasedExpenseLineDetail": {
              "AccountRef": {
                "name": "Office Expenses",
                "value": "15"
              },
              "BillableStatus": "NotBillable"
            },
            "Amount": 45.0,
            "Description": "Printer paper",
            "DetailType": "AccountBasedExpenseLineDetail",
            "Id": "1"
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "PaymentType": "CreditCard",
        "SyncToken": "0",
        "TotalAmt": 45.0,
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks invoices

List invoices, optionally narrowed by customer, payment status, date or number. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Customer (`customer_id`, text): Only this customer's transactions.
- Status (`status`, text): Only unpaid (open balance), paid, or overdue (open and past due) invoices. One of: `any`, `unpaid`, `paid`, `overdue`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Invoice number (`doc_number`, text): Only the invoice with this number.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Invoice": [
      {
        "Balance": 300.0,
        "BillEmail": {
          "Address": "ap@acme.example"
        },
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "DocNumber": "1037",
        "DueDate": "2026-10-30",
        "EmailStatus": "NotSet",
        "Id": "130",
        "Line": [
          {
            "Amount": 300.0,
            "Description": "Garden design",
            "DetailType": "SalesItemLineDetail",
            "Id": "1",
            "LineNum": 1,
            "SalesItemLineDetail": {
              "ItemRef": {
                "name": "Services",
                "value": "1"
              },
              "Qty": 2,
              "UnitPrice": 150
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks items

List products and services, optionally narrowed by type, name or SKU. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Type (`item_type`, text): Only items of this type. One of: `Service`, `NonInventory` (Non-inventory product), `Inventory` (Inventory product), `Group` (Bundle), `Category`.
- Name contains (`name_contains`, text): Only records whose name contains this text (not case-sensitive).
- SKU (`sku`, text): Only the item with exactly this SKU.
- Include inactive (`include_inactive`, true/false): Also return records that were made inactive. By default only active ones are listed. Default: `false`.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Item": [
      {
        "Active": true,
        "FullyQualifiedName": "Services",
        "Id": "1",
        "IncomeAccountRef": {
          "name": "Services",
          "value": "1"
        },
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "Name": "Services",
        "SyncToken": "0",
        "Taxable": false,
        "Type": "Service",
        "UnitPrice": 150
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks journal entries

List journal entries, optionally narrowed by date or number. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Entry number (`doc_number`, text): Only the entry with this number.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "JournalEntry": [
      {
        "Adjustment": false,
        "DocNumber": "JE-12",
        "Id": "230",
        "Line": [
          {
            "Amount": 100.0,
            "Description": "September insurance",
            "DetailType": "JournalEntryLineDetail",
            "Id": "0",
            "JournalEntryLineDetail": {
              "AccountRef": {
                "name": "Insurance",
                "value": "11"
              },
              "PostingType": "Debit"
            }
          },
          {
            "Amount": 100.0,
            "Description": "September insurance",
            "DetailType": "JournalEntryLineDetail",
            "Id": "1",
            "JournalEntryLineDetail": {
              "AccountRef": {
                "name": "Checking",
                "value": "35"
              },
              "PostingType": "Credit"
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks payments

List customer payments, optionally narrowed by customer or date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Customer (`customer_id`, text): Only this customer's transactions.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Payment": [
      {
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "Id": "140",
        "Line": [
          {
            "Amount": 300.0,
            "LinkedTxn": [
              {
                "TxnId": "130",
                "TxnType": "Invoice"
              }
            ]
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30",
        "UnappliedAmt": 0
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks purchase orders

List purchase orders, optionally narrowed by date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "PurchaseOrder": [
      {
        "APAccountRef": {
          "name": "Accounts Payable (A/P)",
          "value": "33"
        },
        "DocNumber": "1005",
        "EmailStatus": "NotSet",
        "Id": "210",
        "Line": [
          {
            "Amount": 90.0,
            "DetailType": "ItemBasedExpenseLineDetail",
            "Id": "1",
            "ItemBasedExpenseLineDetail": {
              "BillableStatus": "NotBillable",
              "ItemRef": {
                "name": "Pump",
                "value": "11"
              },
              "Qty": 3,
              "UnitPrice": 30
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "POEmail": {
          "Address": "orders@bobs.example"
        },
        "POStatus": "Open",
        "SyncToken": "0",
        "TotalAmt": 90.0,
        "TxnDate": "2026-09-30",
        "VendorRef": {
          "name": "Bob's Burger Joint",
          "value": "56"
        }
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks sales receipts

List sales receipts (sales paid for on the spot), optionally narrowed by customer or date. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Customer (`customer_id`, text): Only this customer's transactions.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "SalesReceipt": [
      {
        "Balance": 0,
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "DepositToAccountRef": {
          "name": "Undeposited Funds",
          "value": "4"
        },
        "DocNumber": "1039",
        "Id": "180",
        "Line": [
          {
            "Amount": 300.0,
            "Description": "Garden design",
            "DetailType": "SalesItemLineDetail",
            "Id": "1",
            "LineNum": 1,
            "SalesItemLineDetail": {
              "ItemRef": {
                "name": "Services",
                "value": "1"
              },
              "Qty": 2,
              "UnitPrice": 150
            }
          }
        ],
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "PaymentMethodRef": {
          "name": "Cash",
          "value": "1"
        },
        "SyncToken": "0",
        "TotalAmt": 300.0,
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks time activities

List logged time, optionally narrowed by date or billing status. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- From date (`date_from`, date): Only transactions dated on or after this day.
- To date (`date_to`, date): Only transactions dated on or before this day.
- Billing status (`billable_status`, text): Only time that is billable, not billable, or already billed. One of: `Billable`, `NotBillable` (Not billable), `HasBeenBilled` (Already billed).
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "TimeActivity": [
      {
        "BillableStatus": "Billable",
        "CustomerRef": {
          "name": "Acme Corp",
          "value": "58"
        },
        "Description": "Site visit",
        "EmployeeRef": {
          "name": "Emily Platt",
          "value": "55"
        },
        "HourlyRate": 75,
        "Hours": 3,
        "Id": "260",
        "ItemRef": {
          "name": "Services",
          "value": "1"
        },
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "Minutes": 30,
        "NameOf": "Employee",
        "SyncToken": "0",
        "TxnDate": "2026-09-30"
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### List QuickBooks vendors

List vendors (suppliers), optionally narrowed by name or when they last changed. Returns one page; use start_position to get the next.

**Inputs**

- Limit (`limit`, number): How many records to return, 1-1000. Defaults to 100. From 1 to 1000. Default: `100`.
- Start position (`start_position`, number): Which matching record to start from, counting from 1. For the next page, use the previous result's next_start_position. At least 1. Default: `1`.
- Name contains (`name_contains`, text): Only records whose name contains this text (not case-sensitive).
- Include inactive (`include_inactive`, true/false): Also return records that were made inactive. By default only active ones are listed. Default: `false`.
- Changed since (`updated_since`, date and time): Only records created or changed at or after this moment.

**Outputs**

- `QueryResponse` (object)
- `count` (number): How many records this page holds.
- `has_more` (true/false): True when the page came back full, so another may follow. It is also true when the last page happens to be exactly full; the next is then empty.
- `next_start_position` (number): The start_position for the next page, or null on the last page.
- `start_position` (number): The position of this page's first record, counting from 1.
- `time` (text)

**Example output**

```json
{
  "QueryResponse": {
    "Vendor": [
      {
        "Active": true,
        "Balance": 0,
        "CompanyName": "Bob's Burger Joint",
        "DisplayName": "Bob's Burger Joint",
        "Id": "56",
        "MetaData": {
          "CreateTime": "2026-09-30T10:15:00-07:00",
          "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
        },
        "PrimaryEmailAddr": {
          "Address": "orders@bobs.example"
        },
        "SyncToken": "0",
        "Vendor1099": false
      }
    ],
    "maxResults": 1,
    "startPosition": 1
  },
  "count": 1,
  "has_more": false,
  "next_start_position": null,
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Pay a QuickBooks bill

Record paying a bill, by check from a bank account or with a credit card. Without an amount, the bill's whole open balance is paid.

**Inputs**

- Bill ID (`bill_id`, text, required): The bill's Id, from 'Create a QuickBooks bill' or 'List QuickBooks bills'.
- Paid from (`payment_account_id`, text, required): The bank account (for a check) or credit card it was paid from.
- Paid by (`pay_type`, text): Check for a bank account, CreditCard for a card. Defaults to Check. One of: `Check`, `CreditCard` (Credit card). Default: `Check`.
- Amount (`amount`, number): How much was paid. Defaults to the bill's open balance. At least 0.
- Payment date (`payment_date`, date): When it was paid. Defaults to today.
- Check no. (`doc_number`, text): The check number.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `BillPayment` (object)
- `time` (text)

**Example output**

```json
{
  "BillPayment": {
    "CheckPayment": {
      "BankAccountRef": {
        "name": "Checking",
        "value": "35"
      }
    },
    "Id": "151",
    "Line": [
      {
        "Amount": 45.0,
        "LinkedTxn": [
          {
            "TxnId": "150",
            "TxnType": "Bill"
          }
        ]
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PayType": "Check",
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Run a QuickBooks query

Run a query in QuickBooks' own query language, e.g. SELECT * FROM Invoice WHERE Balance > '0' ORDERBY DueDate MAXRESULTS 50. The matching records come back under 'records' whatever their kind; a SELECT COUNT(*) comes back under 'count'.

**Inputs**

- Query (`query`, text, required): The query. Only SELECT is supported, and a page holds up to 1,000 records (STARTPOSITION and MAXRESULTS page through more).

**Outputs**

- `count` (number)
- `entity` (text): The type of record the query returned, e.g. Invoice.
- `max_results` (number)
- `records` (list)
- `start_position` (number)
- `time` (text)

**Example output**

```json
{
  "count": 1,
  "entity": "Invoice",
  "max_results": 1,
  "records": [
    {
      "Balance": 300.0,
      "BillEmail": {
        "Address": "ap@acme.example"
      },
      "CustomerRef": {
        "name": "Acme Corp",
        "value": "58"
      },
      "DocNumber": "1037",
      "DueDate": "2026-10-30",
      "EmailStatus": "NotSet",
      "Id": "130",
      "Line": [
        {
          "Amount": 300.0,
          "Description": "Garden design",
          "DetailType": "SalesItemLineDetail",
          "Id": "1",
          "LineNum": 1,
          "SalesItemLineDetail": {
            "ItemRef": {
              "name": "Services",
              "value": "1"
            },
            "Qty": 2,
            "UnitPrice": 150
          }
        }
      ],
      "MetaData": {
        "CreateTime": "2026-09-30T10:15:00-07:00",
        "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
      },
      "SyncToken": "0",
      "TotalAmt": 300.0,
      "TxnDate": "2026-09-30"
    }
  ],
  "start_position": 1,
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Run a QuickBooks report

Run any QuickBooks report by name, with its options as Intuit documents them, such as a trial balance, general ledger or sales by customer.

**Inputs**

- Report (`report_name`, text, required): The report to run. One of: `ProfitAndLoss` (Profit and loss), `ProfitAndLossDetail` (Profit and loss detail), `BalanceSheet` (Balance sheet), `CashFlow` (Cash flow), `TrialBalance` (Trial balance), `GeneralLedger` (General ledger), `AgedReceivables` (A/R aging summary), `AgedReceivableDetail` (A/R aging detail), `AgedPayables` (A/P aging summary), `AgedPayableDetail` (A/P aging detail), and 19 more.
- Options (`parameters`, object): The report's options as Intuit names them, e.g. {"start_date": "2026-01-01", "end_date": "2026-03-31", "accounting_method": "Cash"}. Each report's reference page lists the ones it takes.
- Include raw report (`include_raw`, true/false): Also return QuickBooks' original nested report under 'report'. Default: `false`.

**Outputs**

- `columns` (list)
- `currency` (text)
- `end_period` (text)
- `generated_at` (text)
- `no_data` (true/false)
- `report` (object): QuickBooks' original report, when include_raw is set.
- `report_basis` (text)
- `report_name` (text)
- `rows` (list)
- `start_period` (text)
- `summarize_columns_by` (text)
- `totals` (object): Each section's total by its group, e.g. NetIncome.

**Example output**

```json
{
  "columns": [
    "Account",
    "Total"
  ],
  "currency": "USD",
  "end_period": "2026-09-30",
  "generated_at": "2026-09-30T10:15:00-07:00",
  "no_data": false,
  "report_basis": "Accrual",
  "report_name": "ProfitAndLoss",
  "rows": [
    {
      "amount": null,
      "depth": 0,
      "group": "Income",
      "kind": "header",
      "label": "Income",
      "values": {
        "Total": null
      }
    },
    {
      "amount": 2250.0,
      "depth": 1,
      "id": "82",
      "kind": "data",
      "label": "Design income",
      "values": {
        "Total": 2250.0
      }
    },
    {
      "amount": 2250.0,
      "depth": 0,
      "group": "Income",
      "kind": "total",
      "label": "Total Income",
      "values": {
        "Total": 2250.0
      }
    },
    {
      "amount": 1650.0,
      "depth": 0,
      "group": "NetIncome",
      "kind": "total",
      "label": "Net Income",
      "values": {
        "Total": 1650.0
      }
    }
  ],
  "start_period": "2026-09-01",
  "summarize_columns_by": "Total",
  "totals": {
    "Income": 2250.0,
    "NetIncome": 1650.0
  }
}
```

### Send a QuickBooks credit memo

Email a credit memo to the customer from QuickBooks.

**Inputs**

- Credit memo ID (`credit_memo_id`, text, required): The credit memo's Id, from 'Create a QuickBooks credit memo' or 'List QuickBooks credit memos'.
- Send to (`email_to`, text): Send it to this address instead of the one on the form, which QuickBooks then updates to it.

**Outputs**

- `CreditMemo` (object)
- `time` (text)

**Example output**

```json
{
  "CreditMemo": {
    "Balance": 300.0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1040",
    "Id": "190",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "RemainingCredit": 300.0,
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Send a QuickBooks estimate

Email an estimate to the customer from QuickBooks.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.
- Send to (`email_to`, text): Send it to this address instead of the one on the form, which QuickBooks then updates to it.

**Outputs**

- `Estimate` (object)
- `time` (text)

**Example output**

```json
{
  "Estimate": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1038",
    "EmailStatus": "NotSet",
    "ExpirationDate": "2026-10-30",
    "Id": "170",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "TxnStatus": "Pending"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Send a QuickBooks invoice

Email an invoice to the customer from QuickBooks, with a link to pay it online when the company takes online payments.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.
- Send to (`email_to`, text): Send it to this address instead of the one on the form, which QuickBooks then updates to it.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Send a QuickBooks purchase order

Email a purchase order to the vendor from QuickBooks.

**Inputs**

- Purchase order ID (`purchase_order_id`, text, required): The purchase order's Id, from 'Create a QuickBooks purchase order' or 'List QuickBooks purchase orders'.
- Send to (`email_to`, text): Send it to this address instead of the one on the form, which QuickBooks then updates to it.

**Outputs**

- `PurchaseOrder` (object)
- `time` (text)

**Example output**

```json
{
  "PurchaseOrder": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "DocNumber": "1005",
    "EmailStatus": "NotSet",
    "Id": "210",
    "Line": [
      {
        "Amount": 90.0,
        "DetailType": "ItemBasedExpenseLineDetail",
        "Id": "1",
        "ItemBasedExpenseLineDetail": {
          "BillableStatus": "NotBillable",
          "ItemRef": {
            "name": "Pump",
            "value": "11"
          },
          "Qty": 3,
          "UnitPrice": 30
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "POEmail": {
      "Address": "orders@bobs.example"
    },
    "POStatus": "Open",
    "SyncToken": "0",
    "TotalAmt": 90.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Send a QuickBooks sales receipt

Email a sales receipt to the customer from QuickBooks.

**Inputs**

- Sales receipt ID (`sales_receipt_id`, text, required): The sales receipt's Id, from 'Create a QuickBooks sales receipt' or 'List QuickBooks sales receipts'.
- Send to (`email_to`, text): Send it to this address instead of the one on the form, which QuickBooks then updates to it.

**Outputs**

- `SalesReceipt` (object)
- `time` (text)

**Example output**

```json
{
  "SalesReceipt": {
    "Balance": 0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DepositToAccountRef": {
      "name": "Undeposited Funds",
      "value": "4"
    },
    "DocNumber": "1039",
    "Id": "180",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PaymentMethodRef": {
      "name": "Cash",
      "value": "1"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks bill

Change a bill's dates, number, terms, memo or lines. Only the fields you fill in change.

**Inputs**

- Bill ID (`bill_id`, text, required): The bill's Id, from 'Create a QuickBooks bill' or 'List QuickBooks bills'.
- Due date (`due_date`, date): When payment is due.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Bill no. (`doc_number`, text): The vendor's bill or invoice number.
- Terms (`terms_id`, text): Payment terms, such as Net 30, which set the due date when none is given.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Replace lines (advanced) (`line_items`, list): New lines, which replace all of the bill's current lines. Same format as 'Create a QuickBooks bill'.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Bill` (object)
- `time` (text)

**Example output**

```json
{
  "Bill": {
    "APAccountRef": {
      "name": "Accounts Payable (A/P)",
      "value": "33"
    },
    "Balance": 45.0,
    "DocNumber": "INV-8812",
    "DueDate": "2026-10-30",
    "Id": "150",
    "Line": [
      {
        "AccountBasedExpenseLineDetail": {
          "AccountRef": {
            "name": "Office Expenses",
            "value": "15"
          },
          "BillableStatus": "NotBillable"
        },
        "Amount": 45.0,
        "Description": "Printer paper",
        "DetailType": "AccountBasedExpenseLineDetail",
        "Id": "1"
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 45.0,
    "TxnDate": "2026-09-30",
    "VendorRef": {
      "name": "Bob's Burger Joint",
      "value": "56"
    }
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks customer

Change a customer's details. Only the fields you fill in change; the rest keep their values.

**Inputs**

- Customer (`customer_id`, text, required): The customer. Pick one, or use an Id from 'Create a QuickBooks customer' or 'List QuickBooks customers'.
- Display name (`display_name`, text): A new display name, unique across customers, vendors and employees.
- First name (`given_name`, text): First name.
- Last name (`family_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Main phone number.
- Company (`company_name`, text): Company name.
- Mobile (`mobile`, text): Mobile number.
- Website (`website`, text): Website address.
- Address line 1 (`address_line1`, text): Billing address, first line.
- Address line 2 (`address_line2`, text): Billing address, second line.
- City (`city`, text): City.
- State (`state`, text): State, province or region code, such as CA.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Notes (`notes`, text): Private notes about the customer. Replaces the current notes.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Customer` (object)
- `time` (text)

**Example output**

```json
{
  "Customer": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Acme Corp",
    "DisplayName": "Acme Corp",
    "FamilyName": "Doe",
    "GivenName": "Jane",
    "Id": "58",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "ap@acme.example"
    },
    "PrimaryPhone": {
      "FreeFormNumber": "(555) 555-0100"
    },
    "SyncToken": "0"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks estimate

Change an estimate, or mark it accepted, closed or rejected. Only the fields you fill in change.

**Inputs**

- Estimate ID (`estimate_id`, text, required): The estimate's Id, from 'Create a QuickBooks estimate' or 'List QuickBooks estimates'.
- Status (`status`, text): The estimate's status. One of: `Pending`, `Accepted`, `Closed`, `Rejected`.
- Expiration date (`expiration_date`, date): When the estimate expires.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Replace lines (advanced) (`line_items`, list): New lines, which replace all of the estimate's current lines. Same format as 'Create a QuickBooks estimate'.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Estimate` (object)
- `time` (text)

**Example output**

```json
{
  "Estimate": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1038",
    "EmailStatus": "NotSet",
    "ExpirationDate": "2026-10-30",
    "Id": "170",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "TxnStatus": "Pending"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks invoice

Change an invoice's dates, number, terms, messages or lines. Only the fields you fill in change.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.
- Due date (`due_date`, date): When payment is due.
- Date (`txn_date`, date): The transaction's date. Defaults to today.
- Number (`doc_number`, text): The document number. Leave blank to let QuickBooks number it, when the company numbers them automatically.
- Email to (`email_to`, text): The customer's email address for this document (its Bill Email).
- Terms (`terms_id`, text): Payment terms, such as Net 30, which set the due date when none is given.
- Message to customer (`memo`, text): A message to the customer, printed on the document.
- Internal memo (`private_note`, text): An internal memo. Customers and vendors never see it.
- Replace lines (advanced) (`line_items`, list): New lines, which replace all of the invoice's current lines. Same format as 'Create a QuickBooks invoice'.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks item

Change a product or service. Only the fields you fill in change. Set Active to No to retire the item, which is how QuickBooks removes one.

**Inputs**

- Product/service (`item_id`, text, required): The product or service. Pick one, or use an Id from 'List QuickBooks items'.
- Name (`name`, text): A new name, unique among items.
- Sales description (`description`, text): The description on sales forms.
- Sales price (`unit_price`, number): The sales price.
- Income account (`income_account_id`, text): The income account sales of it post to. Required for Service and Inventory items; an Inventory item's must have the Sales of Product Income detail type.
- Purchase description (`purchase_description`, text): The description on purchase forms.
- Cost (`purchase_cost`, number): What it costs to buy.
- Expense account (`expense_account_id`, text): The expense account purchases of it post to (Cost of Goods Sold for inventory). Required for Inventory items.
- SKU (`sku`, text): Its stock-keeping unit code.
- Taxable (`taxable`, true/false): Whether sales tax applies to it (US).
- Active (`active`, true/false): No makes the item inactive; Yes restores an inactive one.
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Item` (object)
- `time` (text)

**Example output**

```json
{
  "Item": {
    "Active": true,
    "FullyQualifiedName": "Services",
    "Id": "1",
    "IncomeAccountRef": {
      "name": "Services",
      "value": "1"
    },
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "Name": "Services",
    "SyncToken": "0",
    "Taxable": false,
    "Type": "Service",
    "UnitPrice": 150
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Update a QuickBooks vendor

Change a vendor's details. Only the fields you fill in change; the rest keep their values.

**Inputs**

- Vendor (`vendor_id`, text, required): The vendor. Pick one, or use an Id from 'Create a QuickBooks vendor' or 'List QuickBooks vendors'.
- Display name (`display_name`, text): A new display name, unique across customers, vendors and employees.
- First name (`given_name`, text): First name.
- Last name (`family_name`, text): Last name.
- Email (`email`, text): Email address.
- Phone (`phone`, text): Main phone number.
- Company (`company_name`, text): Company name.
- Mobile (`mobile`, text): Mobile number.
- Website (`website`, text): Website address.
- Address line 1 (`address_line1`, text): Billing address, first line.
- Address line 2 (`address_line2`, text): Billing address, second line.
- City (`city`, text): City.
- State (`state`, text): State, province or region code, such as CA.
- Postal code (`postal_code`, text): ZIP or postal code.
- Country (`country`, text): Country.
- Account number (`account_number`, text): Your account number with this vendor.
- Track for 1099 (`is_1099`, true/false): Whether the vendor gets a 1099 (US).
- Additional fields (advanced) (`additional_fields`, object): QuickBooks fields to send exactly as given, for anything the fields above don't cover, e.g. {"CurrencyRef": {"value": "EUR"}}. Names and shapes follow Intuit's API reference, and these win over the fields above.

**Outputs**

- `Vendor` (object)
- `time` (text)

**Example output**

```json
{
  "Vendor": {
    "Active": true,
    "Balance": 0,
    "CompanyName": "Bob's Burger Joint",
    "DisplayName": "Bob's Burger Joint",
    "Id": "56",
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PrimaryEmailAddr": {
      "Address": "orders@bobs.example"
    },
    "SyncToken": "0",
    "Vendor1099": false
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Void a QuickBooks invoice

Void an invoice: its amounts become zero and 'Voided' is added to its memo, but it stays on record, unlike deleting it.

**Inputs**

- Invoice ID (`invoice_id`, text, required): The invoice's Id, from 'Create a QuickBooks invoice' or 'List QuickBooks invoices'.

**Outputs**

- `Invoice` (object)
- `time` (text)

**Example output**

```json
{
  "Invoice": {
    "Balance": 300.0,
    "BillEmail": {
      "Address": "ap@acme.example"
    },
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DocNumber": "1037",
    "DueDate": "2026-10-30",
    "EmailStatus": "NotSet",
    "Id": "130",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Void a QuickBooks payment

Void a payment: its amount becomes zero and the invoices it paid are open again. A payment that was already deposited can't be voided until the deposit is deleted.

**Inputs**

- Payment ID (`payment_id`, text, required): The payment's Id, from 'Create a QuickBooks payment' or 'List QuickBooks payments'.

**Outputs**

- `Payment` (object)
- `time` (text)

**Example output**

```json
{
  "Payment": {
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "Id": "140",
    "Line": [
      {
        "Amount": 300.0,
        "LinkedTxn": [
          {
            "TxnId": "130",
            "TxnType": "Invoice"
          }
        ]
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30",
    "UnappliedAmt": 0
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```

### Void a QuickBooks sales receipt

Void a sales receipt: its amounts become zero and 'Voided' is added to its memo, but it stays on record.

**Inputs**

- Sales receipt ID (`sales_receipt_id`, text, required): The sales receipt's Id, from 'Create a QuickBooks sales receipt' or 'List QuickBooks sales receipts'.

**Outputs**

- `SalesReceipt` (object)
- `time` (text)

**Example output**

```json
{
  "SalesReceipt": {
    "Balance": 0,
    "CustomerRef": {
      "name": "Acme Corp",
      "value": "58"
    },
    "DepositToAccountRef": {
      "name": "Undeposited Funds",
      "value": "4"
    },
    "DocNumber": "1039",
    "Id": "180",
    "Line": [
      {
        "Amount": 300.0,
        "Description": "Garden design",
        "DetailType": "SalesItemLineDetail",
        "Id": "1",
        "LineNum": 1,
        "SalesItemLineDetail": {
          "ItemRef": {
            "name": "Services",
            "value": "1"
          },
          "Qty": 2,
          "UnitPrice": 150
        }
      }
    ],
    "MetaData": {
      "CreateTime": "2026-09-30T10:15:00-07:00",
      "LastUpdatedTime": "2026-09-30T10:15:00-07:00"
    },
    "PaymentMethodRef": {
      "name": "Cash",
      "value": "1"
    },
    "SyncToken": "0",
    "TotalAmt": 300.0,
    "TxnDate": "2026-09-30"
  },
  "time": "2026-09-30T10:15:00.000-07:00"
}
```
