Data Sources
A data source represents a system or feed that produces financial records — for example, your bank, your payment processor, or an internal ledger. Every record in End Close belongs to exactly one data source. Each data source has akey (a unique, immutable identifier you define) and a name (a human-readable label). You reference data sources by their key throughout the API.
Example
api. End Close also supports connecting data sources directly via Stripe, Snowflake, and CSV uploads through the dashboard.
A data source
key cannot be changed after creation. Choose a key that clearly identifies the system it represents.Records
A record is a single financial transaction or entry within a data source. Records are the core unit of reconciliation — End Close matches records from one data source against records from another. Every record requires:| Field | Description |
|---|---|
type_key | The key of the data source this record belongs to |
date | The date of the transaction (ISO 8601 format) |
amount | The monetary value |
direction | Either credit or debit |
description, an external_id (your own identifier for cross-referencing), and a metadata object for any additional structured data.
Example
Reconciliation status
Each record has astatus that tracks its reconciliation progress:
unreconciled— The record has not been matched. This is the default status when a record is created.partially_reconciled— The record has been matched, but not for its full amount.reconciled— The record has been fully matched against one or more records from another data source.
record.reconciled and record.reconciliation_overdue to react to status changes.
Property Definitions
Property definitions let you extend records with custom fields specific to a data source. For example, a Stripe data source might have acustomer_email property, while a bank feed might have a check_number property.
Each property definition is scoped to a single data source (identified by type_key) and includes:
| Field | Description |
|---|---|
key | A unique identifier for this property within the data source |
name | A human-readable label |
type | The data type: string, number, date, datetime, or boolean |
optional | Whether the property is required on records (defaults to true) |
Example
metadata field of each record. Defining property definitions allows End Close to validate and display these fields in the dashboard.
How reconciliation works
Reconciliation in End Close is configured through the dashboard. You create a reconciliation that links two sides of data sources (Side A and Side B), then define rules that control how records are matched across those sides. When a new record is created, End Close automatically runs it against the applicable reconciliation rules. If a match is found, both records are updated toreconciled (or partially_reconciled if the amounts don’t fully offset). If no match is found, the record stays unreconciled until a matching counterpart arrives.
You can monitor reconciliation results through the dashboard or by subscribing to webhook events.
