> For the complete documentation index, see [llms.txt](https://docs.appmixer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.appmixer.com/connector-configuration/quickbooks.md).

# Quickbooks

First, you need to set a Quickbooks key and endpoint through the Backoffice in order to provide the Quickbooks components to your customers.

Go to the <https://developer.intuit.com/app/developer/dashboard> to create a new app.

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-774fcbd7b737de22c6dc1a6235f5529c5fbb3739%2Fquickbooks-1.png?alt=media" alt=""><figcaption></figcaption></figure>

Select the name and scope:

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-8fa1ad5d0555fc6c31bbafd67b896f24e9fa4574%2Fquickbooks-2.png?alt=media" alt=""><figcaption></figcaption></figure>

Then you receive your *clientID* and *clientSecret*.

Intuit issues two separate key pairs: **Development keys** work only with sandbox companies and **Production keys** work only with production companies. Configure the pair that matches the companies your users will connect.

Also add the redirect URL. Example: `https://api.YOUR_SUBDOMAIN.appmixer.cloud/auth/quickbooks/callback`.

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-17fd24f52879a2ce4ec6202ae1d7caa50df816c5%2Fquickbooks-3.png?alt=media" alt=""><figcaption></figcaption></figure>

Go the Appmixer BackOffice -> Configuration. Add new configuration: `appmixer:quickbooks` Add your *clientId* and *clientSecret* keys.

When you use the **Development (sandbox) keys**, also add `sandbox`: `true` to the same configuration — it switches the connector to the sandbox API base URL (`sandbox-quickbooks.api.intuit.com`) and the sandbox OpenID endpoint. With Production keys, omit the flag (production is the default).

## Webhooks

All trigger components (for example `NewInvoice`) use QuickBooks webhooks. In order to use this component(s) in Appmixer, you have to register Appmixer's QuickBooks URI in QuickBooks first and set the webhook key in the Appmixer BackOffice.

Go to <https://developer.intuit.com/app/developer/dashboard> then choose your Appmixer app. Navigate to the "Webhooks" section either for the sandbox or production environment and add a new webhook.

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-c37597ccfaa22b1bceb01cf119eea01f97bea336%2Fquickbooks-4.png?alt=media" alt=""><figcaption><p>QuickBooks Webhooks configuration</p></figcaption></figure>

Fill the field **Endpoint URL** with `https://api.acme.appmixer.cloud/plugins/appmixer/quickbooks/webhooks` (replace `acme` with your subdomain).

In **Subscribed events**, select the entities and operations the trigger components consume:

| Entity   | Operations     | Trigger components           |
| -------- | -------------- | ---------------------------- |
| Bill     | Create, Update | NewBill, UpdatedBill         |
| Customer | Create, Update | NewCustomer, UpdatedCustomer |
| Invoice  | Create, Update | NewInvoice, UpdatedInvoice   |

Leave the **Enable cloud event payload format** toggle **off** — the connector processes the classic webhook payload format.

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-7536fe9a0dc75a7b849a06dcc9362c62f9a332c4%2Fquickbooks-5.png?alt=media" alt=""><figcaption><p>QuickBooks Webhooks event triggers</p></figcaption></figure>

For detailed steps, see [QuickBooks documentation](https://developer.intuit.com/app/developer/qbo/docs/develop/webhooks#endpoints).

Make sure to copy the **Verifier Token** and paste it to the Appmixer BackOffice -> Configuration -> `appmixer:quickbooks` -> `webhookVerifierToken` field.

Intuit issues a **different verifier token for the Development (sandbox) and Production** webhook sections, even when both point at the same endpoint. The connector accepts multiple tokens: set the production token in `webhookVerifierToken` and the sandbox token in `webhookVerifierTokenSandbox` (or put several tokens comma-separated into `webhookVerifierToken`). Incoming events are verified against every configured token; delivery is routed by the company (`realmId`), so sandbox and production events never mix.

<figure><img src="https://802996127-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FIAGKHlIqVKJe9agnFr14%2Fuploads%2Fgit-blob-2fd2b655b94478b0cf9fa6049fccceee396eaea1%2Fquickbooks-6.png?alt=media" alt=""><figcaption><p>Appmixer BackOffice configuration for QuickBooks Webhooks</p></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.appmixer.com/connector-configuration/quickbooks.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
