canonical: https://jentic.com/apis/app4legal.dev/app4legal

# App4legal LEXZUR Money API

The LEXZUR Money API (formerly App4Legal) gives legal-practice management teams a finance-focused interface covering accounts, analytic accounts, bank reconciliations, bills, credit notes, and client trust accounts. Operations support account import, reconciliation transaction loads, bill approval steps, and analytic account templates so accounting workflows specific to law firms can run programmatically. Authentication uses bearer tokens issued from the LEXZUR portal.

## For AI agents

Manage law-firm accounting in LEXZUR - list accounts, run bank reconciliations, update bills, and post credit notes - so an agent can keep the books up to date from outside the LEXZUR UI.

## Scope

Does not handle case management, court filings, or client communication - use for LEXZUR finance operations (accounts, bills, reconciliations, credit notes) only.

## Capabilities

- List and create accounts via /accounts and `/accounts/{id}`
- Bulk-import accounts using `/accounts/import` for migration scenarios
- Manage analytic accounts and reusable templates via /analytic-accounts and /analytic-account-templates
- Run bank reconciliations and load reconciliation transactions
- Update bill status and walk approval steps via `/bills/update-status/{id}`
- Post credit notes against client invoices
- Define and read bill custom fields for firm-specific data

## Use cases

### Bill Approval Workflow Automation

Move bills through firm approval steps without manual portal clicks by reading `/bills/get-approval-steps/{id}`, identifying the next required approver, and calling `/bills/update-status/{id}` once approval is recorded upstream. This is useful for firms that have approval logic in a separate system and want LEXZUR's status to reflect the source-of-truth automatically.

Example prompt: Fetch GET `/bills/get-approval-steps/{id}` for the bill, confirm the upstream approval, and call POST `/bills/update-status/{id}` to advance the bill to the next state

### Bank Reconciliation Sync

Pull bank transactions from the firm's bank feed and submit them to LEXZUR via `/bank-reconciliations/transactions`, then create a reconciliation entry via /bank-reconciliations and export the result via `/bank-reconciliations/export-excel/{id}` for the partner who needs an offline copy. This removes the manual CSV upload that finance teams typically run at month-end.

Example prompt: Submit transactions via POST `/bank-reconciliations/transactions`, create the reconciliation via POST /bank-reconciliations, and download the Excel export from `/bank-reconciliations/export-excel/{id}`

### Chart-of-Accounts Migration

Migrate accounts from a legacy practice-management system into LEXZUR by calling `/accounts/import` with a batch payload rather than creating accounts one at a time. This is the recommended path during firm consolidation or when standardising the chart of accounts across multiple offices, and the import endpoint reports per-row success or failure.

Example prompt: Read the legacy chart of accounts CSV, transform to the LEXZUR import schema, and POST to `/accounts/import` with the batch payload

### Credit Note Posting from Customer Service

Issue credit notes against client invoices in response to billing disputes by calling /credit-notes with the client ID, invoice reference, and amount. The agent can be wired into a CRM ticket flow so that when a partner approves a credit, LEXZUR is updated immediately rather than at the end of the day during manual close.

Example prompt: On approved credit ticket, call POST /credit-notes with client ID, invoice reference, and amount, then confirm by fetching the credit note ID

### Agent-Run Firm Accounting

Let an AI agent answer partner questions about firm finances by exposing LEXZUR Money operations through Jentic. The agent searches for the right operation, loads the schema, and executes, never holding the bearer token, which matters because LEXZUR tokens grant write access to firm bills and reconciliations.

Example prompt: Search Jentic for 'list bank reconciliations this month', load the GET /bank-reconciliations schema, and execute with the date filter from the partner's question

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/accounts` | List accounts |
| POST | `/accounts/import` | Bulk-import accounts |
| GET | `/bank-reconciliations` | List bank reconciliations |
| POST | `/bank-reconciliations/transactions` | Submit reconciliation transactions |
| GET | `/bills/get-approval-steps/{id}` | Get bill approval steps |
| POST | `/bills/update-status/{id}` | Update bill status |
| GET | `/credit-notes` | List credit notes |
| GET | `/clients/{id}/accounts` | List client trust accounts |

## Key resources

- **Accounts** — List, create, and bulk-import accounts in the chart of accounts
- **Analytic Accounts** — Manage analytic accounts and reusable templates for matter-level reporting
- **Bank Reconciliations** — Create reconciliations, load transactions, and export to Excel
- **Bills** — Update bill status and walk approval steps
- **Bill Custom Fields** — Define and read firm-specific custom fields on bills
- **Credit Notes** — Post credit notes against client invoices
- **Client Accounts** — Manage client trust account records

## Why Jentic

- **Setup:** Wiring the LEXZUR Money API by hand means learning its bearer auth and threading bill and client ids through its finance paths yourself. Through Jentic you install once, import the LEXZUR Money API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** LEXZUR puts bill and client ids in the URL path (`/bills/get-approval-steps/{id}`, `/clients/{id}/accounts`), so a rule can pin your agent to specific bills or client accounts. You choose the operations it may call, so writes like updating a bill status or importing accounts are not included unless you add them.
- **Credential handling:** Your LEXZUR bearer token 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 'update a bill status' or 'run a bank reconciliation', and Jentic returns the matching bills or bank-reconciliations operation with its input schema so the agent calls the right endpoint without studying the LEXZUR resource graph up front.

## Related APIs

- **Xero Accounting API** — Xero is a general-purpose accounting platform without legal-specific workflows
- **Buildium API** — Buildium covers property management accounting workflows that complement legal-firm accounting
- **AppFolio Stack API** — AppFolio handles property management bills and tenant accounting for verticals adjacent to legal

## FAQ

### What authentication does the LEXZUR Money API use?

Bearer token in the Authorization header. Tokens are issued from the LEXZUR portal. Through Jentic the bearer token is stored encrypted in the vault (your Jentic One instance) and never enters agent context - agents receive scoped access only.

### Can I update a bill's status through this API?

Yes. POST `/bills/update-status/{id}` advances the bill, and GET `/bills/get-approval-steps/{id}` returns the configured approval chain so you can confirm the next required approver before transitioning.

### What are the rate limits for the LEXZUR Money API?

The OpenAPI spec does not publish explicit rate limits. Limits are governed by your LEXZUR plan tier - contact the LEXZUR support team for your firm's quota before high-volume reconciliation imports.

### How do I run a bank reconciliation through Jentic?

Run pip install jentic, then search 'run a bank reconciliation in lexzur'. Jentic returns the bank-reconciliations operations with their input schemas - load the schema, submit the transactions, and execute. The agent never sees the bearer token.

### Can I bulk-import accounts during a migration?

Yes. POST `/accounts/import` accepts a batch payload and reports per-row success or failure. Use this rather than calling POST /accounts in a loop, both for performance and for the consolidated import diagnostics.

### What custom fields can I configure on bills?

Custom fields are defined via /bill-custom-fields and read via `/bill-custom-fields/{id}.` Once created, the fields appear on bill payloads so firm-specific metadata (matter type, billing partner, retainer reference) can be enforced through the API.

### Can I limit what my agent is allowed to do with the LEXZUR Money API?

Yes. Because you run your own self-hosted Jentic One instance, your rules decide which LEXZUR Money operations and credentials the agent may use. You choose the operations it can call, so writes such as updating a bill status via POST `/bills/update-status/{id}` or bulk-importing accounts via POST `/accounts/import` are excluded unless you add them. Since LEXZUR puts bill and client ids in the URL path, like `/bills/get-approval-steps/{id}` and `/clients/{id}/accounts`, a rule can pin the agent to specific bills or client trust accounts.
