---
title: "Documents overview"
icon: "file-lines"
description: "Upload formats, timing, and JSON bank statement structure"
---

> For the complete documentation index, see [llms.txt](/llms.txt).

Upload supporting documents – bank statements, VAT returns, and company accounts – to support a customer's application.
Uploading documents helps your customers get faster decisions and larger offers.

<CardGroup cols={3}>
  <Card title="List documents" icon="code" href="/api-reference/documents/get-document-upload">
    `GET` /document_upload/\{customer_id\}/
  </Card>
  <Card title="Upload document" icon="code" href="/api-reference/documents/post-document-upload">
    `POST` /document_upload/\{customer_id\}/
  </Card>
  <Card title="Upload bank statement" icon="code" href="/api-reference/documents/post-bank-statements">
    `POST` /bank_statements/\{customer_id\}/
  </Card>
</CardGroup>

## Essentials

<Steps>
  <Step title="Upload before requesting offers">
    Upload all available documents **before** calling `GET /offers/` or `GET /login_link/`.
    This enables faster automated decisions, more instant approvals, and larger offers.
  </Step>
  <Step title="Use the right format">
    PDFs for most documents (bank statements, accounts, VAT returns).
    JSON only for Open Banking bank statement data.
    Non-PDF files take longer to process.
  </Step>
  <Step title="Check upload status">
    `GET /document_upload/{customer_id}/` returns document status and any `reject_reason` if a document wasn't accepted.
  </Step>
</Steps>

<Warning>
Only send one bank account per request/file.
Uploading the same file twice returns an error.
</Warning>

## Reference

<AccordionGroup>
  <Accordion title="Request format">
    Documents are uploaded as `multipart/form-data` with two parts:
    - The document file
    - The document type (`bank_statement`, `vat_returns`, `company_accounts`)
  </Accordion>
  <Accordion title="JSON bank statement format">
    For Open Banking data, the JSON must include:

    **Mandatory `accountInfo` fields:**
    - `accountNumber`, `sortCode`, `accountHolder`
    - `currency`, `bankName`

    **Mandatory transaction fields:**
    - `transactionDate`, `description`, `amount`, `runningBalance`

    For each transaction you can provide `startingBalance` and `closingBalance` (the account balance immediately before and after that transaction) instead of `runningBalance`.

    **Preferred fields:**
    - Account type (business or personal)
    - Period (earliest and latest transaction dates)
  </Accordion>
  <Accordion title="Checking upload status response">
    `GET /document_upload/{customer_id}/` returns two arrays:

    - **`data`** – List of documents with `type`, `id`, and `attributes` (may include `status` and `reject_reason`).
    - **`included`** – Additional info for bank statements (bank name, account number).
      Match using `relationships` field in `data`.
  </Accordion>
</AccordionGroup>
