Skip to main content

Scheduled syncs and commands

VeraCore publishes no webhooks. Nothing arrives because VeraCore pushed it — everything inbound is polled on a schedule. This page is the timetable.


The schedule

What runsHow oftenWhat it does
Tracking (Dynamic Report)Hourly, on the hourRequests a Dynamic Report from VeraCore, polls until it is ready, and applies the tracking numbers and freight it returns
Order detail syncHourly, at :13 pastPulls current status, ship dates, and shipment detail for orders at VeraCore
Catalogue syncHourly, at :13 pastPulls the Offer catalogue and runs the match ladder over unmapped offers
Expected arrival reconciliationHourly, at :13 pastChecks sent announcements against the warehouse and updates their status
Inventory mirrorWakes hourly, runs once a day at your configured hour (default 02:00)Walks every Offer, records balances, and writes the ledger diff
Facility discoveryDailyDiscovers VeraCore facilities from the inventory feed so they can be mapped
Ledger pruneDaily at 03:30Drops inventory-change rows past your retention window
Why :13 past the hour, and not :00

Around forty integration syncs share the same servers. If every one fired at :00 they would stampede the box together. Each integration gets a fixed offset — VeraCore's is 13 minutes — so the load spreads across the hour. It is a fixed number, not a random jitter, so runs stay predictable.

Every job takes an overlap lock for 60 minutes: if a run is still going when the next one is due, the next one is skipped rather than stacked on top.

Why inventory wakes hourly but syncs daily

VeraCore's own guidance is to export balances once per day, after the last order batch has imported and processed — pulling the whole catalogue's balances is expensive on both sides. So the mirror runs once a day, at the hour you pick on the Inventory Sync settings tab.

The scheduler still has to wake up every hour, because every connection can pick a different hour. Each hourly wake-up checks "is this my hour?" and does nothing if it is not.

Why tracking runs hourly

It used to run every three hours. A single missed cron minute once stranded an entire day's ship wave for over three hours, because fulfillment materialisation rides entirely on this schedule. Hourly caps that damage to about an hour, and the report window overlaps by a day, so extra runs are harmless — they just produce a Superseded report task.

The Dynamic Report Tracking switch on the settings screen still says "every 3 hours". The schedule is hourly; the label has not caught up.


What gates each job

A scheduled job runs, then checks whether it is allowed to do anything. Two gates apply:

  1. The sync schedule — pausing it on the Sync settings tab stops every automatic job for the connection. Manual Sync Now actions still work.
  2. The capability switch for that entity.
JobCapability that gates it
TrackingImport from VeraCore → Tracking
Order detail syncImport from VeraCore → Tracking (runs only when automatic sync is enabled on the connection)
Catalogue syncImport from VeraCore → Products
Inventory mirrorImport from VeraCore → Inventory (and the Enable Inventory Sync toggle)
Facility discoveryImport from VeraCore → Inventory
Expected arrival reconciliationNo capability switch — only the sync schedule and the connection's automatic sync
Ledger pruneNo capability switch — only the sync schedule and the connection's automatic sync
Sending ordersSend to VeraCore → Orders (and Enable Fulfillment)
Pushing productsSend to VeraCore → Products

Receiving has no capability of its own — the five switches cover tracking, inventory, and products in, and orders and products out. Expected arrivals ride on the connection's overall sync state instead.

Nothing happening? Check the gates in this order

Sync schedule paused → capability switch off → the feature's own toggle (Enable Fulfillment, Enable Inventory Sync, Dynamic Report Tracking) → credentials. See Troubleshooting.


Running a sync by hand

Every scheduled pull also has a button. You do not need server access for normal operation:

TabButton
ProductsSync — pulls the catalogue and re-runs matching
InventorySync — mirrors balances now, regardless of your configured hour
OrdersSync — refreshes order status
Expected ArrivalsSync — reconciles announcements
Warehouse MappingsSync — rediscovers facilities

Long-running syncs report progress in the job tray.


Commands (for administrators)

These are the command-line equivalents behind the schedule. They are documented for support and self-hosted operators — day-to-day use never needs them.

CommandWhat it does
veracore:sync-inventoryMirror inventory balances and write ledger diffs
veracore:sync-productsSync the offer catalogue and auto-match unmapped offers
veracore:sync-warehousesDiscover VeraCore facilities from the inventory feed
veracore:sync-expected-arrivalsReconcile sent expected arrivals against the warehouse
veracore:prune-inventory-changesPrune ledger rows past the retention window
veracore:update-trackingDispatch the tracking job for each tenant
veracore:fetch-trackingRequest and poll a Dynamic Report inline. Takes --non-interactive to skip prompts for automation
veracore:backfill-shipping-cost-linesRe-derive VeraCore freight onto existing shipments and (re)create the missing cost financial line. Idempotent

Useful options

--instance= — accepted by sync-inventory, sync-products, sync-warehouses, sync-expected-arrivals, and prune-inventory-changes. It targets one connection and bypasses every enablement filter — the paused schedule, the capability switch, the per-instance hour. This is the "just run it now, I know what I'm doing" escape hatch used when diagnosing a stuck connection.

--scheduled — passed by the scheduler only. Just one command changes behaviour on it: veracore:sync-inventory uses it to decide whether the per-instance hour check applies. That is what lets the cron path respect your configured hour while a hand-run sync works at any hour.

--instance= ignores your settings on purpose

It is a diagnostic tool. Running it against a connection whose sync is deliberately paused will pull data anyway.


What is not on a schedule

ActionTrigger
Sending an order to VeraCoreThe fulfillment dispatch, when a sales order is ready and Enable Fulfillment is on
Pushing products to VeraCoreThe manual Push to VeraCore action on the Products tab
Announcing a purchase orderManual push, or automatically when a PO is approved if Auto-push Expected Arrivals is on

For the shape of the whole pipeline rather than its timetable, see How the VeraCore sync works.

Last verified: