- Billing: issue sales, record purchases and manage customers, suppliers and products.
- Human Resources: query employees and payrolls, send attendance punches, configure labor rules, schedules and holidays, check schedule compliance and create leave requests.
- Accounting: query the chart of accounts and financial statements (also by cost center), manage cost centers and create draft journal entries.
- Inventory: query stock, movements, lots and alerts, record adjustments and transfer between branches.
- Projects: query projects with their financial summary, create them and link documents to them.
- Accounts receivable and payable: query outstanding balances, record or reverse customer collections and supplier payments, and create banks, petty cash funds and checkbooks.
- Pricing and promotions: query and sync price lists, and calculate promotions on a cart.
- Cash register: open and close the register with a cash count, record income and expenses, and query closings.
Base URL
https://api.filexpress.app/api/external/v2. Request and response bodies are JSON (Content-Type: application/json).
If your integration still uses the unversioned path, migrating only requires changing the base URL: endpoints, bodies, responses, permissions and API Key do not change.
Versioning
The External API is published by major version in the path prefix:Migrate to v2
v2 adds multi-currency, taxes by id and errors with a stable code. It only changes the endpoints listed below; the rest of your integration stays on/api/external/v1 and you can use both versions with the same API Key.
- Change the base URL of those endpoints to
https://api.filexpress.app/api/external/v2. - Add
tax_idsto eachproductsline (use[]if no tax applies). - In sales, calculate taxes, withholdings and income tax exactly: v2 rejects anything that does not match the server’s recalculation. See Taxes by id.
- If you will issue in a foreign currency, send
currency_code(andexchange_rateif you set your own rate). To query the active currencies and their rates before issuing, the integration also needs thecurrenciespermission; issuing only requiressalesorexpenses. - Handle errors by
codeinstead of themessagetext. See errors and codes.
currency_code and exchange_rate, and its amounts are always in the business’s base currency. Accounts receivable and accounts payable (v1) now return the document’s currency reference (currency_code, base_currency_code, exchange_rate, foreign_total, foreign_balance) without changing their amounts, which remain in the base currency.Try the API
Each endpoint has a page in the Interactive reference with a playground: you enter your API Key, fill in the parameters and run the real request from the browser. Each page includes code examples (cURL, JavaScript, Python and PHP) and examples of successful and error responses.Postman collection
If you prefer Postman, download the collection with all the endpoints (grouped by module, with sample bodies and saved responses) and its environment:- Collection: FileXpress-API-Externa.postman_collection.json
- Environment: FileXpress-API-Externa.postman_environment.json
api_key variable. Authentication is defined once in the collection and all requests inherit it. Requests are real: use an integration from the test environment.
Test environment
FileXpress does not use a different URL for testing: the environment is defined by the business the integration belongs to.Ask support for a business in the test environment
Create an integration in that business and use its API Key in your development and in the playground
When going to production, create the integration in the real business
Authentication
Every request must include the integration’s API Key in theX-API-Key header:
Data scope
An integration belongs to one business. All queries and writes are automatically limited to that business: an ID from another business returns404, just like a nonexistent one.
Get the branches (branch_id)
Many endpoints require the branch’s branch_id. This endpoint requires no permissions:
Permissions
Each integration can only use the endpoint groups assigned to it. If it calls one without permission, it receives403 with the required permission:
branches.write permission and those for HR, Accounting, Inventory, Projects, Accounts receivable/payable, Pricing and promotions and Cash register expose personal, salary and financial data, or move balances and stock. They are never granted by default, not even to existing integrations with full access: the business administrator must enable them one by one in External integrations.Response format
The HR, Accounting, Inventory, Projects, Accounts receivable and payable modules and the sales, purchases and branches endpoints respond:code to errors: { "status": false, "code": "currency_not_enabled", "message": "...", "errors": { } }. See v2 errors and codes.
Paginated lists
The lists of employees, journal entries, stock, movements, lots, transfers and projects are paginated (per_page; page to navigate) and return:
Dates and amounts
- Dates:
YYYY-MM-DD. Times:HH:MMin 24-hour format. - Amounts: decimal numbers with 2 places, in the business’s base currency. In v2, documents can be sent in another active currency (
currency_code); see API v2.
Status codes
Idempotency
Writes that move money or stock (collections, payments and their reversals, inventory adjustments and transfers, project creation, register opening, movements and closing) accept the optionalIdempotency-Key header. We recommend always sending it on those POST requests: if the network fails and you retry, the operation is not applied twice.
- The key is per integration and allows up to 100 characters (longer responds
422). Use a unique value per operation, for example a UUID or the document’s ID in your system. - Without the header, every request always runs.
Rate limit
Each integration has a requests-per-minute limit defined by FileXpress (100 by default). When exceeded, the API responds429:
Call log
Every call is recorded in FileXpress (endpoint, method, response code, duration and errors). The business administrator can review it in Integrations → Logs / Statistics, which makes it easier to diagnose integration problems.Check the connection
Working without requiring authentication. It also exists in v2 (GET /api/external/v2/health).