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 runs | How often | What it does |
|---|---|---|
| Tracking (Dynamic Report) | Hourly, on the hour | Requests a Dynamic Report from VeraCore, polls until it is ready, and applies the tracking numbers and freight it returns |
| Order detail sync | Hourly, at :13 past | Pulls current status, ship dates, and shipment detail for orders at VeraCore |
| Catalogue sync | Hourly, at :13 past | Pulls the Offer catalogue and runs the match ladder over unmapped offers |
| Expected arrival reconciliation | Hourly, at :13 past | Checks sent announcements against the warehouse and updates their status |
| Inventory mirror | Wakes hourly, runs once a day at your configured hour (default 02:00) | Walks every Offer, records balances, and writes the ledger diff |
| Facility discovery | Daily | Discovers VeraCore facilities from the inventory feed so they can be mapped |
| Ledger prune | Daily at 03:30 | Drops inventory-change rows past your retention window |
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:
- The sync schedule — pausing it on the Sync settings tab stops every automatic job for the connection. Manual Sync Now actions still work.
- The capability switch for that entity.
| Job | Capability that gates it |
|---|---|
| Tracking | Import from VeraCore → Tracking |
| Order detail sync | Import from VeraCore → Tracking (runs only when automatic sync is enabled on the connection) |
| Catalogue sync | Import from VeraCore → Products |
| Inventory mirror | Import from VeraCore → Inventory (and the Enable Inventory Sync toggle) |
| Facility discovery | Import from VeraCore → Inventory |
| Expected arrival reconciliation | No capability switch — only the sync schedule and the connection's automatic sync |
| Ledger prune | No capability switch — only the sync schedule and the connection's automatic sync |
| Sending orders | Send to VeraCore → Orders (and Enable Fulfillment) |
| Pushing products | Send 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.
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:
| Tab | Button |
|---|---|
| Products | Sync — pulls the catalogue and re-runs matching |
| Inventory | Sync — mirrors balances now, regardless of your configured hour |
| Orders | Sync — refreshes order status |
| Expected Arrivals | Sync — reconciles announcements |
| Warehouse Mappings | Sync — 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.
| Command | What it does |
|---|---|
veracore:sync-inventory | Mirror inventory balances and write ledger diffs |
veracore:sync-products | Sync the offer catalogue and auto-match unmapped offers |
veracore:sync-warehouses | Discover VeraCore facilities from the inventory feed |
veracore:sync-expected-arrivals | Reconcile sent expected arrivals against the warehouse |
veracore:prune-inventory-changes | Prune ledger rows past the retention window |
veracore:update-tracking | Dispatch the tracking job for each tenant |
veracore:fetch-tracking | Request and poll a Dynamic Report inline. Takes --non-interactive to skip prompts for automation |
veracore:backfill-shipping-cost-lines | Re-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 purposeIt is a diagnostic tool. Running it against a connection whose sync is deliberately paused will pull data anyway.
What is not on a schedule
| Action | Trigger |
|---|---|
| Sending an order to VeraCore | The fulfillment dispatch, when a sales order is ready and Enable Fulfillment is on |
| Pushing products to VeraCore | The manual Push to VeraCore action on the Products tab |
| Announcing a purchase order | Manual 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.