Documentation Index
Fetch the complete documentation index at: https://developers.pleo.io/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Before you begin:
Constraints
- Maximum 100 items per API request
- Each item must include its accountingEntryId
- Supports both successful and failed updates
Steps
1. Collect Results
For each processed Export Item, ensure you have:
accountingEntryId (get this from /v3/export-items)
- result: successful or failed (get this from your AS/ERP system)
2. Build Update Payload
Successful item
{
"accountingEntryId": "ENTRY_ID",
"status": "successful",
"externalId": "JE-10452",
"externalUrl": "https://erp.example.com/journal/JE-10452"
}
Failed item
{
"accountingEntryId": "ENTRY_ID",
"status": "failed",
"failureReason": "Vendor not found in ERP",
"failureReasonType": "accounting_system_validation_failure"
}
3. Batch Items
Group items into batches of up to 100:
batches = chunk(items, 100)
4. Send Request
API Endpoint: PUT v3/export-jobs/{jobId}/items
Example parameters:
- jobId:
8eb648ab-464b-42a0-ba17-eda703657e33
- accountingEntryId:
59540ed2-0d68-4e36-9e31-58223975d9e9
- accountingEntryId:
6678bcee-c6a4-4b49-bb1e-8f9fd653d16c
- accountingEntryId:
9ea2ef81-4d73-460d-bbb4-ccf3da6f6f61
- accountingEntryId:
0c76ea71-aaaa-4ece-bb68-e1166ccaea04
curl -X PUT https://api.pleo.io/v3/export-jobs/8eb648ab-464b-42a0-ba17-eda703657e33/items \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '
[
{
"accountingEntryId": "59540ed2-0d68-4e36-9e31-58223975d9e9",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-1234",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "6678bcee-c6a4-4b49-bb1e-8f9fd653d16c",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-5678",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "9ea2ef81-4d73-460d-bbb4-ccf3da6f6f61",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-9012",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "0c76ea71-aaaa-4ece-bb68-e1166ccaea04",
"status": "failed",
"exportedAt": "2026-04-22T10:08:56Z",
"failureReason": "Receipt corrupt",
"failureReasonType": "receipt_conversion_failure",
}
]'
curl --request PUT \
-u "pls_cb0b832ea4ae4e3da96bc1188d60be24_41d579:" \
-H "Accept: application/json;charset=UTF-8" \
-H "Content-Type: application/json" \
"https://external.staging.pleo.io/v3/export-jobs/8eb648ab-464b-42a0-ba17-eda703657e33/items" \
-d '
[
{
"accountingEntryId": "59540ed2-0d68-4e36-9e31-58223975d9e9",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-1234",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "6678bcee-c6a4-4b49-bb1e-8f9fd653d16c",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-5678",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "9ea2ef81-4d73-460d-bbb4-ccf3da6f6f61",
"status": "successful",
"exportedAt": "2026-04-22T10:08:56Z",
"externalId": "ext-9012",
"externalUrl": "ext-url"
},
{
"accountingEntryId": "0c76ea71-aaaa-4ece-bb68-e1166ccaea04",
"status": "failed",
"exportedAt": "2026-04-22T10:08:56Z",
"failureReason": "Receipt corrupt",
"failureReasonType": "receipt_conversion_failure",
}
]
' | jq
5. Handle Response
if response.success:
markBatchAsCompleted()
else:
retryOrLogError()
- Retry on transient failures
- Do not duplicate already successful updates
Example Response
{
"data": [
{
"exportJobId": "f588b4db-a5cf-457c-b736-8b05dc6a2fdf",
"accountingEntryId": "59540ed2-0d68-4e36-9e31-58223975d9e9",
"status": "successful",
"externalId": "ext-1234",
"externalUrl": "ext-url",
"failureReasonType": null,
"failureReason": null,
"exportedAt": "2026-04-22T10:15:54Z"
},
{
"exportJobId": "f588b4db-a5cf-457c-b736-8b05dc6a2fdf",
"accountingEntryId": "6678bcee-c6a4-4b49-bb1e-8f9fd653d16c",
"status": "successful",
"externalId": "ext-5678",
"externalUrl": "ext-url",
"failureReasonType": null,
"failureReason": null,
"exportedAt": "2026-04-22T10:15:54Z"
},
{
"exportJobId": "f588b4db-a5cf-457c-b736-8b05dc6a2fdf",
"accountingEntryId": "9ea2ef81-4d73-460d-bbb4-ccf3da6f6f61",
"status": "successful",
"externalId": "ext-9012",
"externalUrl": "ext-url",
"failureReasonType": null,
"failureReason": null,
"exportedAt": "2026-04-22T10:15:54Z"
},
{
"exportJobId": "f588b4db-a5cf-457c-b736-8b05dc6a2fdf",
"accountingEntryId": "0c76ea71-aaaa-4ece-bb68-e1166ccaea04",
"status": "failed",
"externalId": null,
"externalUrl": null,
"failureReasonType": "receipt_conversion_failure",
"failureReason": "Receipt corrupt",
"exportedAt": null
}
],
"errors": []
}
Pleo Web App
Export Item results are recorded in Pleo but are not fully surfaced to users until the Export Job is completed.
Once the Export Job is finalised:
- Export status becomes visible in the Export queue
- Failed items and error details are available for review
Result
After completing this step:
- The job remains in the queue for auditing and compliance purposes
- In Pleo’s Web App:
- Export progress is accurately reflected in the Export queue tab
- Errors are visible to users for review and correction
What Comes Next?
this how-to is part of: