Skip to main content

Sync Inventory Reconciliation Period Entries

POST 

/api/ledger/reconciliation/inventory/period-entries/sync

Push the pushable postings of one transaction type and period to the accounting provider.

Not yet available to API tokens

This endpoint currently requires session authentication; Personal Access Token scope support is in progress.

The entry ids are resolved SERVER-SIDE from the same population the drill-down lists, using the same eligibility rule that stamps can_sync on each row — so a client never has to fetch hundreds of entries just to filter them, and can never request a push the server would decline.

Send entry_ids to push an explicit selection; the selection is still intersected with what is genuinely pushable. Omit entry_ids to push the whole concept, narrowed by status when a filter is active — the count shown to a user and the set acted on must describe the same postings.

The push runs in the background: the response returns a tracked job id to follow, plus an honest eligible/excluded split. When nothing is eligible, eligible_count is 0 and tracked_job_log_id is null — no job is dispatched.

Requires the accounting.sync permission. Authenticate with a Personal Access Token.

type (optional, string, max 64) — narrows the push to ONE ledger type inside concept, matching the per-type rows the reconciliation table renders when a concept's split is complete (e.g. concept=fba + type=fba_shipments). Omit it to push every posting in the concept for the period. Without it a row displayed as FBA Shipments would push every FBA posting in the period.

status accepts synced, stale, awaiting, excluded or untied. Use stale to re-push the postings the provider already holds that have changed in SKU since — this updates the existing provider journals in place rather than creating new ones.

When nothing is eligible to push, the request does not stop there: it starts a provider GL refresh instead and returns that job's id. A posting can already be synced while the reconciliation still shows a Check B difference, because the provider column is served from the local GL cache and only a provider pull refreshes it. In that case the response carries refreshed_provider: true and eligible_count: 0, and the returned tracked_job_log_id tracks the refresh rather than a push.

Request

Responses

OK

Response Headers
    Content-Type