> ## Documentation Index
> Fetch the complete documentation index at: https://ramps-docs-sync-20260320.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload customers via CSV file

> 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.




## OpenAPI

````yaml https://app.stainless.com/api/spec/documented/grid/openapi.documented.yml post /customers/bulk/csv
openapi: 3.1.0
info:
  title: Grid API
  description: >
    API for managing global payments on the open Money Grid. Built by
    Lightspark. See the full documentation at https://grid.lightspark.com/.
  version: '2025-10-13'
  contact:
    name: Lightspark Support
    email: support@lightspark.com
  license:
    name: Proprietary
    url: https://lightspark.com/terms
servers:
  - url: https://api.lightspark.com/grid/2025-10-13
    description: Production server
security:
  - BasicAuth: []
tags:
  - name: Platform Configuration
    description: >-
      Platform configuration endpoints for managing global settings. You can
      also configure these settings in the Grid dashboard.
  - name: Customers
    description: >-
      Customer management endpoints for creating and updating customer
      information
  - name: KYC/KYB Verifications
    description: >-
      Endpoints for Know Your Customer (KYC) and Know Your Business (KYB)
      verification, including managing beneficial owners and triggering
      verification for customers.
  - name: Documents
    description: >-
      Endpoints for uploading and managing verification documents for customers
      and beneficial owners. Supports KYC and KYB document requirements.
  - name: Internal Accounts
    description: >-
      Internal account management endpoints for creating and managing internal
      accounts
  - name: External Accounts
    description: >-
      External account management endpoints for creating and managing external
      bank accounts
  - name: Same-Currency Transfers
    description: >-
      Endpoints for transferring funds between internal and external accounts
      with the same currency
  - name: Cross-Currency Transfers
    description: Endpoints for creating and confirming quotes for cross-currency transfers
  - name: Transactions
    description: Endpoints for retrieving transaction information
  - name: Webhooks
    description: Webhook endpoints and configuration for receiving notifications
  - name: Invitations
    description: Endpoints for creating, claiming and managing UMA invitations
  - name: Sandbox
    description: Endpoints to trigger test cases in sandbox
  - name: API Tokens
    description: Endpoints to programmatically manage API tokens
  - name: Exchange Rates
    description: >-
      Endpoints for retrieving cached foreign exchange rates. Rates are cached
      for approximately 5 minutes and include platform-specific fees.
  - name: Discoveries
    description: >-
      Endpoints for discovering available payment rails, banks, and providers
      for a given country and currency corridor.
paths:
  /customers/bulk/csv:
    post:
      tags:
        - Customers
      summary: Upload customers via CSV file
      description: >
        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.
      operationId: uploadCustomersCsv
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: CSV file containing customer information
      responses:
        '202':
          description: CSV upload accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkCustomerImportJobAccepted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '500':
          description: Internal service error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error500'
      security:
        - BasicAuth: []
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import LightsparkGrid from '@lightsparkdev/grid';

            const client = new LightsparkGrid({
              username: process.env['GRID_CLIENT_ID'], // This is the default and can be omitted
              password: process.env['GRID_CLIENT_SECRET'], // This is the default and can be omitted
            });

            const response = await client.customers.bulk.uploadCsv({
              file: fs.createReadStream('path/to/file'),
            });

            console.log(response.jobId);
        - lang: Python
          source: |-
            import os
            from grid import LightsparkGrid

            client = LightsparkGrid(
                username=os.environ.get("GRID_CLIENT_ID"),  # This is the default and can be omitted
                password=os.environ.get("GRID_CLIENT_SECRET"),  # This is the default and can be omitted
            )
            response = client.customers.bulk.upload_csv(
                file=b"Example data",
            )
            print(response.job_id)
        - lang: Kotlin
          source: >-
            package com.lightspark.grid.example


            import com.lightspark.grid.client.LightsparkGridClient

            import com.lightspark.grid.client.okhttp.LightsparkGridOkHttpClient

            import com.lightspark.grid.models.customers.bulk.BulkUploadCsvParams

            import
            com.lightspark.grid.models.customers.bulk.BulkUploadCsvResponse

            import java.io.ByteArrayInputStream


            fun main() {
                val client: LightsparkGridClient = LightsparkGridOkHttpClient.fromEnv()

                val params: BulkUploadCsvParams = BulkUploadCsvParams.builder()
                    .file("Example data".byteInputStream())
                    .build()
                val response: BulkUploadCsvResponse = client.customers().bulk().uploadCsv(params)
            }
components:
  schemas:
    BulkCustomerImportJobAccepted:
      type: object
      required:
        - jobId
        - status
      properties:
        jobId:
          type: string
          description: Unique identifier for the bulk import job
          example: Job:019542f5-b3e7-1d02-0000-000000000006
        status:
          type: string
          enum:
            - PENDING
            - PROCESSING
    Error401:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 401
          description: HTTP status code
        code:
          type: string
          description: |
            | Error Code | Description |
            |------------|-------------|
            | UNAUTHORIZED | Issue with API credentials |
            | INVALID_SIGNATURE | Signature header is invalid |
          enum:
            - UNAUTHORIZED
            - INVALID_SIGNATURE
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
    Error500:
      type: object
      required:
        - message
        - status
        - code
      properties:
        status:
          type: integer
          enum:
            - 500
          description: HTTP status code
        code:
          type: string
          description: |
            | Error Code | Description |
            |------------|-------------|
            | GRID_SWITCH_ERROR | Grid switch error |
            | INTERNAL_ERROR | Internal server or UMA error |
          enum:
            - GRID_SWITCH_ERROR
            - INTERNAL_ERROR
        message:
          type: string
          description: Error message
        details:
          type: object
          description: Additional error details
          additionalProperties: true
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >-
        API token authentication using format `<api token id>:<api client
        secret>`

````