Supergood | Expensify API
Programmatically access Expensify expenses, receipts, reports, approvals, corporate card data, and reimbursements with a stable REST API. Supergood builds and operates production-grade, unofficial Expensify integrations so your team can automate finance workflows without heavy custom engineering.
Plain English: Expensify is expense management and corporate card software that scans receipts, categorizes spend, routes approvals, and reimburses employees while syncing to accounting platforms. An unofficial API lets you pull expenses, receipts, reports, policies, users, and card transactions—and push new expenses, submit/approve reports, attach receipts, and trigger reimbursements.
For a tech company integrating with Expensify, this means you can ingest real-time spend data to power analytics, enrich CRM and ERP records with expense context, automate approvals from your product, reconcile corporate card transactions, and sync approved totals to accounting (e.g., QuickBooks, Xero, NetSuite). You can also create cash expenses from other data sources, attach receipt images, enforce policy logic, and keep finance, payroll, and procurement systems in lockstep.
What is Expensify?
Expensify (https://www.expensify.com/) is a cloud platform for expense reporting and corporate spend management. Teams use Expensify to scan receipts, auto-categorize transactions, manage approval workflows, reimburse employees, and export to accounting systems. Admins configure policies, categories, tags, rules, and approval chains; employees submit reports containing reimbursable expenses and corporate card transactions.
Core product areas include:
- Expenses & Receipts (cash expenses, card-linked transactions, receipt OCR/SmartScan, mileage, per diem)
- Reports & Approvals (report submission, multi-step approvals, comments, audit trail)
- Corporate Cards (card assignment, transaction feeds, reconciliation, receipt matching)
- Policies & Controls (categories, tags, rules, spend limits, GL mappings, tax handling)
- Reimbursements & Exports (ACH reimbursements, accounting sync to QuickBooks, Xero, NetSuite)
Common data entities:
- Organizations, Policies, Roles/Permissions (Admins, Approvers, Employees, Accountants)
- Users (profile, email, role, default policy)
- Expenses (amount, currency, date, merchant, category, tags, attendees, reimbursable/billable)
- Receipts (images, OCR metadata, currency, total, tax, merchant)
- Reports (status, approver chain, totals, currencies, submitter)
- Corporate Cards (card accounts, assignments, limits)
- Card Transactions (amount, merchant, date, posted date, matched expense, reconciliation status)
- Reimbursements (method, status, settlement reference)
The Expensify Integration Challenge
Finance and operations teams rely on Expensify daily, but turning portal-based workflows into API-driven automation can be tricky:
- Policy-aware data: Categories, tags, rules, and approval chains are policy-specific and role-scoped, so objects look different per user/policy.
- Export-first workflows: Official data exports and job-based endpoints often prioritize report exports over granular, real-time object CRUD—making bi-directional automation harder.
- Receipts & uploads: OCR/SmartScan, large image files, and retries for document processing require careful handling and reconciliation to expenses.
- Corporate card complexity: Transaction feeds, mapping to employees, and matching rules can differ across issuers; real-time matching and reconciliation need consistent IDs and statuses.
- Authentication & security: SSO/MFA, rotating sessions, and consent flows complicate headless automation.
- Pricing/entitlements: Some capabilities may require specific plans or roles; automation must respect permissions and rate/usage constraints.
How Supergood Creates Expensify APIs
Supergood reverse-engineers authenticated browser flows and network interactions to deliver a resilient API endpoint layer for your Expensify tenant.
- Handles username/password, SSO/OAuth, and MFA (SMS, email, TOTP) securely
- Maintains session continuity with automated refresh and change detection
- Normalizes responses so you can integrate once and rely on consistent objects across modules
- Aligns with customer entitlements and role-based permissions to ensure compliant access
Use Cases
Expense & Receipt Data Sync
- Mirror expenses and receipts into your data warehouse or ERP
- Normalize merchants, categories, tags, and currencies for analytics
- Keep OCR fields, tax, and exchange rates consistent across systems
Approvals & Report Automation
- Create and submit reports from your app workflows
- Drive multi-level approvals or auto-approve under thresholds
- Post comments and notify stakeholders on status changes
Corporate Card Reconciliation
- Pull card transactions, match to expenses, and surface anomalies
- Enforce receipt capture SLAs and escalate exceptions
- Reconcile posted vs. pending transactions and detect duplicates
Reimbursements & Accounting Sync
- Trigger reimbursements for approved reports
- Export GL-coded expenses to accounting (e.g., QuickBooks, Xero, NetSuite)
- Maintain audit trails with attachments and approval artifacts
Available Endpoints
Authentication
POST /sessions: Establish a session using credentials. Supergood manages MFA (SMS, email, TOTP) and SSO/OAuth when enabled. Returns a short-lived auth token maintained by the platform.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/sessions \
--header 'Authorization: Basic <Base64 encoded token>' \
--header 'Content-Type: application/json' \
--data '{
"username": "[email protected]",
"password": "<password>",
"mfa": { "type": "totp", "code": "123456" }
}'
Example response
{
"authToken": "eyJhbGciOi...",
"expiresIn": 3600,
"user": {
"id": "usr_exp_729c10",
"name": "AP Specialist",
"entitlements": ["expenses", "reports", "policies", "cards", "reimbursements"]
}
}
POST /sessions/refresh: Refresh an existing token to keep sessions uninterrupted.
Expenses
GET /expenses: List expenses with filters and summary details.
Query parameters
- policyId: string
- reportId: string
- userId or userEmail: string
- merchant: string (partial match)
- categoryId: string
- reimbursable: true | false
- dateFrom, dateTo: ISO 8601 dates
- updatedFrom, updatedTo: ISO 8601 timestamps
- status: unreported | in_report | submitted | approved | reimbursed
- page, pageSize: integers for pagination
Example response
{
"items": [
{
"expenseId": "exp_91af20",
"date": "2026-01-18",
"merchant": "Delta Air Lines",
"amount": 428.15,
"currency": "USD",
"reimbursable": true,
"billable": false,
"category": {"id": "cat_travel_air", "name": "Airfare"},
"tags": [{"id": "tag_dept_sales", "name": "Sales"}],
"policyId": "pol_2f9a3e",
"reportId": "rpt_6d210b",
"status": "submitted",
"receipt": {
"fileName": "delta_428_15.jpg",
"downloadUrl": "https://signed.cdn.supergood.ai/receipts/rct_7b3c1a",
"ocr": {"total": 428.15, "tax": 0.00, "merchant": "DELTA AIR LINES"}
},
"createdBy": {"id": "usr_exp_02c1f9", "email": "[email protected]"},
"createdAt": "2026-01-18T16:22:03Z",
"updatedAt": "2026-01-19T09:51:44Z"
}
],
"page": 1,
"pageSize": 50,
"total": 1
}
POST /expenses: Create a cash expense and optionally attach a receipt.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/expenses \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"userEmail": "[email protected]",
"policyId": "pol_2f9a3e",
"date": "2026-01-24",
"merchant": "Uber",
"amount": 18.90,
"currency": "USD",
"reimbursable": true,
"billable": false,
"categoryId": "cat_travel_local",
"tagIds": ["tag_dept_sales"],
"comment": "Client meeting downtown",
"attendees": ["[email protected]"],
"receipt": {"uploadToken": "upl_08ab73", "fileName": "uber_1890.png"}
}'
Example response
{
"expenseId": "exp_b0f912",
"status": "unreported",
"createdAt": "2026-01-24T21:05:11Z"
}
Reports
POST /reports: Create a report with selected expenses and optionally submit.
curl --request POST \
--url https://api.supergood.ai/integrations/<integration_id>/reports \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"title": "January Travel - Rep A",
"policyId": "pol_2f9a3e",
"ownerEmail": "[email protected]",
"expenseIds": ["exp_91af20", "exp_b0f912"],
"submit": true,
"comment": "All receipts attached."
}'
Example response
{
"reportId": "rpt_72da01",
"number": 1542,
"status": "submitted",
"total": 447.05,
"currency": "USD",
"createdAt": "2026-01-24T21:07:44Z"
}
Approvals
PATCH /reports/{reportId}/status: Approve, reject, submit, or reopen a report with audit comments.
curl --request PATCH \
--url https://api.supergood.ai/integrations/<integration_id>/reports/rpt_72da01/status \
--header 'Authorization: Bearer <authToken>' \
--header 'Content-Type: application/json' \
--data '{
"action": "approve",
"approverEmail": "[email protected]",
"comment": "Approved under travel policy limits."
}'
Example response
{
"reportId": "rpt_72da01",
"status": "approved",
"approvedBy": {"email": "[email protected]"},
"approvedAt": "2026-01-25T09:12:02Z"
}
Technical Specifications
- Authentication: Username/password with MFA (SMS, email, TOTP) and SSO/OAuth where enabled; supports service accounts or customer-managed credentials
- Response format: JSON with consistent resource schemas and pagination across modules
- Rate limits: Tuned for enterprise throughput while honoring customer entitlements and usage controls
- Session management: Automatic reauth and cookie/session rotation with health checks
- Data freshness: Near real-time retrieval of expenses, reports, receipts, policies, cards, and reimbursements
- Security: Encrypted transport, scoped tokens, and audit logging; respects Expensify role-based permissions
- Webhooks: Optional asynchronous delivery for long-running workflows (e.g., receipt OCR completion, approvals)
Performance Characteristics
- Latency: Sub-second responses for list/detail queries under normal load
- Throughput: Designed for high-volume expense/report sync and approval processing
- Reliability: Retry logic, backoff, and idempotency keys minimize duplicate actions and missed uploads
- Adaptation: Continuous monitoring for UI/API changes with rapid adapter updates
Getting Started
- Schedule Integration Assessment
Book a 30-minute session to confirm your modules, licensing, and authentication model.
- Supergood Builds and Validates Your API
We deliver a hardened Expensify adapter tailored to your workflows and entitlements.
- Deploy with Monitoring
Go live with continuous monitoring and automatic adjustments as Expensify evolves.
Frequently Asked Questions
Q: Which Expensify modules can this integration cover?
Supergood supports workflows across commonly used modules such as Expenses & Receipts (cash, mileage, per diem), Reports & Approvals, Corporate Cards (feeds, matching), and Reimbursements/Exports, subject to your licensing and entitlements. We scope coverage during integration assessment.
Q: How are MFA and SSO handled for automation?
We support username/password + MFA (SMS, email, TOTP) and can operate behind SSO/OAuth when enabled. Sessions are refreshed automatically with secure challenge handling.
Q: Can you sync approved expenses to our accounting system?
Yes. We normalize categories, tags, taxes, and GL mappings to match your ERP/accounting schema and deliver updates via webhooks or polling while complying with rate and permission constraints. We commonly integrate with QuickBooks, Xero, and NetSuite.
Q: Are approvals and reimbursements supported?
Yes. We can submit reports, drive approvals (including multi-step chains), capture audit comments, and trigger reimbursements where enabled. Receipt uploads use signed URLs with checksum validation.
Related Integrations
Intralinks API - Programmatically access the Intralinks VDR with Supergood
Ready to automate your Expensify workflows?
Supergood can have your Expensify integration live in days with no ongoing engineering maintenance.