---
title: "Upload customers via CSV file"
method: POST
path: "/customers/bulk/csv"
tags: ["Customers"]
---

# Upload customers via CSV file

`POST /customers/bulk/csv`

Upload a CSV file containing customer information for bulk creation. The CSV file should follow
a specific format with required and optional columns based on customer type.

### CSV Format
The CSV file should have the following columns:

Required columns for all customers:
- umaAddress: The customer's UMA address (e.g., $john.doe@uma.domain.com)
- platformCustomerId: Your platform's unique identifier for the customer
- customerType: Either "INDIVIDUAL" or "BUSINESS"

Required columns for individual customers:
- fullName: Individual's full name
- birthDate: Date of birth in YYYY-MM-DD format
- addressLine1: Street address line 1
- city: City
- state: State/Province/Region
- postalCode: Postal/ZIP code
- country: Country code (ISO 3166-1 alpha-2)

Required columns for business customers:
- businessLegalName: Legal name of the business
- addressLine1: Street address line 1
- city: City
- state: State/Province/Region
- postalCode: Postal/ZIP code
- country: Country code (ISO 3166-1 alpha-2)

Optional columns for all customers:
- addressLine2: Street address line 2
- platformAccountId: Your platform's identifier for the bank account
- description: Optional description for the customer

Optional columns for individual customers:
- email: Customer's email address

Optional columns for business customers:
- businessRegistrationNumber: Business registration number
- businessTaxId: Tax identification number

### Example CSV
```csv
umaAddress,platformCustomerId,customerType,fullName,birthDate,addressLine1,city,state,postalCode,country,platformAccountId,businessLegalName
john.doe@uma.domain.com,customer123,INDIVIDUAL,John Doe,1990-01-15,123 Main St,San Francisco,CA,94105,US
acme@uma.domain.com,biz456,BUSINESS,,,400 Commerce Way,Austin,TX,78701,US
```

The upload process is asynchronous and will return a job ID that can be used to track progress.
You can monitor the job status using the `/customers/bulk/jobs/{jobId}` endpoint.

## Response `202`

CSV upload accepted for processing

- BulkCustomerImportJobAccepted
  - `jobId` string, required — Unique identifier for the bulk import job
  - `status` 'PENDING' | 'PROCESSING', required

## Other responses

- `401` — Unauthorized
- `500` — Internal service error

## Changes

- **2026-05-28** `d0bce562bffd` — 5 warning
  - added the new `REQUEST_ID_MISSING` enum value to the `code` response property for the response status `401`
  - added the new `WALLET_SIGNATURE_BODY_MISMATCH` enum value to the `code` response property for the response status `401`
  - added the new `WALLET_SIGNATURE_INVALID` enum value to the `code` response property for the response status `401`
  - added the new `WALLET_SIGNATURE_MALFORMED` enum value to the `code` response property for the response status `401`
  - …1 more
- **2026-03-03** `efe0d983985f` — 2 breaking, 10 info
  - the response's body type/format changed from ``/`` to `object`/`` for status `401`
  - the response's body type/format changed from ``/`` to `object`/`` for status `500`
  - removed `#/components/schemas/Error401_UNAUTHORIZED, #/components/schemas/Error401_INVALID_SIGNATURE` from the response body `oneOf` list for the response status `401`
  - removed `#/components/schemas/Error500_GRID_SWITCH_ERROR, #/components/schemas/Error500_INTERNAL_ERROR` from the response body `oneOf` list for the response status `500`
  - …8 more
- …earlier changes not shown

[Full history](https://skmtc.dev/lightsparkdev/apis/grid-api/changes/customers/bulk/csv/post.md)

---

[API](https://skmtc.dev/lightsparkdev/apis/grid-api.md) · [All operations](https://skmtc.dev/lightsparkdev/apis/grid-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lightsparkdev/grid-api/revisions/d0bce562bffd/schema)
