Files
openclaw-workspace/skills/api-gateway/references/quickbooks.md
2026-04-11 09:45:12 -05:00

384 lines
11 KiB
Markdown

# QuickBooks Routing Reference
**App name:** `quickbooks`
**Base URL proxied:** `quickbooks.api.intuit.com`
## Special Handling
Use `:realmId` in the path and it will be automatically replaced with the connected company's realm ID.
## API Path Pattern
```
/quickbooks/v3/company/:realmId/{endpoint}
```
## Common Endpoints
### Company Info
#### Get Company Info
```bash
GET /quickbooks/v3/company/:realmId/companyinfo/:realmId
```
#### Get Preferences
```bash
GET /quickbooks/v3/company/:realmId/preferences
```
### Customers
#### Query Customers
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Customer%20MAXRESULTS%20100
```
With filter:
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Customer%20WHERE%20Active%3Dtrue
```
#### Get Customer
```bash
GET /quickbooks/v3/company/:realmId/customer/{customerId}
```
#### Create Customer
```bash
POST /quickbooks/v3/company/:realmId/customer
Content-Type: application/json
{
"DisplayName": "John Doe",
"PrimaryEmailAddr": {"Address": "john@example.com"},
"PrimaryPhone": {"FreeFormNumber": "555-1234"}
}
```
#### Update Customer
Requires `Id` and `SyncToken` from previous GET:
```bash
POST /quickbooks/v3/company/:realmId/customer
Content-Type: application/json
{
"Id": "123",
"SyncToken": "0",
"DisplayName": "John Doe Updated",
"PrimaryPhone": {"FreeFormNumber": "555-9999"}
}
```
#### Deactivate Customer (Soft Delete)
```bash
POST /quickbooks/v3/company/:realmId/customer
Content-Type: application/json
{
"Id": "123",
"SyncToken": "1",
"DisplayName": "John Doe",
"Active": false
}
```
### Vendors
#### Query Vendors
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Vendor%20MAXRESULTS%20100
```
#### Get Vendor
```bash
GET /quickbooks/v3/company/:realmId/vendor/{vendorId}
```
#### Create Vendor
```bash
POST /quickbooks/v3/company/:realmId/vendor
Content-Type: application/json
{
"DisplayName": "Acme Supplies",
"PrimaryEmailAddr": {"Address": "vendor@example.com"}
}
```
### Items (Products/Services)
#### Query Items
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Item%20MAXRESULTS%20100
```
#### Get Item
```bash
GET /quickbooks/v3/company/:realmId/item/{itemId}
```
#### Create Item
```bash
POST /quickbooks/v3/company/:realmId/item
Content-Type: application/json
{
"Name": "Consulting Services",
"Type": "Service",
"IncomeAccountRef": {"value": "1"}
}
```
### Invoices
#### Query Invoices
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Invoice%20MAXRESULTS%20100
```
#### Get Invoice
```bash
GET /quickbooks/v3/company/:realmId/invoice/{invoiceId}
```
#### Create Invoice
```bash
POST /quickbooks/v3/company/:realmId/invoice
Content-Type: application/json
{
"CustomerRef": {"value": "123"},
"Line": [
{
"Amount": 100.00,
"DetailType": "SalesItemLineDetail",
"SalesItemLineDetail": {
"ItemRef": {"value": "1"},
"Qty": 1
}
}
]
}
```
#### Void Invoice
```bash
POST /quickbooks/v3/company/:realmId/invoice?operation=void
Content-Type: application/json
{
"Id": "123",
"SyncToken": "0"
}
```
#### Delete Invoice
```bash
POST /quickbooks/v3/company/:realmId/invoice?operation=delete
Content-Type: application/json
{
"Id": "123",
"SyncToken": "0"
}
```
### Payments
#### Query Payments
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Payment%20MAXRESULTS%20100
```
#### Create Payment
Simple payment:
```bash
POST /quickbooks/v3/company/:realmId/payment
Content-Type: application/json
{
"CustomerRef": {"value": "123"},
"TotalAmt": 100.00
}
```
Payment linked to invoice:
```bash
POST /quickbooks/v3/company/:realmId/payment
Content-Type: application/json
{
"CustomerRef": {"value": "123"},
"TotalAmt": 100.00,
"Line": [
{
"Amount": 100.00,
"LinkedTxn": [{"TxnId": "456", "TxnType": "Invoice"}]
}
]
}
```
### Bills
#### Query Bills
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Bill%20MAXRESULTS%20100
```
#### Create Bill
```bash
POST /quickbooks/v3/company/:realmId/bill
Content-Type: application/json
{
"VendorRef": {"value": "123"},
"Line": [
{
"DetailType": "AccountBasedExpenseLineDetail",
"Amount": 250.00,
"AccountBasedExpenseLineDetail": {
"AccountRef": {"value": "1"}
}
}
]
}
```
### Bill Payments
#### Create Bill Payment
```bash
POST /quickbooks/v3/company/:realmId/billpayment
Content-Type: application/json
{
"VendorRef": {"value": "123"},
"TotalAmt": 250.00,
"PayType": "Check",
"CheckPayment": {
"BankAccountRef": {"value": "23"}
},
"Line": [
{
"Amount": 250.00,
"LinkedTxn": [{"TxnId": "456", "TxnType": "Bill"}]
}
]
}
```
**Note:** Use a Bank account (AccountType: "Bank") for `BankAccountRef`.
### Accounts
#### Query Accounts
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Account
```
Filter by type:
```bash
GET /quickbooks/v3/company/:realmId/query?query=SELECT%20*%20FROM%20Account%20WHERE%20AccountType%20%3D%20%27Bank%27
```
### Reports
#### Profit and Loss
```bash
GET /quickbooks/v3/company/:realmId/reports/ProfitAndLoss?start_date=2024-01-01&end_date=2024-12-31
```
#### Balance Sheet
```bash
GET /quickbooks/v3/company/:realmId/reports/BalanceSheet?date=2024-12-31
```
### Batch Operations
Execute multiple queries in a single request:
```bash
POST /quickbooks/v3/company/:realmId/batch
Content-Type: application/json
{
"BatchItemRequest": [
{"bId": "1", "Query": "SELECT * FROM Customer MAXRESULTS 2"},
{"bId": "2", "Query": "SELECT * FROM Vendor MAXRESULTS 2"}
]
}
```
## Query Language
QuickBooks uses a SQL-like query language:
```sql
SELECT * FROM Customer WHERE DisplayName LIKE 'John%' MAXRESULTS 100
```
Operators: `=`, `LIKE`, `<`, `>`, `<=`, `>=`, `IN`
## SyncToken for Updates
All update operations require the current `SyncToken` from the entity. The SyncToken is incremented after each successful update.
1. GET the entity to retrieve current `SyncToken`
2. Include `Id` and `SyncToken` in the POST body
3. If the SyncToken doesn't match, the update fails (optimistic locking)
## Void vs Delete
- **Void**: Sets transaction amount to 0, adds "Voided" note, keeps record. Use for audit trail.
- **Delete**: Permanently removes the transaction. Use `?operation=delete` query parameter.
Both require `Id` and `SyncToken` in the request body.
## Notes
- `:realmId` is automatically replaced by the router
- All queries must be URL-encoded
- Use `MAXRESULTS` to limit query results (default varies by entity)
- Include `SyncToken` when updating entities (for optimistic locking)
- Dates are in `YYYY-MM-DD` format
- Soft delete entities (Customer, Vendor, Item) by setting `Active: false`
- Transactions (Invoice, Payment, Bill) can be voided or deleted
## Resources
- [API Overview](https://developer.intuit.com/app/developer/qbo/docs/get-started)
- [Query Customers](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#query-a-customer)
- [Get Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#read-a-customer)
- [Create Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#create-a-customer)
- [Update Customer](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/customer#full-update-a-customer)
- [Query Invoices](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#query-an-invoice)
- [Get Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#read-an-invoice)
- [Create Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#create-an-invoice)
- [Update Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#full-update-an-invoice)
- [Delete Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#delete-an-invoice)
- [Send Invoice](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/invoice#send-an-invoice)
- [Query Items](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#query-an-item)
- [Get Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#read-an-item)
- [Create Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#create-an-item)
- [Update Item](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/item#full-update-an-item)
- [Query Accounts](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#query-an-account)
- [Get Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#read-an-account)
- [Create Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#create-an-account)
- [Update Account](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/account#full-update-an-account)
- [Query Payments](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#query-a-payment)
- [Get Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#read-a-payment)
- [Create Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#create-a-payment)
- [Update Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#full-update-a-payment)
- [Delete Payment](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/payment#delete-a-payment)
- [Query Vendors](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#query-a-vendor)
- [Get Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#read-a-vendor)
- [Create Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#create-a-vendor)
- [Update Vendor](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/vendor#full-update-a-vendor)
- [Query Bills](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#query-a-bill)
- [Get Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#read-a-bill)
- [Create Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#create-a-bill)
- [Update Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#full-update-a-bill)
- [Delete Bill](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/all-entities/bill#delete-a-bill)
- [Profit and Loss Report](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/report-entities/profitandloss)
- [Balance Sheet Report](https://developer.intuit.com/app/developer/qbo/docs/api/accounting/report-entities/balancesheet)
- [Query Reference](https://developer.intuit.com/app/developer/qbdesktop/docs/develop/exploring-the-quickbooks-desktop-sdk/query-requests-and-responses)