The shape of the file
The importer takes rows, not a file: the API receives parsed rows and validates each one. A CSV is therefore a client-side concern — the web app parses the text and posts rows. Column order does not matter, and the header is required. Each row needs:From the app
Customers → Import customers, choose a.csv, select Import. The result
panel reports how many rows were imported, how many were duplicates of existing
customers, and lists each rejected row with the line number to fix.
From the API
Notes
The import is partial by design. One bad line does not fail the file: valid
rows are stored, and each rejected row is reported with its 1-based position so
you can fix the source.
Rejected rows are not stored. A row either exists completely or not at all, so
a retry cannot produce a half-written customer.
row is a position in the submitted array, not a CSV line number. The web
app keeps the two in step and reports the line you can actually edit.