Portfolio Supported AIs Solutions Tasks Email Archive Bring Your Own Code Integrations Pricing

Get Started

ChatGPT

ChatGPT

Start directly →

Ready
Claude

Claude

Directory Connector →

Ready
Mistral

Mistral

Directory Connector →

Ready

Dashboard Always available

Accounting Sync

⚡ Built-in — Accounting

Sync your contacts and invoices to your accounting package, without duplicates: the same call twice changes nothing, a changed invoice is updated, an invoice that already exists there is linked instead of created again. Payment status (paid, partial, open) comes back with sync-payments, optionally written to your own records and on a schedule. Amounts in cents. QuickBooks Online first. Paid plans.

⚡ Built-in — No Setup Required This integration is built into the WebsitePublisher platform. All endpoints are available immediately — no API key needed.

Endpoints (11)

GET get-config

The project settings: provider, default_item, default_tax, tax_map, tax_mode, the company facts from the last status call, write_back, the payment sync state (payments: cursor, last_run_at, last_changed, schedule) and the canonical tax keys.

No input parameters required.

POST configure

Set the provider and defaults; only the keys you send change. tax_map maps canonical tax keys to provider tax codes (QuickBooks: query "select * from TaxCode" on the quickbooks integration lists them), e.g. {"standard": "3", "zero": "10"}; a key with null or "" is removed. default_item is the provider item used for lines without item (QuickBooks needs one; "select * from Item" lists them). write_back sends payment changes found by sync-payments to your own MAPI records. Paid plans.

Field Type Required Description
provider string No "quickbooks".
default_item string|integer No Provider item id for lines without item, e.g. "1".
default_tax string No Canonical tax key or provider tax code for lines without tax.
tax_map array No {"standard": "3", "reduced": "8", "zero": "10", "exempt": "2", "reverse_charge": "..."}
tax_mode string No exclusive (prices without tax, default of the provider), inclusive or none.
write_back array No null or {"mode": "none"}, or {"mode": "mapi", "entity": "invoices", "match_field": "the field of that entity that holds the invoice local_ref (default id)", "status_field": "payment_status", "status_values": {"paid": "Paid", "partial": "Part paid", "open": "Unpaid"} (optional), "balance_field": "balance_cents" (optional), "paid_at_field": "paid_at" (optional)}.
POST connect

Start connecting the accounting package. Needs the provider app keys in the vault first (QuickBooks: quickbooks_client_id, quickbooks_client_secret). Returns authorize_url for the user; afterwards call status. Paid plans.

Field Type Required Description
provider string No "quickbooks" (default).
return_url string No Page to return to after connecting (must be on your own site).
GET status

Whether the accounting package is connected, the company (name, country, home currency, multi-currency, custom invoice numbers), link counts per object and status, and warnings with what to do.

No input parameters required.

POST upsert-contact

Create or update one contact (customer) by your own local_ref. Returns action created | updated | adopted | unchanged, remote_id and warnings. An existing customer with the same name (or the only one with the same e-mail) is linked instead of duplicated. Paid plans.

Field Type Required Description
local_ref string|integer ✓ Yes Your own id of this contact: 1-64 characters, letters, digits and . _ : -
name string ✓ Yes Display name; unique in QuickBooks.
company string No
email string No
phone string No
tax_number string No Stored for providers that take it; QuickBooks does not get it yet.
currency string No 3-letter code; only with multi-currency on, and only when the contact is created.
billing_address array No {"line1", "line2", "city", "postal_code", "region", "country"}; line1 is required in it.
notes string No
POST upsert-invoice

Create or update one invoice by your own local_ref. The same call twice changes nothing (unchanged); a changed invoice is updated; an invoice with the same number that already exists is linked (adopted), never duplicated. Amounts are cents. Send contact_ref of a synced contact, or the contact itself in contact. Returns action, remote_id, remote_number, total_minor, balance_minor, payment_status and warnings. Paid plans.

Field Type Required Description
local_ref string|integer ✓ Yes Your own id of this invoice (e.g. the job or order id).
number string No The invoice number shown to the customer (QuickBooks: at most 21 characters, Custom transaction numbers on).
contact_ref string|integer No local_ref of a contact synced with upsert-contact.
contact array No The contact itself (fields of upsert-contact); it is upserted first.
issue_date string No YYYY-MM-DD
due_date string No YYYY-MM-DD
currency string No Must be the company currency unless multi-currency is on; cannot change after creation.
tax_mode string No exclusive, inclusive or none; default from configure.
lines array ✓ Yes List (1-100) of {"description", "quantity" (default 1), "unit_price_minor" (cents), "tax" (canonical key or provider code), "item" (provider item id), "service_date"}.
memo string No Message shown on the invoice.
notes string No Internal note, not shown to the customer.
expected_total_minor integer No Your total incl. tax in cents; a different provider total gives a warning.
GET get-invoice

One synced invoice: its link (remote id, status, last error) and its live state at the provider (total, balance, paid, partial or open).

Field Type Required Description
local_ref string|integer ✓ Yes
POST sync-payments

Read the payment changes at the accounting package since the last run and update the synced invoices: payment_status (paid, partial, open), balance_minor and paid_at. With configure.write_back each change of payment status is also written to your own record. Safe to repeat. The first run looks back 30 days, or from since. Returns checked, linked, changed (local_ref, payment_status, previous_status, balance_minor), cursor and more (true: call again to continue). Use set-schedule to run it automatically. Paid plans.

Field Type Required Description
since string No Read changes from this date (YYYY-MM-DD) or ISO time instead of the stored cursor, e.g. for a first backfill.
POST set-schedule

Run sync-payments automatically. schedule is a cron expression, at most every 15 minutes (e.g. "*/15 * * * *" or "0 * * * *"); null or "" removes the schedule. Paid plans.

Field Type Required Description
schedule string No Cron expression, or null / "" to stop.
timezone string No Time zone of the schedule, e.g. Europe/London (default UTC).

MCP Tool Names

When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:

EndpointMCP Tool Name
get-config accounting-sync_get_config
configure accounting-sync_configure
connect accounting-sync_connect
status accounting-sync_status
upsert-contact accounting-sync_upsert_contact
upsert-invoice accounting-sync_upsert_invoice
get-invoice accounting-sync_get_invoice
list-links accounting-sync_list_links
sync-payments accounting-sync_sync_payments
set-schedule accounting-sync_set_schedule
unlink accounting-sync_unlink
← Back to all integrations