> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daya.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Customer

> Create a new customer under the authenticated merchant

## Overview

Create a customer record that can be referenced by `customer_id` in funding account, transfer, and USD virtual account requests. Customers are scoped to the authenticated merchant.

For an individual customer, create the customer record, complete tier 1 verification with [`POST /v1/customers/{id}/tier1-verification`](/api-reference/customers/submit-tier1-verification), then submit individual tier 2 KYC with [`POST /v1/customers/{id}/tier2-verification`](/api-reference/customers/submit-tier2-verification).

For a business or entity, create the customer record first, then submit tier 2 KYB with [`POST /v1/customers/{id}/tier2-verification`](/api-reference/customers/submit-tier2-verification) using `customer_type: "business"` and the business KYB fields. The `first_name` and `last_name` fields can be omitted for business customer records.

## Authentication

<ParamField header="X-Api-Key" type="string" required>
  Your merchant API key
</ParamField>

## Request Body

<ParamField body="email" type="string" required>
  Customer email address (must be valid)

  **Example:** `customer@example.com`

  <Note>
    Email is normalized to lowercase and trimmed before storage.
  </Note>
</ParamField>

<ParamField body="first_name" type="string">
  Customer first name (1–100 characters)

  **Example:** `John`
</ParamField>

<ParamField body="last_name" type="string">
  Customer last name (1–100 characters)

  **Example:** `Doe`
</ParamField>

## Request Example

<CodeGroup>
  ```json JSON theme={null}
  {
    "email": "customer@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
  ```

  ```bash cURL theme={null}
  curl --request POST \
    --url https://api.daya.co/v1/customers \
    --header 'X-Api-Key: YOUR_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
      "email": "customer@example.com",
      "first_name": "John",
      "last_name": "Doe"
    }'
  ```
</CodeGroup>

## Response

<ResponseField name="id" type="string" required>
  Unique customer identifier (UUID)
</ResponseField>

<ResponseField name="email" type="string" required>
  Customer email address
</ResponseField>

<ResponseField name="first_name" type="string">
  Customer first name
</ResponseField>

<ResponseField name="last_name" type="string">
  Customer last name
</ResponseField>

<ResponseField name="is_verified" type="boolean">
  Whether the customer has passed verification. `false` on creation.
</ResponseField>

<ResponseField name="tier_1_kyc_complete" type="boolean">
  Whether tier 1 KYC has been completed. `false` on creation.
</ResponseField>

<ResponseField name="tier_2_kyc_complete" type="boolean">
  Whether tier 2 KYC has been completed. `false` on creation.
</ResponseField>

<ResponseField name="capabilities" type="array">
  Customer capabilities and their current status. Empty on creation until verification starts.
</ResponseField>

<ResponseField name="rejection_reasons" type="array">
  Current blocking verification or capability issues. Empty on creation.
</ResponseField>

<ResponseField name="created_at" type="string" required>
  When the customer was created (ISO 8601 timestamp)
</ResponseField>

<ResponseField name="updated_at" type="string" required>
  When the customer was last updated (ISO 8601 timestamp)
</ResponseField>

### Success Response

<ResponseExample>
  ```json 201 Created theme={null}
  {
    "id": "650e8400-e29b-41d4-a716-446655440000",
    "email": "customer@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "is_verified": false,
    "tier_1_kyc_complete": false,
    "tier_2_kyc_complete": false,
    "capabilities": [],
    "rejection_reasons": [],
    "created_at": "2026-01-05T15:04:05Z",
    "updated_at": "2026-01-05T15:04:05Z"
  }
  ```
</ResponseExample>

## Error Responses

<ResponseExample>
  ```json 400 Bad Request - Validation failed theme={null}
  {
    "error": {
      "code": "VALIDATION_FAILED",
      "message": "Validation failed",
      "request_id": "550e8400-e29b-41d4-a716-446655440000",
      "validation": "email is required and must be a valid email address"
    }
  }
  ```

  ```json 409 Conflict - Duplicate email theme={null}
  {
    "error": {
      "code": "CONFLICT",
      "message": "Customer with this email already exists for this merchant",
      "request_id": "550e8400-e29b-41d4-a716-446655440000"
    }
  }
  ```
</ResponseExample>

## Notes

* Customers are scoped to the authenticated merchant — the same email can exist under different merchants.
* Once created, a customer can be referenced by `customer_id` in funding account requests.
* Business/entity customers use the same customer object and response shape as individual customers. Submit business KYB before creating a USD virtual account for a business beneficiary.
