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

# Expensify API

Jentic publishes the only available OpenAPI specification for Expensify API, keeping it validated and agent-ready. Export expense reports, create reports and expenses, manage employees, and update policy configurations through a single Integration Server endpoint. All operations use a requestJobDescription JSON payload that specifies the job type (e.g., export, create, update) and parameters. Supports template-based exports, automated report creation, and policy rule management for enterprise expense workflows.

## For AI agents

Export expense reports, create expenses and reports, manage employee lists, and configure policies through Expensify's Integration Server endpoint.

## Scope

Does not process payments, issue cards, or handle accounting ledger entries - use for expense reporting, approval workflows, and policy management only.

## Capabilities

- Export expense reports in configurable formats using Freemarker templates
- Create expense entries programmatically with merchant, amount, and category details
- Generate expense reports from a list of transactions and submit for approval
- Synchronise employee rosters between HR systems and Expensify policies
- Update policy rules including approval workflows, categories, and tag hierarchies

## Use cases

### AI Agent Expense Export Automation

AI agents use the Expensify API through Jentic to export expense reports, check job statuses, and pull financial data without managing partner credentials directly. The agent searches Jentic for 'export expense reports', receives the /ExpensifyIntegrations endpoint schema with the required requestJobDescription payload structure, and executes. Jentic handles credential injection so the agent never sees raw partnerUserID or partnerUserSecret values.

Example prompt: Submit an export job for all approved reports from April 2026 using the /ExpensifyIntegrations endpoint with type 'file' and reportState 'APPROVED', then poll until the job completes and retrieve the download URL

### Expense Creation and Submission

Create individual expenses with merchant name, amount, currency, date, and category, then assemble them into reports for submission. The API accepts expense data via the create job type and assigns them to the specified employee's policy. Reports can be auto-submitted for approval once all required fields are populated.

Example prompt: Create three expense entries (hotel $250, taxi $45, dinner $78) for employee user@company.com with today's date, then generate a report named 'NYC Trip April 2026' containing all three

### Employee Policy Management

Synchronise employee rosters between HR systems and Expensify policies. Add new hires, remove departing employees, and update reporting hierarchies through the API. The update job type supports bulk employee list operations, enabling automated onboarding and offboarding workflows that keep Expensify in sync with the company directory.

Example prompt: Add three new employees to the 'Engineering' policy with their email addresses and set their approver to manager@company.com

### Template-Based Report Export

Export expense data in custom formats using Freemarker templates. Define output structure for CSV, JSON, or custom formats, then trigger exports filtered by date range, policy, report state, or employee. The export runs asynchronously - submit the job, poll for completion, then download the generated file from the returned URL.

Example prompt: Submit an export job with a Freemarker template that outputs merchant, amount, category, and date as CSV for all REIMBURSED reports in the 'Sales' policy from Q1 2026

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /ExpensifyIntegrations | Single endpoint for all operations via requestJobDescription payload |

## Key resources

- **Expense Reports** — Collections of expenses grouped for approval and reimbursement workflows
- **Expenses** — Individual expense entries with merchant, amount, category, and receipt data
- **Employees** — Employee records within policies with approval chains and permissions
- **Policies** — Company expense policies with categories, tags, and approval rules
- **Export Jobs** — Asynchronous export operations with template-based output formatting

## Why Jentic

- **Setup:** Wiring the Expensify API by hand means learning its partnerUserID and partnerUserSecret query credentials and hand-building the requestJobDescription payload the single integration endpoint expects. Through Jentic you install once, import Expensify from the API Directory, store the credentials once, and your agent calls it.
- **Permission scoping:** Expensify routes every action through one endpoint (POST /ExpensifyIntegrations) with the job type set in the request body, so scope the agent to the job types it needs, such as exporting reports. Job types you leave out, like creating expenses, stay unavailable unless you add them.
- **Credential handling:** Your Expensify partnerUserID and partnerUserSecret are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'export expense reports' or 'create an expense', and Jentic returns the /ExpensifyIntegrations operation with its requestJobDescription schema so the agent builds the right payload without browsing the reference docs.

## Related APIs

- **Brex API** — Brex manages corporate card spend directly while Expensify handles employee-submitted expense reports
- **Xero Accounting API** — Xero records expense data in the ledger while Expensify handles the submission and approval workflow
- **The Plaid API** — Plaid provides bank transaction data that can be matched against expense reports

## FAQ

### Why is there no official OpenAPI spec for Expensify API?

Expensify does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Expensify API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Expensify API use?

Expensify uses partner credentials - a partnerUserID and partnerUserSecret included in the requestJobDescription JSON payload on every request. Through Jentic, these credentials are stored encrypted in your Jentic One instance and injected into requests automatically - agents never handle raw partner secrets.

### How does the single-endpoint architecture work?

All Expensify API operations go through POST /ExpensifyIntegrations. The request body contains a requestJobDescription field specifying the operation type (e.g., 'file' for export, 'create' for new records). Parameters, filters, and templates are passed within this JSON structure. The response varies by job type - exports return a job ID for async polling, while creates return immediate confirmation.

### Can I export expense reports in custom formats with the Expensify API?

Yes. Set the type to 'file' in the requestJobDescription and provide a Freemarker template defining the output format. The template has access to report fields including merchant, amount, category, date, and policy. Exports run asynchronously - poll the returned job ID until status is 'complete', then download from the file URL.

### How do I export expense reports through the Expensify API via Jentic?

Search Jentic for 'export expense reports', then load the /ExpensifyIntegrations operation schema. Build the requestJobDescription with type 'file', specify reportState and date filters, and Jentic handles credential injection. Poll the job until complete, then retrieve the download URL. Install with pip install jentic and run it through Jentic One, the self-hosted execution layer.

### Can I add employees to an Expensify policy programmatically?

Yes. Use the requestJobDescription with type 'update' and command 'policyList' to manage employee rosters. Provide the policy ID, a list of employee email addresses, and their approval chain settings. This enables automated onboarding when new hires are added to HR systems.

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

Yes. Because Jentic One is self-hosted, you set the rules that decide which Expensify operations and credentials your agent may use. Every Expensify action runs through the single POST /ExpensifyIntegrations endpoint with the job type set in the request body, so you can scope the agent to only the job types it needs, such as exporting reports. Job types you leave out, like creating expenses or updating policy rosters, stay unavailable unless you add them.
