Browse the API reference

Preview Reconciling Item

post/extensions/roboledger/{graph_id}/operations/preview-reconciling-item

Part of Extensions: RoboLedger.

Read what changed on a reconciling item — an event whose source-system payload changed after it was posted (list them with list-event-blocks is_reconciling_item=true). Returns the posted entries against the accepted payload, the per-account net difference, which disposition applies by default, and anything blocking the others. Writes nothing. Run this before resolve-reconciling-item and agree the treatment with the user — restate moves prior months' figures, catch_up does not.

Idempotency: supply an Idempotency-Key header to make safe retries; replays within 24 hours return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.

Authentication

Authenticate in any one of these ways — not all of them:

  • API key in the X-API-Key header.
  • Bearer token in the Authorization header.

Path parameters

NameTypeDescription
graph_idrequiredstringGraph Id

Header parameters

NameTypeDescription
Idempotency-KeyoptionalstringIdempotency-Key

Request body

Required, application/json.

FieldTypeDescription
event_idrequiredstring

Event id (evt_ prefixed) to inspect

Example request

curl
curl -X POST "https://api.robosystems.ai/extensions/roboledger/{graph_id}/operations/preview-reconciling-item" \
  -H "X-API-Key: $ROBOSYSTEMS_API_KEY" \
  -H "Idempotency-Key: <Idempotency-Key>" \
  -H "Content-Type: application/json" \
  -d '{
  "event_id": "string"
}'

Responses

200 Successful Response

FieldTypeDescription
operationrequiredstring

Kebab-case operation name

operationIdrequiredstring

op_-prefixed ULID for audit and SSE correlation

statusrequiredstring

Operation lifecycle state

One of: completed, pending, failed

resultoptionalReconcilingItemPlan

Command-specific result payload

ReconcilingItemPlan fields
FieldTypeDescription
event_idrequiredstring
external_idoptionalstring
sourcerequiredstring
event_typerequiredstring
event_statusrequiredstring
drift_detected_atoptionalstring (date-time)

When the sync first saw this difference

default_dispositionrequiredstring

What resolve would do with no disposition given: restate while every affected period is open and nothing blocks it, catch_up otherwise.

One of: restate, catch_up, acknowledge

default_posting_dateoptionalstring (date)

Where a catch-up entry would land by default

affected_posting_datesoptionalstring (date)[]

Posting dates of the event's entries

closed_periodsoptionalstring[]

Names of closed periods the event's entries sit in

prior_entriesoptionalReconcilingItemEntrySummary[]

One entry on either side of the comparison.

ReconcilingItemEntrySummary fields
FieldTypeDescription
entry_idoptionalstring

Entry id; null for the accepted side, which is not posted yet

external_idoptionalstring
posting_dateoptionalstring (date)
memooptionalstring
statusoptionalstring

Entry status; null on the accepted side

total_debitoptionalinteger

Default: 0

total_creditoptionalinteger

Default: 0

accepted_entriesoptionalReconcilingItemEntrySummary[]

One entry on either side of the comparison.

ReconcilingItemEntrySummary fields
FieldTypeDescription
entry_idoptionalstring

Entry id; null for the accepted side, which is not posted yet

external_idoptionalstring
posting_dateoptionalstring (date)
memooptionalstring
statusoptionalstring

Entry status; null on the accepted side

total_debitoptionalinteger

Default: 0

total_creditoptionalinteger

Default: 0

deltaoptionalReconcilingItemDeltaLine[]

Per-account net change; empty when none

ReconcilingItemDeltaLine fields
FieldTypeDescription
element_idoptionalstring

CoA element id; null when the account is unmapped

element_external_idoptionalstring

Source-system account id, when the line carried one

element_codeoptionalstring

Account code

element_nameoptionalstring

Account name

prior_netrequiredinteger

Net of the posted entries, debit-positive

accepted_netrequiredinteger

Net of the new payload, debit-positive

deltarequiredinteger

accepted_net - prior_net

no_gl_effectoptionalboolean

The change moves no money — a memo or reference edit. catch_up posts nothing; restate still regenerates so the entries carry the new text.

Default: false

restate_blockersoptionalstring[]

Why restate is unavailable, if it is: a closed period, an entry that was reversed or is not posted, or entries from elsewhere sharing this event's transaction.

unmapped_element_external_idsoptionalstring[]

Accounts in the new payload with no mapping in this graph. Both dispositions that write need them mapped first.

atrequiredstring

ISO-8601 UTC timestamp

createdByoptionalstring

User ID that initiated the operation (null for legacy callers)

idempotentReplayoptionalboolean

True when this envelope came from the idempotency cache — the underlying command did not execute again. False on fresh executions.

Default: false

StatusMeaning
400Invalid request
401Authentication required
403Access denied
404Resource not found
409Idempotency-Key conflict — key reused with different body
422Validation error
429Rate limit exceeded
500Internal server error