Skip to main content
Fetching Export Item Data is the step where integrations retrieve the full accounting payload required for processing. This step operates on the items identified in the How to Retrieve Export Job Items for Processing article.

Prerequisites

Before you begin:

Steps (Data Layer)

1. Fetch Full Export Item Data

API Endpoint: GET /v3/export-items Example parameters: jobId: 8eb648ab-464b-42a0-ba17-eda703657e33 Once Export Items have been identified for the job, retrieve the full accounting payload for processing. The export-items endpoint returns all Export Items for the job, including:
  • transaction details
  • accountingEntryLines
  • supplier/vendor data
  • bookkeeping metadata
  • attachments
Each item must be processed individually using this payload. Example Pseudo:
items = fetchFullExportItems(jobId)

for item in items:
    process(item)

Example Request

curl -X GET "https://external.staging.pleo.io/v3/export-items?job_id=8eb648ab-464b-42a0-ba17-eda703657e33" \
  -H "Authorization: Bearer <access_token>"

Example Response

  {
      "companyId": "12abc3d4-e567-890e-1234-abc56e78fabc",
      "accountingEntryId": "59540ed2-0d68-4e36-9e31-58223975d9e9",
      "type": "card_purchase",
      "subType": null,
      "date": "2025-12-10T15:46:34Z",
      "amount": {
        "inSupplierCurrency": {
          "currency": "GBP",
          "value": 6366
        },
        "inWalletCurrency": {
          "currency": "GBP",
          "value": 6366
        }
      },
      "note": "Printer ink",
      "files": [
        {
          "url": "<string>",
          "type": "image/jpeg",
          "size": 13010
        }
      ],
      "supplier": {
        "code": "1340472473",
        "name": "Target",
        "categoryCode": "1000",
        "country": "GB",
        "account": null,
        "taxIdentifier": null
      },
      "user": {
        "id": "6b71f6bd-e83d-4d49-88ee-2b8cda2d57cf",
        "name": "Luke Richardson",
        "code": null
      },
      "team": {
        "id": "747aaf60-56c6-4b46-ad92-f8a0cb59cf8b",
        "code": "5678",
        "name": "Engineering"
      },
      "accountingEntryLines": [
        {
          "accountingEntryLineId": "0c76ea71-aaaa-4ece-bb68-e1166ccaea04",
          "lineAmount": {
            "inSupplierCurrency": {
              "currency": "GBP",
              "value": 6366
            },
            "inWalletCurrency": {
              "currency": "GBP",
              "value": 6366
            }
          },
          "netAmount": {
            "inSupplierCurrency": {
              "currency": "GBP",
              "value": 6366
            },
            "inWalletCurrency": {
              "currency": "GBP",
              "value": 6366
            }
          },
          "account": {
            "id": "7966c3ba-e4de-4574-8604-6cfa48d62cc8",
            "code": "6990000",
            "name": "Printing & Stationery",
            "identifier": "6990000"
          },
          "tax": {
            "id": "997d8526-5872-484d-ba07-c7a07e08e555",
            "code": "0001",
            "type": "inclusive",
            "amount": {
              "inSupplierCurrency": {
                "currency": "GBP",
                "value": 0
              },
              "inWalletCurrency": {
                "currency": "GBP",
                "value": 0
              }
            },
            "rate": 0.00
          },
          "tags": []
        }
      ],
      "additionalInformation": {
        "reconciliationId": "2500001",
        "reconciledEntries": null,
        "attendees": [],
        "invoiceInformation": null
      },
      "bookkeeping": {
        "method": "journal"
      },
      "vendor": {
        "id": "22e1f2c9-1360-4291-ab41-6b23dcea8888",
        "name": "TestVendor",
        "code": "acc1234",
        "externalId": "ext12345",
        "registrationNumber": "reg001234",
        "taxRegistrationNumber": "taxreg1234",
        "country": "UK",
        "defaultCurrency": "GBP"
      },
      "contraAccount": {
        "id": "993d664c-9b7c-4efc-a677-510e69200857",
        "code": "0876000",
        "name": "0876000_ChartAccounts",
        "identifier": "0876000"
      },
      "_links": {
        "web": {
          "exportItem": "https://app.staging.pleo.io/export/export-item/0c76ea71-aaaa-4ece-bb68-e1166ccaea04"
        }
      },
      "servicePeriod": null
    },
   # [other Export Items omitted for brevity]
   # [Pagination omitted for brevity]

2. Handle Pagination

Export Items may be returned across multiple pages.

Example Response

"pagination": {
  "hasNextPage": true,
  "endCursor": "<string>"
}
Example Pseudo:
items = []

do:
    response = fetchItems(cursor)
    items.append(response.data)
    cursor = response.pagination.endCursor
while response.pagination.hasNextPage

3. Validate Each Export Item

Before attempting to record an item in your Accounting System, validate that it has everything required to be processed. This check runs per item. A failure on one item does not block others. Two checks are required: Check 1: Required configurations are present Verify that all integration configurations needed to export this specific item exist (e.g. the journal is configured, required accounts are mapped). Check 2: Expense GL Account (Category) is present Verify that the item has an Expense GL Account assigned via accountingEntryLines[].account. If either check fails, do not attempt to record the item in the AS. Instead, mark it as failed immediately and move to the next item.
for item in items:
    if not hasRequiredConfigurations(item):
        failItem(item,                     
            failureReasonType = "missing_configuration",                                                              
            failureReason = "[Account/Journal X] missing: provide [X] in the configurations"
        )                                                                                                             
        continue                                                                                                      
                
    if not hasExpenseGLAccount(item):                                                                                 
        failItem(item,               
            failureReasonType = "missing_configuration",
            failureReason = "Account [X] missing: provide account [X] in the configurations"
        )                                                                                   
        continue                                                                                                      
                
    process(item)                                                                                                     

4. Handle Job Recovery

If your integration restarts or loses state, it must be able to resume processing safely. See: How to Retrieve Export Job Items for Processing

Result

After completing these steps:
  • All Export Items with full payloads for the job have been retrieved
  • Pagination has been fully resolved
  • The integration is ready to process items sequentially
  • The workflow remains resumable and consistent
  • Each item has been validated for required configurations and GL Account before AS processing begins

What Comes Next?

Up to this point, you’ve completed steps 1–4 of the Export Integration Workflow Guide. Step 5 moves processing from Pleo’s export workflow to your Accounting System or ERP, where Export Items are processed and recorded, as outlined in the AS/ERP Processing Workflow Guide. Once processing is complete, return to steps 6 and 7 of the Export Integration Workflow Guide to update the status of each Export Item and finalise the Export Job.
this how-to is part of:


FAQs

You’re getting a MISSING_CONTRA_ACCOUNTS error, because the Export API v3 requires a contra account to be configured for each entity’s default currency. If any entity’s default currency does not have a contra account mapped, calls to /v3/export-items will fail with this error.See How to Resolve MISSING_CONTRA_ACCOUNTS for steps to fix this.
You’re getting a null value for the bookkeeping field, because it’s only populated when the Vendor Tagging feature is enabled and a bookkeeping method has been assigned to the expense before it was queued. Without Vendor Tagging enabled, bookkeeping will always be null. This is expected behaviour, not an error.When bookkeeping is null, use the supplier field on the export item for bookkeeping purposes instead.See How to Enable Vendor-Based Bookkeeping for steps to enable it.