Accounting and Shipping Partners

Post orders, purchase orders and returns to QuickBooks Online or Xero when you choose, and buy EasyPost or ShipStation labels with delivery tracking.

Accounting and Shipping Partners

Two kinds of partner connect to Products & inventory. An accounting partner — QuickBooks Online or Xero — receives a sales order as an invoice, a purchase order as a bill and a received return as a credit note, at the moment you choose. A shipping partner — EasyPost or ShipStation — rates and buys a label from an order's Ship form, puts its tracking on the shipment, and marks the shipment delivered when the carrier delivers it. Nothing is sent anywhere until you switch it on for a connection.

What you'll need

Connect QuickBooks Online or Xero

Inventory → Setup → Accounting & shipping (/inventory/integrations).

  1. In the Accounting section, click + QuickBooks Online or + Xero.
  2. Give the connection a Name (it defaults to the provider's name).
  3. QuickBooks only: tick Sandbox company to post to a company in your Intuit developer sandbox instead of a live one.
  4. Click Continue to QuickBooks Online (or Continue to Xero).
  5. Sign in, and choose the company (QuickBooks) or organisation (Xero) to post to. Xero's Demo Company works for a trial run.

You come back to the connection's panel with a Connected message. Its row on the page reads invoices off · bills off: every push starts off, by design.

If the form says the deployment has no app configured, fill in Client ID (your own app) and Client secret (your own app) from your own Intuit or Xero developer app. Your app's callback address is https://<your Karmaflow.ai address>/internal/inventory/partners/oauth/callback.

Choose what is posted, and when

Open the connection from its row. The section What is posted, and when holds the switches; nothing posts until one is set.

Setting Choices Posts
Post sales orders as invoices Off · When the order is paid · When the order is fulfilled (everything shipped) An invoice for the order. Paid is the moment the order's payment turns paid — Mark paid, an order created already paid, or a store reporting it paid. Fulfilled is the moment its last line ships.
Include orders from connected stores and Workiz Off (default) · on Off: orders from your online stores are left to the store's own accounting app, and Workiz parts orders to Workiz, which invoices the job.
Post purchase orders as bills Off · When the order is placed (ordered quantities) · When goods arrive (received quantities) A bill for the purchase order. Placed is Mark ordered; goods arrive is when the purchase order is fully received.
Post received returns as credit memos (QuickBooks) / credit notes (Xero) Off (default) · on A credit note for a return, when it is received.

Below them sit the mapping settings: where lines post, which tax codes to use, how documents are numbered. Their lists — accounts, items, tax codes — load from your books once the connection is verified; until then a list reads Verify the connection to load the list. Click Save when done.

QuickBooks Online

Setting What it decides
Sales lines post to One item (every line on the item below, with the product name and SKU as the description) or One item per SKU (the QuickBooks item named by the SKU, created as a non-inventory item when there is none — never an inventory item, since Karmaflow.ai keeps the stock and its cost).
Item for sales lines · Income account for new items The item whose income account takes the sales; the account new per-SKU items post to.
Shipping item · Discount account Blank shipping: QuickBooks' own shipping line when shipping is on in its sales form settings, else the sales item. Blank discount: QuickBooks' default discount account.
Bill account · Freight and duty account Where purchase lines post (your inventory asset account, or a purchases / cost-of-sales account), and where a purchase order's additional costs go.
Sales tax code · Tax code for untaxed lines · Purchase tax code Outside the US, the codes lines post with when none matches their rate.
Sales tax figure US companies: QuickBooks calculates it, or The order's own tax total (US).
Invoice and credit memo numbers Our order / credit note number, or QuickBooks numbers them (ours goes in the private note).
Due in (days) Blank uses the customer's or vendor's terms in QuickBooks.

Xero

Setting What it decides
Post documents as Drafts (default; someone approves them in Xero) or Approved. A document already approved stays approved.
Sales account · Shipping account Where invoice and credit note lines post; shipping posts to the sales account when blank.
Bill account · Freight and duty account As for QuickBooks.
Sales tax rate · Tax rate for untaxed lines · Purchase tax rate Used when a line's own rate matches no Xero rate.
Sales tax figure Xero calculates it, or The order's own tax, so Xero's total is the order's to the cent.
Invoice and credit note numbers Our order / credit note number, or Xero numbers them (ours goes in the reference).
Due in (days) Blank uses the contact's or the organisation's payment terms.

The customer (or supplier) is found in your books by email, then by name, or created. A foreign-currency order needs that currency switched on in your books (multicurrency in QuickBooks).

Never posted twice

Each order, purchase order and return remembers the document it became in each connection. Sending it again updates that document in place, lines replaced. With no record of a previous post, a document with the same number for the same customer or supplier is adopted rather than posted again, and every create is sent so that a retried request cannot make a second document. A document deleted (or, in Xero, voided) in your books is replaced by a new one. Xero refuses to change a document that has payments or allocations against it, and says so.

Send one record now: In your books

When an accounting partner is connected, the order panel (Inventory → Orders → Sales orders → an order) and the purchase-order panel (Inventory → Orders → Purchase orders → one) have an In your books section.

  1. Open the order or purchase order.
  2. Under In your books, click Send to <connection name>.

The section then reads Invoice <number> in <connection> · <when> (or Bill …) — the number links to the document when your books give a link — with Send again beside it. Sending by hand needs inventory:orders:manage, and it sends whatever the automatic setting says — including a store or Workiz order the automatic push leaves out.

Recent activity, and when a push fails

The connection's panel lists Recent activity: each push with when it ran, ok or failed, what it was (an order, a purchase order, a return, a label) and the document number or the partner's answer.

An automatic push that fails is said where you will see it:

Some refusals are the books' own rules: a US QuickBooks company takes no tax-inclusive prices, so such an order is refused with that sentence; a currency your books have not switched on is refused with theirs.

Connect EasyPost or ShipStation

Inventory → Setup → Accounting & shipping, the Shipping section.

EasyPost

  1. Click + EasyPost and give it a Name.
  2. Paste the API key from the EasyPost dashboard (API Keys).
  3. Tick Test mode for the Test key — labels and tracking are simulated and nothing is charged. Leave it unticked for the Production key.
  4. Click Connect & verify.

ShipStation

  1. Click + ShipStation and give it a Name.
  2. Paste an API key (V2): ShipStation → Settings → API Settings → generate a V2 API key (shown once). The older V1 key and secret are not used. A ShipStation API (formerly ShipEngine) account uses its dashboard key; a TEST_ key is its sandbox.
  3. Click Connect & verify.

On the connection's panel, Labels sets Label format (PDF, PNG, ZPL (thermal printers)), Label size (4 × 6 in or Letter) and Rate with — blank rates with every carrier account active in EasyPost, or every carrier connected to ShipStation. Labels are charged the way the partner is set up: EasyPost's wallet or your own carrier account, or the carrier's setup in ShipStation.

Tracking updates

When a shipping connection verifies, Karmaflow.ai sets up delivery tracking with the partner itself, with a secret only the two sides know — there is nothing to paste. The Tracking updates section then reads Set up with <Provider> and when the last event arrived. A delivered parcel marks every shipment carrying its tracking number Delivered.

When it could not be set up, the section says Not set up: and why. Shipments still ship; mark them delivered by hand, or press Verify to try again once the cause is fixed. The usual reasons:

Buy a label from the Ship form

With a shipping partner connected, the order's Ship form gains a Buy a label box (the full Ship steps are in Sales and Purchase Orders):

  1. Open the order and click Ship. Set the quantities to ship.
  2. Under Buy a label, choose the partner in Through. Leave Weight (kg) blank to take it from the products' weights, or type the parcel's weight.
  3. Click Get rates. Rates are listed cheapest first, with the carrier, service and, where given, the delivery days.
  4. Pick a rate and click Buy label & ship.

The label is bought as the shipment is made; its carrier and tracking number go on the shipment, and the shipment card links the Shipping label with its price. If the shipment cannot be made, the label is voided, so nothing is paid for that did not ship.

A rate needs three things, and says which is missing: the order's shipping address (at least a street and a country), the shipping location's address (Inventory → Setup → Inventory Settings → Locations), and a weight. One label covers one parcel, and international parcels, which need customs details, are still bought in EasyPost or ShipStation.

Voiding a shipment voids its label too. Void on a shipment card puts the units back on the shelf and asks EasyPost or ShipStation to void the label, so the carrier refunds it. The shipment card then reads voided with the carrier, or, when the provider refused (a label already scanned, for example), not voided — void it with the carrier for a refund.

Disconnect

Disconnect, at the bottom left of the connection's panel, asks first: what was already posted stays in your books, and nothing more is sent. A shipping connection's tracking webhook is removed from the partner when it can be.

Troubleshooting

Next steps