canonical: https://jentic.com/apis/endclose.com/endclose

# End Close API

The End Close API reconciles financial records against bank account balances and surfaces the unmatched items a team must clear to close the books. It ingests transaction records through configurable data streams, applies reconciliation rules that match records automatically, and tracks each leftover item as a reconciliation exception with findings and a review trail. Bank accounts and their balances are managed directly, and reconciliation agents can be configured and run to work through matches and exceptions. Authentication uses an API key sent in the X-API-KEY header, and the surface spans data streams, records, reconciliations, rules, matches, exceptions, bank accounts, and agents.

## For AI agents

Reconcile transaction records against bank balances in End Close: ingest records through data streams, run reconciliation rules to match them, and work the resulting exceptions, matches, and agent runs.

## Scope

Does not handle payment processing, invoicing, or tax filing. Use for reconciling records against bank balances and closing the books only.

## Capabilities

- Ingest transaction records into configurable data streams via /data_streams and /records, including bulk loads through `/records/bulk`
- Match records automatically by defining reconciliation rules under /reconciliation_rules and running reconciliations
- Surface and clear unmatched items as reconciliation exceptions, writing findings and reading the review via `/reconciliation_exceptions/{id}/findings` and /review
- Track bank account balances by creating or updating them under /bank_account_balances, including bulk balance updates
- Monitor data stream ingestion health through `/data_streams/{key}/health` and inspect individual stream operations
- Configure and run reconciliation agents under /agents, list their runs, and attach input files for a run

## Use cases

### AI agent month-end reconciliation

An AI finance assistant uses Jentic to discover the End Close operations it needs without browsing docs, then drives a close: it loads the month's transaction records, runs the reconciliation that matches them against bank balances, and hands back the exceptions a human still needs to decide. The agent never holds the raw API key, because Jentic injects it at call time.

Example prompt: Search Jentic for 'reconcile records against bank balances', create a data stream with POST /data_streams, bulk load records via POST `/records/bulk`, run a reconciliation with POST /reconciliations, then list open items from GET /reconciliation_exceptions

### Automated bank reconciliation

Finance teams match a ledger of transaction records against the balances reported by their bank accounts and want the matching to run without manual tie-outs. End Close ingests the records, applies reconciliation rules that pair them to balances, and leaves only the unmatched items for review. Progress can be polled so a workflow knows when matching has settled.

Example prompt: Create a reconciliation with POST /reconciliations, add matching logic with POST /reconciliation_rules, then read GET `/reconciliations/{id}/agent_status` to confirm the matching run is complete

### Exception resolution workflow

Every reconciliation leaves a residue of items that did not match, and these exceptions are where accountants spend their time. End Close lists each exception, lets a reviewer write findings against its lines, and exposes the resulting review so the decision is recorded and auditable. This turns a spreadsheet chase into a structured queue an agent or analyst can work down.

Example prompt: List exceptions with GET /reconciliation_exceptions, open one with GET `/reconciliation_exceptions/{id}`, write findings with PUT `/reconciliation_exceptions/{id}/findings`, then read GET `/reconciliation_exceptions/{id}/review`

### Continuous transaction ingestion

Before any reconciliation can run, transaction data has to land reliably. End Close models each feed as a data stream with its own property definitions, accepts records one at a time or in bulk, and reports an ingestion health signal so a pipeline can tell a healthy feed from a stalled one. File imports are tracked per stream with their own retry and cancel controls.

Example prompt: Create a data stream with POST /data_streams, confirm it is healthy with GET `/data_streams/{key}/health`, then bulk create records with POST `/records/bulk`

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/data_streams` | Create a data stream |
| POST | `/records/bulk` | Bulk create records |
| POST | `/reconciliations` | Create a reconciliation |
| POST | `/reconciliation_rules` | Create a reconciliation rule |
| GET | `/reconciliation_exceptions` | List reconciliation exceptions |
| PUT | `/reconciliation_exceptions/{id}/findings` | Write findings for an exception's lines |
| POST | `/bank_account_balances` | Create or update a bank account balance |
| POST | `/agents/{id}/runs` | Run an agent |

## Key resources

- **Data Streams** — Create and configure the feeds that ingest transaction records, with property definitions, ingestion health, and per-stream file imports
- **Records** — Load transaction records individually or in bulk and track the status of bulk requests
- **Reconciliations** — Run reconciliations, define matching rules, and read matches, stories, and agent status
- **Reconciliation Exceptions** — Work the unmatched items: list exceptions, write findings for their lines, and read the review
- **Bank Accounts** — Manage bank accounts and record their balances, with bulk balance creation and updates
- **Agents** — Configure reconciliation agents, run them, list runs, and attach input files

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 47 / 100
- **Maturity:** Foundational
- **Dimensions:**
  - Foundational Compliance: 44 / 100
  - Developer Experience & Jentic Compatibility: 62 / 100
  - AI-Readiness & Agent Experience: 28 / 100
  - Agent Usability: 89 / 100
  - Security: 50 / 100
  - AI Discoverability: 77 / 100
- **View full report:** https://jentic.com/apis/endclose.com/endclose/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring the End Close API by hand means managing its X-API-KEY header, modeling data streams for your records, and building the reconciliation and exception polling loop yourself. Through Jentic you install once, import End Close from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** End Close puts each resource id in the URL path, such as `/reconciliations/{id}`, `/data_streams/{key}`, and `/bank_accounts/{id}`, so a rule can pin your agent to the reconciliation and ingestion operations it needs. You choose the operations it may call, so destructive ones like deleting a reconciliation rule or a bank account are not included unless you add them.
- **Credential handling:** Your End Close API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'reconcile records against bank balances' or 'resolve a reconciliation exception', and Jentic returns the matching End Close operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Altoviz API** — General accounting API covering ledgers and financial records rather than a dedicated reconciliation engine
- **Bkper** — Ledger and bookkeeping API for recording and querying double-entry transactions
- **Plaid API** — Pulls bank account balances and transaction feeds that can be reconciled downstream

## FAQ

### What authentication does the End Close API use?

The End Close API authenticates with an API key sent in the X-API-KEY request header, per its OpenAPI spec. When you call it through Jentic, the key is stored encrypted by your own Jentic One instance and injected at execution time, so it never enters the agent's prompt, logs, or context.

### Can I resolve reconciliation exceptions with the End Close API?

Yes. List the open items with GET /reconciliation_exceptions, open one with GET `/reconciliation_exceptions/{id}`, write findings for its lines with PUT `/reconciliation_exceptions/{id}/findings`, and read the resulting review with GET `/reconciliation_exceptions/{id}/review.` That gives an agent a structured queue to work down rather than a free-form spreadsheet.

### Can the End Close API match records automatically?

Yes. Define the matching logic as reconciliation rules with POST /reconciliation_rules, then run a reconciliation with POST /reconciliations so the rules pair records to bank balances and leave only the unmatched items as exceptions. You can poll progress with GET `/reconciliations/{id}/agent_status.`

### What are the rate limits for the End Close API?

The OpenAPI spec does not specify rate limits for the End Close API. Check the End Close documentation at https://www.endclose.com/docs for current limits, and have your agent retry with backoff when the API signals that it is being throttled.

### How do I run a month-end reconciliation with the End Close API through Jentic?

Search Jentic for 'reconcile records against bank balances' to load the End Close operation with its input schema, create a data stream, bulk load the period's records with POST `/records/bulk`, then run a reconciliation and read its agent status. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the End Close API?

Yes. Because you run Jentic One yourself, you decide which End Close operations the agent may call. Write a rule that permits listing and reading reconciliations and writing exception findings, and leave out destructive operations such as deleting a data stream or a bank account, so the agent can close the books without being able to erase them, and every call it makes is logged.
