Skip to main content
POST
/
reconciliation_exceptions
Create a reconciliation exception
curl --request POST \
  --url https://api.endclose.com/v1/reconciliation_exceptions \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "reconciliation_id": "<string>",
  "data_stream_id": "<string>",
  "title": "<string>",
  "description": "<string>",
  "status": "open"
}
'
{
  "reconciliation_id": 123,
  "data_stream_id": 123,
  "title": "<string>",
  "id": 123,
  "reconciliation_name": "<string>",
  "data_stream_name": "<string>",
  "data_stream_key": "<string>",
  "description": "<string>",
  "status": "open",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "opened_at": "2023-11-07T05:31:56Z",
  "closed_at": "2023-11-07T05:31:56Z",
  "assignees": [
    {
      "id": 123,
      "workos_user_id": "<string>"
    }
  ],
  "decimal_places": 2,
  "aggregates": {
    "record_count": 123,
    "total_amount": 123,
    "debit_count": 123,
    "debit_sum": 123,
    "credit_count": 123,
    "credit_sum": 123,
    "avg_age_days": 123,
    "oldest_at": "2023-11-07T05:31:56Z",
    "newest_at": "2023-11-07T05:31:56Z"
  },
  "filtered_aggregates": {
    "record_count": 123,
    "total_amount": 123,
    "debit_count": 123,
    "debit_sum": 123,
    "credit_count": 123,
    "credit_sum": 123,
    "avg_age_days": 123,
    "oldest_at": "2023-11-07T05:31:56Z",
    "newest_at": "2023-11-07T05:31:56Z"
  },
  "comments": [
    {
      "id": 123,
      "body": "<string>",
      "author_workos_id": "<string>",
      "mentions": [
        123
      ],
      "created_at": "2023-11-07T05:31:56Z"
    }
  ],
  "investigation": {
    "id": 123,
    "status": "<string>",
    "recommendation_text": "<string>",
    "confidence_score": 123,
    "candidate_records_searched": 123,
    "suggested_record_ids": [
      123
    ],
    "filter_params": {},
    "completed_at": "2023-11-07T05:31:56Z",
    "created_at": "2023-11-07T05:31:56Z"
  },
  "investigation_sessions": [
    {
      "id": 123,
      "status": "<string>",
      "recommendation_text": "<string>",
      "confidence_score": 123,
      "candidate_records_searched": 123,
      "suggested_record_ids": [
        123
      ],
      "filter_params": {},
      "completed_at": "2023-11-07T05:31:56Z",
      "created_at": "2023-11-07T05:31:56Z"
    }
  ]
}

Authorizations

X-API-KEY
string
header
required

Body

application/json
reconciliation_id
string
required

Reconciliation the exception belongs to

data_stream_id
string
required

Data stream the exception is scoped to. Must belong to the reconciliation.

title
string
description
string
status
enum<string>
default:open
Available options:
open,
investigating,
dismissed,
resolved

Response

Exception created

A reconciliation exception represents unmatched overdue records that need human attention. Exceptions are scoped to a (reconciliation, data_stream) tuple and managed by the sweeper job — record membership is computed on read from the set of unmatched records whose overdue_at has passed.

reconciliation_id
integer
required

The reconciliation this exception belongs to

data_stream_id
integer
required

The data stream this exception is scoped to

title
string
required
id
integer
reconciliation_name
string

Name of the parent reconciliation

data_stream_name
string

Human-readable name of the scoped data stream

data_stream_key
string

Immutable key of the scoped data stream

description
string
status
enum<string>
default:open
Available options:
open,
investigating,
dismissed,
resolved
created_at
string<date-time>
updated_at
string<date-time>
opened_at
string<date-time> | null

When the exception most recently transitioned into an open state. Distinct from created_at so reopening is tracked cleanly.

closed_at
string<date-time> | null

When the exception most recently transitioned into a resolved or dismissed state. Cleared on reopen.

assignees
object[]
decimal_places
integer
default:2

Number of decimal places (2 for USD)

aggregates
object

Whole-exception aggregates over the current unmatched overdue slice.

filtered_aggregates
object

Aggregates restricted to the filter query parameters. Equals aggregates when no filter is supplied. Only present on the show response.

comments
object[]

Comments on this exception, oldest first

investigation
object

The most recent agent investigation session for this exception, if any.

investigation_sessions
object[]

Up to the five most recent investigation sessions, newest first. Exceptions may accumulate multiple sessions as the overdue set evolves.