Skip to main content

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",
    }
  ]'

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: