This article lists every QuickBooks Online and Intuit endpoint the iPaaS.com QuickBooks Online integration calls. It is a reference for what the integration accesses in your QuickBooks company; you do not call these yourself.
Areas covered: Base URL · Customers · Items · Item Inventory · Sales Receipts and Invoices · Payments · Payment Methods · Company Preferences · Reference Lookups · Pagination · Rate Limits · Connection Validation · Authorization
Base URL
The integration uses the QuickBooks Online Accounting API (v3), a REST API that answers in JSON (Intuit: Query operations and syntax, checked October 2026).
[Base URL] = https://{API Url}/v3/company/{Company ID}{API Url}is the API Url setting on the iPaaS.com subscription:quickbooks.api.intuit.com(the default) for every subscriber's company.sandbox-quickbooks.api.intuit.comis for iPaaS.com's own testing.{Company ID}is the Company ID setting. Fill it, because iPaaS.com does not pass the company id to the integration when you authorize.Example:
https://quickbooks.api.intuit.com/v3/company/1234567890123456/customer/1
Every call adds minorversion={Minor Version} to its query string (the Minor Version setting, 75 by default). Intuit answers a request with no minor version, or one below 75, with minor version 75 (Intuit: Minor versions of our API, checked October 2026).
Every create of a customer, item, payment method, payment, sales receipt or invoice also adds Intuit's requestid parameter. A retried transfer sends the same requestid, so QuickBooks returns its first result instead of creating the record again (Intuit: What is RequestId and its usage, checked October 2026). A sales receipt or invoice with neither a document number nor an IpaasTransactionId is sent without one.
The integration never emails a customer, and does not delete or void records, so it calls no send, delete or void endpoint.
Customer Endpoints
Read a Customer (GET)
Reads one customer, with its billing and shipping addresses: every customer TO iPaaS.com, and a customer before it is updated FROM iPaaS.com.
[Base URL]/customer/{id}
Create or Update a Customer (POST)
Creates a customer, or updates one with a sparse update that carries only the mapped fields.
[Base URL]/customer
Match a Customer by Email (GET)
Before a create (FROM iPaaS.com, and for a transaction's customer). Two or more matches fail with QBOL-BIZL-1002.
[Base URL]/query?query=select * from Customer where PrimaryEmailAddr = '{email}' and Active in (true, false) maxresults 3
Match a Customer by Display Name (GET)
Before a create, only when there is no email.
[Base URL]/query?query=select * from Customer where DisplayName = '{name}' and Active in (true, false) maxresults 1
Poll Changed Customers (GET)
The customer/poll scope.
[Base URL]/query?query=select * from Customer where MetaData.LastUpdatedTime > '{last poll}' and Active in (true, false) orderby MetaData.LastUpdatedTime startposition {n} maxresults {Customer Page Size}
Item Endpoints
Read an Item (GET)
Reads one item. Inventory items include their quantity on hand.
[Base URL]/item/{id}
Create or Update an Item (POST)
Creates an item (also for transaction lines and the shipping item, when Create Missing Items is on), or updates one with a sparse update.
[Base URL]/item
Match an Item by SKU (GET)
[Base URL]/query?query=select * from Item where Sku = '{sku}' and Active in (true, false) maxresults 2
Match an Item by Name (GET)
[Base URL]/query?query=select * from Item where Name = '{name}' and Active in (true, false) maxresults 1
Poll Changed Items (GET)
The item/poll scope. Only Inventory, NonInventory and Service items are matched or sent TO iPaaS.com; Category and Group (bundle) items are left out.
[Base URL]/query?query=select * from Item where MetaData.LastUpdatedTime > '{last poll}' and Active in (true, false) orderby MetaData.LastUpdatedTime startposition {n} maxresults {Item Page Size}
Item Inventory Endpoints
QuickBooks keeps the quantity on hand on the item itself, so quantities TO iPaaS.com are read from items.
Read an Item's Quantity (GET)
For inventory/updated, and for each item an inventory poll finds.
[Base URL]/item/{id}
Poll Changed Inventory Items (GET)
The inventory/poll scope.
[Base URL]/query?query=select * from Item where MetaData.LastUpdatedTime > '{last poll}' and Type = 'Inventory' orderby MetaData.LastUpdatedTime startposition {n} maxresults {Item Page Size}
Sales Receipt and Invoice Endpoints
Read a Sales Receipt or Invoice (GET)
Reads a transaction before it is updated. An invoice is also read for each invoice TO iPaaS.com, and when a paid order is recorded on the invoice it was first posted as.
[Base URL]/salesreceipt/{id}
[Base URL]/invoice/{id}
Create or Update a Sales Receipt or Invoice (POST)
Creates the transaction, or updates it with a sparse update. The body carries the customer, lines, addresses, tax total, and any shipping and discount lines.
[Base URL]/salesreceipt [Base URL]/invoice
Match a Transaction by Document Number (GET)
Before a create; for a paid order, also an invoice with its number. A match is handled by the collection's Collision Handling Method, unless it is the order's own invoice.
[Base URL]/query?query=select * from {SalesReceipt or Invoice} where DocNumber = '{number}' maxresults 1
Poll Changed Invoices (GET)
The invoice/poll scope.
[Base URL]/query?query=select * from Invoice where MetaData.LastUpdatedTime > '{last poll}' orderby MetaData.LastUpdatedTime startposition {n} maxresults {Invoice Page Size}
Payment Endpoints
Read a Payment (GET)
Reads each payment linked to an invoice: TO iPaaS.com, and before payments are sent FROM iPaaS.com, so that one already recorded is skipped. TO iPaaS.com, a payment that reached iPaaS.com but is no longer applied to the invoice is also read, to tell whether it was voided or deleted.
[Base URL]/payment/{id}
Record a Payment (POST)
Records a payment FROM iPaaS.com, applied to its invoice.
[Base URL]/payment
Payment Method Endpoints
Read a Payment Method (GET)
Reads one payment method: for each payment method sent TO iPaaS.com, and to name the method of each payment on an invoice TO iPaaS.com.
[Base URL]/paymentmethod/{id}
Create or Update a Payment Method (POST)
[Base URL]/paymentmethod
Match a Payment Method by Name (GET)
Before a create.
[Base URL]/query?query=select * from PaymentMethod where Name = '{name}' and Active in (true, false)
Poll Changed Payment Methods (GET)
The paymentmethod/poll scope.
[Base URL]/query?query=select * from PaymentMethod where MetaData.LastUpdatedTime > '{last poll}' and Active in (true, false) orderby MetaData.LastUpdatedTime startposition {n} maxresults {Payment Method Page Size}
Company Preferences Endpoints
Read Company Preferences (GET)
Read when a transaction sent FROM iPaaS.com needs one of these preferences:
Shipping on sales forms: chooses QuickBooks' shipping field or the Shipping Item for the shipping amount.
Automated sales tax: tells automated sales tax from manual sales tax.
Sales form custom fields: finds the custom fields by name.
[Base URL]/preferences
Reference Lookup Endpoints
Look Up a Record by Name (GET)
Settings, mappings and translations can name a QuickBooks record instead of giving its id. A value made only of digits is used as the id, with no call; otherwise the name is looked up:
[Base URL]/query?query=select Id from {Entity} where Name = '{name}'Entity | Looked up for |
Account | Income Account, Expense Account, Inventory Asset Account, Deposit Account, and mapped accounts. A name that is not found is tried again as the full name ( |
Term | A customer's or invoice's terms |
PaymentMethod | A sales receipt's or payment's method |
TaxCode | Sales Tax Code, or the transaction's Tax Code |
Class | A transaction's or line's class, by its full name |
Department | A transaction's location, by its full name |
Pagination
Polls page through results with the query language's startposition and maxresults. Positions start at 1, a page holds at most 1,000 records, and a query that sets no size returns 100 (Intuit: Query operations and syntax, checked October 2026).
The page size is the matching page-size setting: 100 by default, at most 1,000.
Records are read oldest change first, until a short or empty page.
After a poll, its starting point moves to the newest change it read, so the next poll picks up anything left.
Matches by email, SKU, name or document number read a single page of one to three records.
Rate Limits
QuickBooks allows 500 requests a minute for each QuickBooks company, and 10 requests a second for each company and app (Intuit: API call limits and throttles, checked October 2026).
A request over a limit is answered with 429 and fails the transfer with QBOL-EXTN-1013; iPaaS.com retries it after a minute.
QuickBooks also applies an overall monthly allowance for data reads (polls, reads, lookups and queries) that iPaaS.com manages for its Intuit app; a read refused under it also returns a 429. If rate-limit errors continue for hours, contact your Managed Integration Service Provider (MiSP), or iPaaS.com Support at support@ipaas.com (see QuickBooks Online Known Limitations).
A 5xx answer from QuickBooks raises QBOL-EXTN-1003; a network failure raises QBOL-EXTN-1002. For every other code, see QuickBooks Online Error Messages.
Connection Validation
Read Company Info (GET)
The integration's connection check: one small read, which returns the company's name. It is not repeated on every transfer.
[Base URL]/companyinfo/{Company ID}
Authorization Endpoints
The integration signs in with OAuth 2.0 through iPaaS.com's own Intuit app. The app's keys are held by iPaaS.com on the integration, never on the subscription.
Consent Page (GET, in the browser)
Opened in your browser when you click Authenticate. You sign in to Intuit and choose the company; Intuit then returns to iPaaS.com with a code. iPaaS.com passes the code to the integration, but not the company id, so fill the Company ID setting.
https://appcenter.intuit.com/connect/oauth2?client_id={iPaaS.com's Intuit app}&response_type=code&scope=com.intuit.quickbooks.accounting&redirect_uri={iPaaS.com redirect URL}&state={iPaaS.com state}
Token Endpoint (POST)
Exchanges the consent's code for tokens once, when you authorize, and later exchanges the refresh token for a new access token: when the access token has lapsed (it lasts an hour), or when QuickBooks answers a call with 401. Refresh tokens are valid for 100 days (Intuit: Authorization FAQ, checked October 2026).
https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer
The integration takes this address from Intuit's published discovery document (Intuit: Authorization discovery documents, checked October 2026):
https://developer.api.intuit.com/.well-known/openid_configuration https://developer.api.intuit.com/.well-known/openid_sandbox_configuration
The second is used only with the sandbox API Url. Every QuickBooks call carries the current access token. See the QuickBooks Online Installation Instructions for how to authorize.
