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

# Create a customer

> Register a new customer record.

Creates a new customer keyed to a partner-supplied `externalId`. The
customer is created **Active** immediately — there's no pending state
for partner-created customers.

The only field you choose is the `externalId` that ties the customer
record back to your own system of record.

## Request body

<ParamField body="externalId" type="string" required>
  Your system's identifier for this customer (account number, MSISDN,
  user UUID, whatever you use internally). Must be unique across all
  customers on the deployment. The customer's `displayName` mirrors
  this value, so use something searchable.
</ParamField>

## Example

```bash theme={null}
curl -sf -X POST "$BASE/v1/customers" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "ext-ada-001"
  }'
```

## Response

`200 OK` returns the full [customer object](/customers/overview).

```json theme={null}
{
  "id": "42",
  "accountNo": "000000042",
  "externalId": "ext-ada-001",
  "status": "Active",
  "active": true,
  "officeId": "1",
  "officeName": "Head Office",
  "firstname": "ext-ada-001",
  "lastname": "Customer",
  "displayName": "ext-ada-001 Customer",
  "activationDate": "2026-05-25"
}
```

The `id` (string) is what most subsequent calls use, but you don't
have to keep it — every read and update endpoint on customers also
accepts your `externalId`:

* `GET /v1/customers?externalId=ext-ada-001` — point lookup
* `GET /v1/customers/external/ext-ada-001` — resource form (PUT,
  DELETE, `.../close` work too)
* `GET /v1/loans?customerExternalId=ext-ada-001` — that customer's loans
* `GET /v1/credit-scorecard/ext-ada-001` — scorecard with `totalOutstanding`

See [externalIds](/concepts/ids-dates-money#externalids) for the full
addressing convention.

## Errors

| Code               | When                                                 |
| ------------------ | ---------------------------------------------------- |
| `invalid_argument` | `externalId` missing or empty in the request body    |
| `aborted`          | A customer with the same `externalId` already exists |
