---
title: "Upload documents"
method: POST
path: "/uploads"
tags: ["Documents"]
---

# Upload documents

`POST /uploads`

## Request

- Base URL: `https://api.app.lastaccountingcompany.com/portal`
- URL: `https://api.app.lastaccountingcompany.com/portal/uploads`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/docs/uploads/post.ts> (a function with typed inputs; its response is checked against the schema)

Uploads receipts, purchase invoices, contracts, or bank statements for ingestion into the books. Multipart form; repeat the `files` part for multiple files (the singular part name `file` is also accepted). Limits: 20 files and 25 MB per request. Requires a write-scoped key.

## Request body `multipart/form-data`

- object
  - `files` string[], required: The file parts. Repeat the `files` part per file.
  - `customer_id` string: Target company. Optional for API keys.
  - `message` string: Free-text note for the accounting agent.
  - `submission_id` string: Client-chosen id grouping the files into one submission.
  - `dump_kind` 'receipt' | 'invoice' | 'contract': What kind of documents these are.
  - `source` string: Upload source label.

## Response `200`

Upload result.

- PortalUploadResponse: Result of a document upload, including per-file outcomes.

## Other responses

- `401`: Missing or invalid bearer token.
- `403`: Insufficient scope or role — e.g. a read-scoped key on a mutating method, or an API key on an admin/approver-only endpoint.

---

[API](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api.md) - [All operations](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lastaccountingcompany/apis/lac-customer-api/revisions/52e277b4f031?raw)
