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.
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
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.