← Help

Integrations, Bridge, API and webhooks

FoxTrack Bridge, store order sync, CloudSlicer3D, and the API.

FoxTrack Bridge

FoxTrack Bridge is a small open-source agent that runs on a computer on your shop network and streams live printer status (progress, temperatures, job state), print history and camera snapshots into FoxTrack, with no cloud account in the middle. It needs Pro or Farm. The computer running it must stay on for status to keep updating.

To connect it:

  1. Under Settings → Integrations → FoxTrack Bridge (owners and admins), click Generate token, give the token a name and click Generate.
  2. Copy the token straight away. It starts with ftb_ and is shown only once. Each token authenticates one Bridge installation to this workspace, so treat it like a password and revoke it if it leaks.
  3. In the Bridge dashboard, open Settings, paste the token into the FoxTrack sync field and click Save.
  4. Add your printers in the Bridge dashboard: Printers → Add printer. For a Bambu Lab printer, first turn on LAN Only Mode and Developer Mode on the printer (Settings, then Network); the Bridge then asks for its IP address, serial number and access code, all on the printer's screen.
  5. Link each printer the Bridge reports to a printer in FoxTrack (see Linking Bridge printers to your printers).

Bridge connects Klipper printers, Bambu Lab printers over their local MQTT connection, Prusa printers through PrusaLink (the printer's address and its API key from the printer's Settings → Network), and any printer Home Assistant already knows (Bridge 2.5.1 or newer).

For Home Assistant, give the Bridge your Home Assistant address, a long-lived access token (your profile → Security) and the entity that holds the printer state, plus the progress, nozzle, bed, file and time-left entities if you have them. A Home Assistant printer is read-only: FoxTrack shows its status and print history, but sends it no commands or files.

Linking Bridge printers to your printers

Each printer the Bridge reports shows up as a Bridge device, kept separate from the printers you add yourself. Link a Bridge device to its printer and that printer gets live status, the camera and the pause, resume, stop and light controls.

  1. On the Printers page, open the Fleet view. Bridge devices that are not linked yet are listed under the printer cards, in Bridge devices to link.
  2. Pick the printer in the device's Link to printer… menu. If the printer is not in FoxTrack yet, click Add as new printer instead: the new printer form opens with the device's name, and the device is linked once you save.

You can also link from the printer's side: click a printer that has no Bridge device and pick one in the Pick a Bridge device… menu of its Live section. A printer that is already linked is not offered in these menus. To change or remove a link, click the printer and use the Bridge device menu at the bottom of its Live section; choose Unlink to remove the link. Linking needs the owner or admin role.

The Live view shows a tile for every Bridge device, linked or not. Your plan's printer limit also caps the number of Bridge devices (5 on Pro, unlimited on Farm), so remove old offline devices you no longer use. When the Bridge finds a printer past that cap, the Printers page shows a notice that names it, such as "1 printer not shown. Your plan allows 5 Bridge printers." Remove a device you no longer use or move to a bigger plan (See plans opens Billing) and the printer appears on its own. Dismiss (owners and admins) hides the notice until the Bridge reports that printer again.

If you already track a printer in FoxTrack, add it to the Bridge and link it. Do not delete the FoxTrack printer first: deleting a printer also deletes its maintenance schedules, service log and installed hardware, and its orders, print queue items and print history lose their printer.

FoxTrack matches a Bambu Lab printer by its serial number, and a Klipper printer by the name it has in the Bridge, so the names in FoxTrack and in the Bridge do not have to match.

Printing a file from FoxTrack

You can send a product variant's print file to a printer and start the print from FoxTrack. You need FoxTrack Bridge connected, and the file attached first (see Print files under Products).

The Bridge must be a version that can print files: on an older one, the printer shows Update FoxTrack Bridge to print files and cannot be picked.

A Bambu Lab printer must be in LAN Only Mode with Developer Mode on, the same setup Bridge needs for pause and stop. Printing does not work over Bambu Cloud. To switch it on, go to Settings → Network on the printer's screen and turn on LAN Only Mode, then Developer Mode. While it is in LAN Only Mode, the Bambu Handy app cannot see the printer. A Klipper printer only needs to be connected through Bridge.

To start a print, press Print in the variant's Print file area (see The Print dialog, step by step). To send one plate to more than one printer, see Printing on several printers at once.

The Print dialog, step by step

In the Print dialog you choose the printer and, on a Bambu printer, the AMS slots, then confirm the build plate is clear. After you press Print, the dialog follows the print until the printer has started it.

Press Print in the variant's Print file area, on the product's Materials tab (the Details tab for a From stock product):

  1. If the file has several plates, pick the Plate first. Each choice shows the plate number, its print time and its materials. The printers and the AMS slots below follow the plate you pick.
  2. Pick the Printer. Only printers of the right kind are listed (Bambu Lab for a .gcode.3mf, Klipper for a .gcode). Each one ends with how it stands, in brackets: Ready, or why not. One whose Bridge is not reporting (Bridge offline), already printing (Printing now), in Bambu Cloud mode (Needs LAN Only Mode) or running an older Bridge is grayed out with that reason. One that can take the file but needs a look is not grayed out and says why instead: Sliced for and the file's model when the printer reports a different one (you must check Print it anyway), Load and a material such as PLA when that material is not loaded where FoxTrack would put it, or Different color loaded. Ready printers are listed first, then the ones that need a look, then the grayed ones. A Retired or archived printer is not listed.
  3. On a Bambu printer with an AMS, choose which AMS slot each filament in the file uses. FoxTrack suggests slots by material and color. A file with one filament can use the External spool instead, and the dialog shows what is loaded on it when the Bridge reports it; a file with more than one needs an AMS slot for each. A printer without an AMS says which filament to load on the external spool. A Klipper printer says which filament to load.
  4. On a Bambu printer, choose Level the bed first (on by default) and Record a timelapse (off by default).
  5. Check The build plate is clear and the right filament is loaded.
  6. Press Print.

Then the dialog follows the print: Waiting for the Bridge to pick it up, Sending the file to the printer, then Printing started on the printer. Bridge downloads the file, checks it, copies it to the printer and starts it. If it fails, the dialog says why, such as the Bridge not picking it up within 2 minutes, and Try again takes you back to the choices. A printer takes one print at a time: while one is on its way to a printer, you cannot send another.

Printing on several printers at once

To print the same plate on more than one printer, press Print on several printers under the Printer box. The printers can start all at once or a few minutes apart.

The button shows when at least two printers can take the file. It is not offered when you open Print from the print planner.

  1. Check the printers. The ready ones start checked, and you can also check one that needs a look.
  2. Choose Start the printers: All at once, 1 minute apart (the default), 2 minutes apart or 5 minutes apart.
  3. Check that every build plate is clear and the right filament is loaded.
  4. Press Print on 3 printers (the number is how many you checked).

Each Bambu printer uses the AMS slots FoxTrack picks and levels the bed first, with no timelapse. To choose the slots, press Print on one printer instead.

The first printer starts at once and each later one starts a gap after the one before. FoxTrack holds the waiting prints itself, so they still start at their time if you close the dialog.

The dialog lists each printer as Starts at (a time), Waiting for the Bridge to pick it up, Sending the file to the printer or Printing started. A print that has not started yet has a Cancel button. A canceled print says Canceled before it started. A print still waiting when its printer is archived says The printer was archived before this started.

Other places to print, and what a print does to stock

Print also shows in two more places. On an order's fulfillment page, a line that is not done yet, for a variant with a print file, has a Print button that picks the line's printer. On the print planner (Farm), the next plate on a printer card has Print when all its lines are that one variant; it picks the plate's printer and marks the plate started once the printer starts. The planner also has Mark done and print next and Print next plates (see the Print planner topic). You can always pick another printer in the dialog.

When a print that FoxTrack started ends, the printer asks how it went, and Good, print again can send the same file again in one tap (see Print results under Printers).

When a Bridge print ends, FoxTrack can take the grams it used off the spool in that slot (see Filament from the printer under Printers). A bare estimate from the print file is skipped when an open order line or a restock run that is Printing already counts that product, and the Print ended prompt says Counted by an open order or run. A print the printer measured (AMS percentage or the length a Klipper printer fed) books the grams beyond what that open work holds. A failed print records the filament it wasted (see Print results under Printers).

Setting the filament in an AMS slot

With FoxTrack Bridge connected, you can tell a Bambu Lab printer which filament is in an AMS slot or on the external spool, the same as editing a slot on the printer or in Bambu Studio. The printer must be in LAN Only Mode with Developer Mode on, the same setup as printing a file, and it needs a Bridge version that can set filament.

  1. On the Printers page, open the printer. The Live section shows the AMS slots and the External spool.
  2. Click a slot.
  3. Pick the Material and the Color, then press Save. You can also pick the Spool it is: picking one fills in the material and color.

The dialog waits for the Bridge, then says Saved, or why it failed, such as the Bridge not picking it up within 2 minutes or the printer refusing the change. One change per printer can wait at a time. If the slots cannot be clicked, the printer is offline, in Bambu Cloud mode, or its Bridge is too old.

The materials are PLA, PLA-CF, PETG, PETG-CF, ABS, ASA, PC, PA, PA-CF, TPU, PVA and HIPS. An AMS HT slot, and the external spool on a two-nozzle printer, cannot be set yet. Setting a slot does not change your filament stock in FoxTrack. A spool you picked is put in the slot only when the printer confirms the change, so a change that failed or timed out leaves the slot as it was, and later prints take their grams off the right spool.

Changing a printer in the Bridge

When a printer gets a new IP address or access code, change it in the Bridge instead of removing the printer and adding it again: click the pencil icon on the printer's card in the Bridge dashboard, change the details and click Save. Leaving the access code or API key blank keeps the saved one. If there is no pencil icon, update the Bridge first.

Renaming a Bambu Lab printer in the Bridge keeps its link, and FoxTrack shows the new name. Renaming a Klipper printer creates a new Bridge device, because FoxTrack knows Klipper printers by name. To move the link, click the printer, choose Unlink in the Bridge device menu at the bottom of its Live section, then link the new device from Bridge devices to link. The old device stays under Bridge devices to link and shows as offline; an owner or admin can clear it with its Remove button, which appears once the device is offline and keeps its print history. Changing a Bambu Lab printer's serial number in the Bridge has the same effect as renaming a Klipper printer.

CloudSlicer3D

On the Pro plan and above, Settings → Integrations → CloudSlicer3D imports orders placed in your CloudSlicer3D store as FoxTrack orders, and can send status changes back.

The full setup is in Setting up CloudSlicer3D, step by step. On a workspace that has never connected, the card shows one line and a Connect button. Press Connect, copy the webhook URL FoxTrack shows into a CloudSlicer webhook endpoint that subscribes to order.created, order.updated and order.deleted, and paste the endpoint's Signing Secret (it starts with whsec_) into FoxTrack. FoxTrack does not save a value that does not start with whsec_. Webhooks are a paid CloudSlicer feature.

The Accept incoming events switch pauses imports without deleting anything. The Recent events table shows each event and what FoxTrack did with it.

How CloudSlicer3D orders are imported

An order placed in your CloudSlicer store arrives as a normal FoxTrack order, with its customer, due date, lines and totals filled in from CloudSlicer.

  • The customer is matched by email or created.
  • The ship-to address is saved on a customer who has none yet and added to the order notes.
  • The CloudSlicer deadline becomes the due date.
  • Each print becomes a line with its quantity (add-ons folded into the price). It is on the Fulfillment queue like any print.
  • A priority surcharge or a base fee in the CloudSlicer subtotal becomes a line of its own. It is a fee, so it is not on the queue.
  • A Rounding line of a cent or two is added when a unit price cannot hold the exact amount.
  • The CloudSlicer shipping cost and discount go in the order's own shipping and discount fields, so the order adds up to the CloudSlicer total.
  • Collection or shipping follows what the customer chose.

Amounts are copied as they are, without conversion, so keep your CloudSlicer currency the same as the workspace currency. If they differ, the order notes say so.

The card also has two choices: the sales channel every CloudSlicer order files under, and the priority given when the customer pays for a priority option. A CloudSlicer option named exactly like one of your priorities uses that one, paid or not; a free option gets no priority.

The order notes keep the customer's words, any discount name and each item's add-on answers. The money summary CloudSlicer writes is dropped because it is on the order already.

CloudSlicer3D status sync

Order statuses sync both ways with CloudSlicer while the Sync order statuses switch, under Status sync in the card, is on. It is on by default. Turning it off stops both directions, but a cancellation from CloudSlicer still applies.

When CloudSlicer changes an order's status, the FoxTrack order moves to the first status in the card's Status map that shows that CloudSlicer status. An edit in CloudSlicer that does not change the status moves nothing. An order canceled or deleted in CloudSlicer moves to your canceled status, and a completed order that is deleted is left alone.

To send your own changes to CloudSlicer, save a CloudSlicer API token in the card (the CloudSlicer API needs a paid CloudSlicer plan). Then when you move a CloudSlicer order, CloudSlicer shows the status the map gives it. The map suggests a CloudSlicer status for each of your statuses:

  • Your first status is New.
  • A printing status and the statuses after it are Printing.
  • A waiting status such as On hold is In progress.
  • A status that removes orders from the active board is Completed.
  • Your canceled status is Canceled.

You can change any of them, or pick Do not send; Use suggestions puts them back.

Changes are sent a moment after you make them while FoxTrack is open in a browser, and every 5 minutes while it stays open. A change made while nobody has FoxTrack open (for example through the API) goes out the next time someone opens it. The Recent status updates table shows each one and Send now sends anything waiting. If CloudSlicer refuses the token, updates wait until you save a working one. Other edits made in CloudSlicer are not copied.

Setting up CloudSlicer3D, step by step

CloudSlicer3D sends each order to FoxTrack through a webhook you add in CloudSlicer. You copy FoxTrack's webhook URL into CloudSlicer, then copy CloudSlicer's signing secret back into FoxTrack.

You need the Pro or Farm plan, the owner or admin role in FoxTrack, and a paid CloudSlicer plan (CloudSlicer webhooks are a paid feature). New to CloudSlicer3D? After Connect, the card has a code for your first CloudSlicer checkout.

  1. In FoxTrack, open Settings → Integrations → CloudSlicer3D, press Connect (only the first time), then press Copy next to Webhook URL.
  2. In CloudSlicer, open Settings, then Webhooks, and turn on Enable Webhooks.
  3. Click Add Endpoint, paste the URL as the Destination, and subscribe to order.created, order.updated and order.deleted.
  4. Open the new endpoint in CloudSlicer and copy its Signing Secret.
  5. Back in FoxTrack, paste it into Signing secret and press Save secret.
  6. Under Orders, pick the Sales channel CloudSlicer orders file under and the Priority for priority orders, and check that Accept incoming events is on.
  7. To send your own status changes back to CloudSlicer, save a CloudSlicer API token under Status sync (the CloudSlicer API needs a paid CloudSlicer plan) and look over the Status map. Without a token, orders still come in and CloudSlicer cancellations still apply.

Place a test order in CloudSlicer: it shows in the card's Recent events table with what FoxTrack did, and as a new order on the board. If nothing arrives, check the Destination is the exact URL from the card and that the endpoint subscribes to all three events. A Signing secret that does not match the endpoint makes FoxTrack refuse its events, so copy it again from that same endpoint.

Store sync is in beta

Shopify, Etsy and WooCommerce order sync are new, and their cards are marked Beta. If anything looks off, tell us with the Support button (the ? at the top of the page) or at info@foxtrack.studio.

Shopify order sync

Orders from a Shopify store come into FoxTrack automatically once you connect it under Settings → Integrations → Shopify. Store sync needs Farm, and the card is marked Beta (see Store sync is in beta).

To connect, follow Setting up Shopify, step by step. You make a small app for your store in the Shopify Dev Dashboard, paste the store's myshopify.com domain and the app's Client ID and Client secret into the card and click Save, then click Connect: FoxTrack checks the app and creates the order webhooks in the store itself. Check again repeats the check and shows what is missing.

Stores without a Dev Dashboard app can use Older setup instead: create webhooks for Order creation, Order cancellation, Order update and Refund create under Settings → Notifications → Webhooks in the Shopify admin, with the webhook URL the card shows, and save the signing secret Shopify shows. A custom app token made in the Shopify admin before 2026 can still send tracking numbers.

Orders arrive as described in How store orders arrive in FoxTrack. For Shopify, a Shopify channel is created the first time you save, and a local pickup order is marked Collection. A cancellation or a full refund in Shopify moves the order to your canceled status and restores stock.

When you save a Shopify order as Shipped with a tracking number, move it into a column that marks it Shipped, or mark it Shipped through the API, FoxTrack fulfils the order in Shopify once and Shopify emails the customer. Saving again does not send it twice, and a changed number updates the fulfilment.

Setting up Shopify, step by step

FoxTrack connects to Shopify through a small app you make for your own store in Shopify's Dev Dashboard, so the store decides what FoxTrack may read. It takes about ten minutes.

You need the Farm plan, the owner or admin role in FoxTrack, and access to the store's Shopify Dev Dashboard.

  1. In FoxTrack, open Settings → Integrations → Shopify and keep that tab open.
  2. In another tab, open the Shopify Dev Dashboard (dev.shopify.com) and create an app for your store. Any name works; FoxTrack is a good one.
  3. Under the app's Access, add two scopes: read_orders (FoxTrack reads new orders, cancellations and refunds) and write_merchant_managed_fulfillment_orders (FoxTrack marks an order fulfilled with its tracking number). write_orders also covers read_orders.
  4. Still under Access, request protected customer data access for name, email, phone and address. Without it Shopify refuses the order webhooks.
  5. Release a version of the app, then install it on your store.
  6. Open the app's Settings and copy its Client ID and Client secret.
  7. Back in FoxTrack, fill in the card:
    • Store domain: the store's myshopify.com address, such as my-store.myshopify.com. Every store has one, even when customers see your own domain. FoxTrack refuses deliveries from any other store.
    • Client ID and Client secret: the two values from step 6. Press Save. The card says App credentials saved.
  8. Press Connect. FoxTrack checks the app and creates the order webhooks in the store itself. When it works, the message names your shop and says new orders, cancellations and refunds now reach FoxTrack, and the Connection line says when the webhooks were made.
  9. Pick the Sales channel Shopify orders file under (a Shopify channel is made the first time you save) and check that Accept incoming orders is on.
  10. Give each product variant the same SKU in Shopify and in FoxTrack, so a Shopify sale takes stock from the right variant.

Place a test order in the store: it shows in the Recent deliveries table and as a new order on the board.

What Connect may say:

  • The app is missing these scopes: add the scopes it names under Access, release a new version, approve it on the store, then press Check again.
  • Shopify would not add the webhook: the app has no protected customer data access yet. Request it (step 4), release, and press Connect again.
  • Shopify refused the credential: the app is not installed on the store in Store domain, or the Client secret is wrong. Check both and save again.
  • FoxTrack could not reach the store: the message names the address it tried. Check the spelling of the myshopify.com address.

A store without a Dev Dashboard app can use Older setup on the same card: webhooks made by hand in the Shopify admin and their signing secret (see Shopify order sync).

Etsy shop sync

An Etsy shop can be connected on the Farm plan, under Settings → Integrations → Etsy, and FoxTrack then imports its orders. The card is marked Beta (see Store sync is in beta).

To connect, follow Setting up Etsy, step by step: click Connect Etsy shop, sign in to Etsy and approve FoxTrack, and you come back to Settings with the shop connected. Etsy has no instant notifications, so FoxTrack checks the shop every 10 minutes, and less often (up to once an hour) while the shop is quiet; the Check now button checks at once and resets that. Only orders placed after you first connected are imported, including one whose payment clears later. Digital downloads are not imported.

Orders arrive as described in How store orders arrive in FoxTrack. For Etsy, an Etsy channel is created when you connect, and the due date is the ship-by date Etsy gave the buyer. An order canceled or fully refunded on Etsy moves to your canceled status and restores stock.

When you save an Etsy order as Shipped with a tracking number, or mark it Shipped through the API, FoxTrack sends it to Etsy once and Etsy emails the buyer.

Setting up Etsy, step by step

Etsy needs no app, keys or webhooks: you approve FoxTrack once from your Etsy account. You need the Farm plan and the owner or admin role in FoxTrack.

  1. Before you connect, give each product variant the same SKU in Etsy and in FoxTrack, so an Etsy sale takes stock from the right variant.
  2. Open Settings → Integrations → Etsy and press Connect Etsy shop.
  3. Etsy opens. Sign in with the account that owns the shop and approve FoxTrack.
  4. You come back to Settings with the shop connected: the card shows the shop's name and when FoxTrack last checked it.
  5. An Etsy sales channel is made when you connect, and every Etsy order files under it. Pick another under Sales channel if you like, and give that channel its own stock location under Settings → Sales channels so Etsy sales take stock from the right place.
  6. Check that Import new orders is on.

FoxTrack checks the shop every 10 minutes (less often while it is quiet); press Check now to check at once. Only orders placed after you connected are imported. For older orders, use Etsy order files: download the Order Items CSV from Etsy and import it on the Orders page (see Etsy order files).

If a check fails, the card shows Etsy's reason under the shop name. When Etsy no longer accepts FoxTrack's approval (you removed it in Etsy, say), press Disconnect and then Connect Etsy shop again; orders already imported stay.

Etsy order files

With Pro or Farm, Etsy orders can come in as a file, without connecting the shop (connecting it needs Farm).

  1. Turn on Import Etsy order files in Settings → Integrations → Etsy.
  2. In Etsy, open Shop Manager → Settings → Options → Download Data. Under Orders pick Order Items and download the CSV.
  3. On the Orders page, click Import CSV, pick Etsy order file and upload it. FoxTrack shows how many orders it found before anything is saved.

Each Etsy order becomes one FoxTrack order under the Etsy sales channel, the same way the shop sync makes one: shipping and the discount land in the order's own fields, tax is a line, and the ship-to goes onto the customer and into the notes. A line whose SKU matches an active product variant takes stock; an unknown SKU becomes a text line and is listed when the import ends.

Orders already marked shipped on Etsy and orders with only digital items are skipped, and so is any order already in FoxTrack, so importing the same file again is safe. The file has no buyer email and no ship-by date, so imported orders have neither.

WooCommerce order sync

Paid orders from a WooCommerce store can be imported on the Farm plan, under Settings → Integrations → WooCommerce. The card is marked Beta (see Store sync is in beta).

To connect, follow Setting up WooCommerce, step by step. You make a REST API key with Read/Write permission in WordPress, paste your store's https address (with its folder, if WordPress lives in one) and both keys into the card and click Save, then click Connect: FoxTrack checks the keys and creates the Order created, Order updated and Order deleted webhooks in the store itself. If Connect cannot create them, Create the webhooks by hand instead shows the delivery URL and takes a secret you chose.

An order is imported once it is Processing or Completed, so an order waiting for payment arrives when the shop marks it paid.

Orders arrive as described in How store orders arrive in FoxTrack. For WooCommerce, a WooCommerce channel is created the first time you save, and a local pickup order is marked Collection. A canceled, refunded, failed or deleted order moves to your canceled status and restores stock.

When you save a WooCommerce order as Shipped with a tracking number, or mark it Shipped through the API, FoxTrack sends it once: through the WooCommerce Shipment Tracking extension when the store has it, otherwise as a note to the customer that WooCommerce emails, and then it marks the order Completed.

Setting up WooCommerce, step by step

WooCommerce connects with a pair of REST API keys you make in WordPress. You need the Farm plan, the owner or admin role in FoxTrack, a store served over https, and a WordPress user that can manage WooCommerce.

  1. In FoxTrack, open Settings → Integrations → WooCommerce and keep that tab open.
  2. In WordPress, open WooCommerce, then Settings, then Advanced, then REST API, and click Add key.
  3. Give the key a description (FoxTrack), pick a user who can manage WooCommerce, set Permissions to Read/Write, and generate the key.
  4. Copy the Consumer key and the Consumer secret straight away; WooCommerce shows the secret only once.
  5. Back in FoxTrack, fill in the card:
    • Store address: your shop's https address, such as https://shop.example.com. If WordPress lives in a folder, include it (https://example.com/shop).
    • Consumer key and Consumer secret: the two values from step 4. Press Save.
  6. Press Connect. FoxTrack checks that the keys can read orders and creates three webhooks in the store (Order created, Order updated and Order deleted). When it works, the message says new paid orders, cancellations and refunds now reach FoxTrack.
  7. Pick the Sales channel WooCommerce orders file under (a WooCommerce channel is made the first time you save) and check that Accept incoming orders is on.
  8. Give each product variant the same SKU in WooCommerce and in FoxTrack, so a sale takes stock from the right variant.

An order arrives once the store marks it Processing or Completed, so place a paid test order to see it in the Recent deliveries table.

What Connect may say:

  • The store refused the API keys: check both keys, that the key is Read/Write, and that its user can manage WooCommerce.
  • No WooCommerce REST API at that address: the store address is wrong (a missing folder is common) or WooCommerce is not active.
  • FoxTrack could not reach the store, or could not open a secure connection: a typo in the address, the site is down, or its certificate is not valid. The message names the address it tried.
  • The store would not add a webhook: open Create the webhooks by hand instead on the card. In WooCommerce open Settings → Advanced → Webhooks and add three webhooks with the topics Order created, Order updated and Order deleted, API version WP REST API Integration v3, the Delivery URL the card shows, and one secret you choose for all three. Paste that secret into Webhook secret on the card and save.

How store orders arrive in FoxTrack

Orders from Shopify, Etsy and WooCommerce are imported the same way. Each one becomes a FoxTrack order under the sales channel picked in the card, so finished-goods stock is taken from that channel's location.

  • Shipping and the discount (the coupon discount, for WooCommerce) land in the order's own fields.
  • Tax is a line. So are WooCommerce fees and Etsy gift wrap. These are fees, so they are not on the Fulfillment queue. Every product line is, matched by SKU or not, unless it is taken whole from stock.
  • The ship-to goes onto a new customer and into the notes.
  • A line whose SKU matches an active product variant deducts stock like an order typed on the board. This is the only way a store order takes stock: for Etsy, a product needs the same SKU as its Etsy listing, and lines with no match still import but take no stock.
  • A line with an unknown SKU is imported as a text line, and the SKU is listed under Unmatched in the card's table (Recent deliveries for Shopify and WooCommerce, Recent Etsy orders for Etsy).
  • A partial refund is added to the order notes.
  • When the store changes an order after it was imported (other items or quantities, or a new ship-to address), a note on the order says so. FoxTrack changes nothing else on the order, so check it in the store. Orders already shipped get no note.
  • When the store charged the order in another currency than your workspace uses, the order notes say so. The amounts are copied as they are, without conversion.

When a store order is saved as Shipped with a tracking number, FoxTrack sends the number to the store once. The order's Send tracking to Shopify again button (or the Etsy or WooCommerce one) sends it once more.

The Shopify, WooCommerce and CloudSlicer3D cards show Delivery refused, with when it happened and why, when FoxTrack dropped a webhook from the store, for example because of a wrong secret or a different shop. Fix the setting named and the next delivery gets through.

Each card has a switch that pauses imports: Accept incoming orders on Shopify and WooCommerce, Import new orders on Etsy. On Shopify and WooCommerce it stays off until the store is connected. Disconnect removes the webhooks FoxTrack created and keeps the orders already imported; on Etsy it removes the connection and keeps them. Before a connection, Clear saved details removes a saved domain or store address and credentials instead (Shopify and WooCommerce).

A store sync that is paused

Shopify, Etsy and WooCommerce order sync need the Farm plan, and CloudSlicer3D needs Pro or Farm. When the plan no longer includes it (after a downgrade, say), the store stays connected but pauses: new orders are not imported. The store's card under Settings → Integrations says it is paused and how many orders were not imported since when, and the bell shows Shopify sync is paused (or the store's name) until it is resolved. Return to the plan that includes the store to start importing again, or disconnect it. The notification clears itself once the plan includes the sync again or the store is disconnected.

Store orders: customers, early cancels and failed imports

FoxTrack matches each Shopify, Etsy and WooCommerce order to an existing customer when it can, and makes a new one when it cannot. It also handles a cancel that arrives before its order, and an import that fails.

A store order finds its customer in this order: the same email (a live customer before an archived one; an archived customer that matches comes back out of the archive), then, for an order with no email, the same phone number (its digits, at least 7), then the same name and postcode. An order with no name, email, phone or address at all goes to one walk-in customer per store, such as Walk-in (Shopify), instead of a new customer each time. Otherwise FoxTrack makes a new customer.

Stores do not always send their messages in order. When a Shopify or WooCommerce cancel arrives before the order itself, the order is still imported, with a note, straight into your canceled status, so it takes no stock and does not count as revenue. Its row in Recent deliveries says Created as canceled. A WooCommerce order canceled and then re-opened in the store imports as a normal order.

A delivery that fails to import says Error in Recent deliveries, with the reason. Shopify sends it again by itself. WooCommerce does not, so FoxTrack runs it again when the next delivery for the same order arrives, and an owner or admin can press Retry import on that row. Each card under Settings → Integrations shows Connected, Paused or Not connected under its name, with when it last heard from the store (or, for Bridge, when a printer last reported).

API keys

API keys let an outside app or integration use FoxTrack's API. They need Farm, and only owners and admins can make them, under Settings → Developer.

Create a key with a name, the scopes it may use and an optional expiry date; the full key is shown once, at creation, in a field with a Copy button, so save it somewhere safe. Keep the key on a server, never in a web page or an app. The list shows each key's name, prefix, scopes, creation date, last use and status, and a key can be revoked at any time. The API docs button on the same tab opens the reference for every endpoint. After a move off Farm the API refuses every key, and the tab still lists the keys you made so you can revoke them; making a new one needs Farm again.

Each scope in Create API key says what it allows, and scopes cannot be changed later: make a new key instead. With the right scopes a key can:

  • read, create and update customers
  • read and create orders (with a priority and a project title), find an order by its number, change an order, and add, change or remove its lines (totals and stock follow, as in the app)
  • read products, inventory, channels, order statuses and order priorities
  • read invoices with their lines and payments (the invoices:read scope)
  • add to or take from the stock of an inventory item or a product variant, with a note that shows in its stock history (the inventory:write scope)

Amounts are in minor units (cents) with the currency.

Every POST, PATCH and DELETE may send an Idempotency-Key header: sending the same request again with the same key within 24 hours returns the first answer instead of doing it twice, and reusing a key for a different request is refused. The stock changes take an amount to add or take away, not a new total, so a till or warehouse script should send a key with each one: a retried sale then counts once.

GET /products marks a product or variant the shop archived with is_active false, and an API order for one is refused.

When a call that changes the shipping status, tracking number, carrier or status of an order from Shopify, Etsy or WooCommerce leaves it Shipped with a tracking number, FoxTrack sends the number to that store once, as a save in the app does, and the store emails the buyer. A store that refuses it never fails the call. The result shows in the Tracking pushes table on the store's card under Settings → Integrations.

Webhooks

A webhook makes FoxTrack send a signed HTTP POST to your server when an event you subscribed to happens in the workspace. Webhooks need Farm.

Owners and admins add webhook endpoints under Settings → Developer: give each a name, your URL and the event types to subscribe to.

The events cover orders (created, status changed, shipped), customers (created, updated), invoices (issued, paid, voided, a payment or refund recorded) and credit notes (issued, voided). An endpoint's events are chosen when it is added; to change them, add a new endpoint and delete the old one.

When you add an endpoint, FoxTrack shows its signing secret once, with a Copy button: your server uses it to verify the X-FoxTrack-Signature header. Save it then, because it cannot be shown again; to get a new one, delete the endpoint and add it again.

Each endpoint can be disabled without deleting it. After a move off Farm nothing is sent, and the tab still lists your endpoints so you can disable or delete them; adding, enabling, testing and retrying need Farm again.

Test sends a test.ping event (it is off while the endpoint is disabled). Deliveries opens the endpoint's delivery log: each delivery with its status, HTTP code and any error.

Each delivery is tried up to 6 times: at once, then 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours after a failure; then it is marked Failed. After 10 failed deliveries in a row the endpoint switches itself off, with the reason shown under it; fix the URL and switch it back on. Refresh reloads the log, and a failed delivery, or one waiting to retry, has a Retry button that starts a new round. The row then says Retried by hand once (or how many times), and Show earlier attempts lists how each earlier round ended.

The payload format is a choice per endpoint: each endpoint shows Payload: Bare or Payload: Envelope, with Change. Bare (the default) posts the event's fields as the body. Envelope sends id (the delivery's id, the same on every retry, so your server can skip a repeat), type, created_at, sequence and data (the Bare body). Every delivery also carries an X-FoxTrack-Sequence header (deliveries queued before the header was added, and their retries, have none): a number that grows in the order FoxTrack queued the events, so sort by it when one save sends several (a paid invoice sends invoice.issued, then invoice.payment_recorded, then invoice.paid). Deliveries can arrive out of that order, and the numbers have gaps. Switching changes what your server reads, so update the server first; deliveries still queued go out in the new format. The API docs list each event's fields.

SpoolmanDB

The filament catalog dialog can search SpoolmanDB, a public community database of filaments, to fill in a type's brand, material, color, color hex and full-roll weight. This is a lookup only; nothing is sent to Spoolman and no account is needed.

Still stuck?

Email info@foxtrack.studio or ask on the FoxTrack Discord. Inside the app, the question mark in the top bar sends a bug report or feedback.