New to the Export API?
Export Workflow Guide
End-to-end walkthrough of the Export API integration model.
Integration Design
Rules and requirements for each part of an export integration.
Connect Pleo to a Custom API Integration
How to connect Pleo to route exports to your custom integration.
API Scopes
Required scopes:
export-jobs:write, export-jobs:read, export-items:read.OAuth Guide
End-to-end OAuth 2.0 workflow guide for Pleo integrations.
OAuth with Postman
How to configure Postman to authenticate using OAuth and call the Pleo API.
Standalone API Key Guide
End-to-end guide for authenticating with standalone API keys.
Standalone API Keys with Postman
How to make API calls using standalone API keys in Postman.
What Changes in Your Integration
The table below gives a quick overview of how each step maps from the Expenses API to the Export API.| Step | Before (Expenses API) | After (Export API) |
|---|---|---|
| Detect new exports | Poll GET /v1/expenses?status=QUEUED | Listen for v1.export.job-created webhook |
| Start a job | Not applicable | POST /v3/export-job-events with "event": "started" |
| Fetch items | GET /v1/expenses?status=QUEUED | GET /v3/export-jobs/{jobId}/items |
| Process export items | At integration’s discretion | Integration design guidelines and workflow guide |
| Update item status | PUT /v1/expenses with {"status": "EXPORTING"} | PUT /v3/export-jobs/{jobId}/items with granular statuses |
| Complete the export | PUT /v1/expenses with {"status": "EXPORTED"} | Update item statuses + POST /v3/export-job-events with "event": "completed" |
Detecting New Exports
Before:v1.export.job-created webhook event.
Starting a Job
Before: Not applicable. After: Create astarted event to claim the job before processing.
Fetching Export Items
Before:Processing Export Items
Before: At integration’s discretion. After: Pleo provides integration design guidelines and a dedicated workflow guide covering bookkeeping methods, accounts mapping, data mapping, attachments, and posting behaviour.Updating Item Status
Before:in_progress, successful, failed, or abandoned).
Completing the Export
Before:completed event.
Data Model Changes
The table below maps fields from theExpense model to their equivalents in the Export Item model.
—: field is not available in the Export Item model*: data is the same but represented differently. See the Export Item API reference for details.**: resolved entity relationship: the associated data is included directly, removing the need for additional API calls
Expense field | Export Item equivalent |
|---|---|
| id | accountingEntryId |
| employeeId | user.id |
| employeeCode | user.code |
| departmentId | team.id |
| performedAt | date |
| amountOriginal | — |
| amountSettled | amount * |
| note | note |
| type | type * |
| accountId | accountingEntryLines[].account.id |
| taxCodeId | accountingEntryLines[].tax.id |
| createdAt | date ** |
| updatedAt | date ** |
| deletedAt | — |
| tagIds[].id | accountingEntryLines[].tags[].id |
| tagIds[].tagGroupId | accountingEntryLines[].tags[].groupCode ** |
| receiptIds[] | files[] ** |
| settledExpenseIds[] | additionalInformation.reconciledEntries[] |
| status | — |
| supplier.CIF | supplier.taxIdentifier |
| supplier.documentNumber | — |
| cardTransaction.state | — |
| cardTransaction.authorizedAt | — |
| cardTransaction.settledAt | date |
| cardTransaction.reversedAt | — |
| cardTransaction.merchant.id | vendor.id |
| cardTransaction.merchant.name | vendor.name |
| lines[].amountSettled | accountingEntryLines[].lineAmount |
| lines[].accountId | accountingEntryLines[].account.id |
| lines[].taxCodeId | accountingEntryLines[].tax.id |
| lines[].tagIds[] | accountingEntryLines[].tags[].id |