---
title: "Upload a CSV to start a bulk import"
method: POST
path: "/v1/invoices/imports"
tags: ["Invoice Imports"]
---

# Upload a CSV to start a bulk import

`POST /v1/invoices/imports`

Starts a bulk invoice import. The request is `multipart/form-data` with a single required `file` part carrying the CSV (max 5 MiB, up to 1000 rows), e.g. `curl -F "file=@july-invoices.csv"`. The response carries the new batch plus the detected column headers for the mapping step and a duplicate-upload warning. (The file part is described here rather than as a schema: the swag pipeline cannot attach the §10-required example to a binary multipart property.)

## Response `201`

Created

- object — Standard response containing data and its metadata if any
  - `data` StartImportResponseDTO
    - `created_at` string
    - `created_by` string
    - `created_rows` integer
    - `detected_headers` string[]
    - `duplicate` boolean
    - `error_rows` integer
    - `failed_rows` integer
    - `id` string
    - `organization_id` string
    - `ready_rows` integer
    - `send_mode` 'draft' | 'create_and_send'
    - `source_filename` string
    - `status` 'pending' | 'validating' | 'ready' | 'creating' | 'completed' | 'failed'
    - `total_rows` integer
    - `updated_at` string
  - `has_more` boolean

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `500` — Internal Server Error

---

[API](https://skmtc.net/paymongo/apis/paymongo-api.md) · [All operations](https://skmtc.net/paymongo/apis/paymongo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/paymongo/paymongo-api/versions/c18f9a027b2c/schema)
