QuickBooks Desktop REST API

Learn whether QuickBooks Desktop has a REST API and how to use Conductor's REST API with cURL, Postman, and OpenAPI.

If you are searching for a QuickBooks Desktop REST API, the first thing to know is:

QuickBooks Desktop does not have a native REST API in the modern SaaS sense.

The native stack is still built around the QuickBooks Desktop SDK, qbXML, and often QuickBooks Web Connector.

What developers usually want, though, is a JSON-over-HTTPS API they can call from normal tools such as:

  • cURL

  • Postman

  • backend services

  • coding agents

  • generated API clients from an OpenAPI spec

That is exactly the gap Conductor fills.

Quick answers

  • Does QuickBooks Desktop have a native REST API? No.

  • Does QuickBooks Enterprise have a separate REST API? No.

  • Can I work with QuickBooks Desktop over REST anyway? Yes, with Conductor.

  • Can I use Postman? Yes.

  • Is there an OpenAPI spec? Yes.

What people usually mean by "QuickBooks Desktop REST API"

Most developers searching for this term are trying to avoid the native Desktop stack:

  • qbXML

  • SOAP callbacks

  • Web Connector orchestration

  • Windows-only integration mechanics

They want a normal developer experience:

  • JSON requests and responses

  • bearer auth

  • OpenAPI

  • Postman support

  • easy testing from Linux, macOS, CI, or cloud services

That is a reasonable expectation in 2026. It just is not what the native QuickBooks Desktop stack gives you.

What Conductor provides instead

Conductor exposes a modern REST API for QuickBooks Desktop and QuickBooks Enterprise on top of the real Desktop connection.

That means you can work with:

  • GET and POST requests

  • JSON request bodies

  • bearer authentication

  • OpenAPI

  • SDKs for Node.js and Python

while Conductor handles the legacy QuickBooks Desktop transport underneath.

The core REST pattern

The REST pattern is simple:

  1. authenticate with your secret key

  2. send the Conductor-End-User-Id header for the company-file connection

  3. call the QuickBooks Desktop endpoint you need

  4. receive JSON back

That is much closer to how modern API teams want to work.

Example: list invoices with cURL

curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/invoices?limit=10" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."
curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/invoices?limit=10" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."
curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/invoices?limit=10" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."

That is the kind of request developers usually expect when they search for a REST API.

Example: check connection health with cURL

curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/health-check" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."
curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/health-check" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."
curl --request GET \
  --url "https://api.conductor.is/v1/quickbooks-desktop/health-check" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Conductor-End-User-Id: end_usr_..."

This is especially useful because QuickBooks Desktop connectivity is not the same as a normal cloud integration. A real health check is much more valuable than assuming the connection is ready.

Example: fetch native reports over REST

QuickBooks Desktop reports are available through Conductor's passthrough endpoint.

curl --request POST \
  --url "https://api.conductor.is/v1/end-users/end_usr_.../passthrough/quickbooks_desktop" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Content-Type: application/json" \
  --data '{
    "GeneralSummaryReportQueryRq": {
      "GeneralSummaryReportType": "TrialBalance"
    }
  }'
curl --request POST \
  --url "https://api.conductor.is/v1/end-users/end_usr_.../passthrough/quickbooks_desktop" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Content-Type: application/json" \
  --data '{
    "GeneralSummaryReportQueryRq": {
      "GeneralSummaryReportType": "TrialBalance"
    }
  }'
curl --request POST \
  --url "https://api.conductor.is/v1/end-users/end_usr_.../passthrough/quickbooks_desktop" \
  --header "Authorization: Bearer sk_conductor_..." \
  --header "Content-Type: application/json" \
  --data '{
    "GeneralSummaryReportQueryRq": {
      "GeneralSummaryReportType": "TrialBalance"
    }
  }'

That gives you REST access even for the parts of the QuickBooks Desktop surface that still map back to native report structures.

Using Postman

If you want to explore the API interactively, Postman is a good fit.

The simplest approach is:

  1. import the Conductor OpenAPI spec into Postman

  2. set your Authorization bearer token

  3. set the Conductor-End-User-Id header for your connected company file

  4. call the endpoints you want to test

This is usually much faster than trying to prototype against the native QuickBooks Desktop stack directly.

Relevant docs:

Direct OpenAPI spec download:

Why OpenAPI matters here

OpenAPI is especially useful for QuickBooks Desktop integrations because it lets you:

  • generate clients

  • inspect request shapes

  • test with Postman

  • validate requests and responses

  • give coding agents a machine-readable API surface

That last point matters more now than it used to. Developers increasingly ask coding agents to build integrations, and an OpenAPI spec is one of the easiest ways to make that workflow reliable.

Why this is better than the native Desktop stack

If you build directly on native QuickBooks Desktop mechanics, you usually inherit:

  • Web Connector polling

  • qbXML request and response handling

  • SOAP lifecycle methods

  • Windows-machine setup and support

  • vague Desktop-side errors

With Conductor's REST API, your app can stay focused on:

  • the business workflow

  • the downstream schema

  • sync logic

  • reporting or CRM integrations

instead of legacy Desktop plumbing.

Common mistakes

Avoid these mistakes:

  • assuming the native QuickBooks Desktop SDK is already a REST API

  • assuming Enterprise has a separate REST API

  • testing only the request shape without validating connection health

  • forgetting the Conductor-End-User-Id header when calling the API

Frequently asked questions

Does QuickBooks Desktop have a native REST API?

No. The native stack is still built around the Desktop SDK, qbXML, and Web Connector.

Does QuickBooks Enterprise have a different REST API?

No. Enterprise is still part of the broader QuickBooks Desktop integration model.

Can I use Postman with Conductor's QuickBooks Desktop API?

Yes. Import the OpenAPI spec and configure your bearer token plus Conductor-End-User-Id.

Is there an OpenAPI spec I can use with a coding agent or code generator?

Yes. Conductor publishes a full OpenAPI specification, which is exactly the kind of machine-readable API surface that works well for generated clients, testing, and agent-assisted development.

Bottom line

If you are searching for a QuickBooks Desktop REST API, the honest answer is:

  • no native modern REST API from QuickBooks Desktop itself

  • yes, a modern REST API through Conductor

That is the practical path for developers, API teams, Postman users, and coding agents who want to work with QuickBooks Desktop and QuickBooks Enterprise like a normal modern integration.

Related reading