Skip to main content
You’ve built against your sandbox app. Launching means pointing your production environment at your production app, where your customers’ connections live, and making sure your integration handles the things real company files do. Your code doesn’t change between the two. The API key, the webhook secret and the connection ids do.

Launch checklist

1

Configure production credentials

Put the production app’s API key and webhook secret into your production environment: an owner generates a key on the production app’s page and copies it when it’s shown, the only time it is. Your sandbox key can’t reach production connections, and the other way round, so a mix-up fails with an error.
2

Set up billing

In the dashboard, a production app without a subscription shows Set up billing to turn this app on, and no getting-started steps or New connection button until it has one. Add a payment method before your first customer connects: until your organization has billing, its production app can’t have connections of any type, simulated included. Creating one, from the API, the CLI or the dashboard, is refused with 402 and the code billing_required, and nothing is saved. Your sandbox app needs no billing.
3

Promote your workflows

Production connections only run published workflow versions. Publish in your sandbox app, then promote to production, and fix any company-file values the promotion warns about. Promotion publishes the version in production too: Publish there as well is ticked in the Promote to another app window. Untick it to land the chart as that app’s working copy for a final look, then publish it there when you’re happy.Workflows run only on realtime connections in production, so make sure your app creates its customers’ connections with "type": "realtime" (why).
4

Harden your webhook endpoint

Verify every signature, answer 2xx within 5 seconds and do the work in a job, and process each page_request_id and state once. A retryable webhook is followed by the answer with the same page_request_id. Deliveries can repeat or arrive out of order.
5

Handle every state

Show your customer error.user_message for error and retryable. Don’t resend a retryable request. Decide what a timed_out create means for you. Error handling has the full list.
6

Finish your onboarding flow

Set each connection’s webhook_url, and handle its events: connection.connected marks the account connected, connection.setup_cancelled offers the button again, and connection.stalled and connection.resumed tell your customer when their Web Connector has stopped and started again. Connect your customers.
7

Audit your code

Have your coding agent check your integration against every rule on the integration checklist, with the audit skill, and fix what it finds.
8

Test against real QuickBooks

Run your whole flow against a not-for-resale copy of QuickBooks on a real Web Connector, with a sample company file.

How billing works

A connection is active when its Web Connector has checked in during the past week. A customer who disconnects stops counting. See pricing for current rates. High volume or special requirements? Talk to us.

Operating it

Watch connections, not just requests

A connection whose last_connected_at is days old has a Web Connector that stopped, usually because the PC is off or QuickBooks moved. Its requests wait until it’s back, and its webhook_url is sent connection.stalled, then connection.resumed once it’s working again (Connection events).

Rotate secrets without downtime

Webhook deliveries are signed with every active secret on the app, so you can rotate by adding a new one before expiring the old. API keys work the same way: create the new key, deploy it, then expire the old one. Expiring a key takes effect immediately. Making, expiring and copying keys and secrets is for your organization’s owners.

Use the dashboard to investigate

Every request shows what was sent, what QuickBooks answered, and each webhook attempt, with a Resend webhook button. Every workflow run shows its path on the canvas.

Invite your team

Invite them from your organization’s members page. Alerts go to owners, so make sure more than one person is an owner.