# Creating and updating customers

Once you [define a customer](#defining-a-customer), you can [create a customer object](#creating-a-customer) and then [associate the object with checkouts](https://docs.digitalriver.com/digital-river-api/integration-options/checkouts/creating-checkouts/using-the-checkout-identifier#registered-checkouts-or-invoices). Once the object is created, you can [save one or more payment sources](https://docs.digitalriver.com/digital-river-api/payments/payment-sources/using-the-source-identifier#attaching-sources-to-customers) to a customer as well as [set a customer's default payment source](#default-payment-source).

![](https://334437993-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqH4RJfLVLuHPXuJyTZ%2F-Mbb5CkcKO4DnLiRo-St%2F-Mbb6a-KkodgBTztQvuN%2FCustomer-object.png?alt=media\&token=7bfa888f-eded-4612-9c48-5280db0abb8d)

## Defining a customer

The following provides guidance on how to define a customer. For complete specifications, refer to the [Checkouts API](https://app.gitbook.com/s/x8fSFzVR3sg0TsNWwwVz/checkouts) reference documentation.

### Unique identifier

A customers `id` must be forty characters or less in length. Anything longer and a `400 Bad Request` with a `code` of `invalid_parameter` is returned.

We recommend that a customer's identifier be identical in both your and our systems.

If you don't provide us an `id` value in the create customer request, we generate one for you and return it in the response.

### Email

The `email` parameter represents a customer's email address. You can create multiple customers in your account that contain identical `email` values.

### Shipping address

You can use `shipping` to store a customer's `name`, `phone`, `email`, `organization`, basic ship to `address`, and detailed ship to `additionalAddressInfo`.

### Tax identifiers and certificates

Every customer can store one or more [tax identifiers](https://docs.digitalriver.com/digital-river-api/setting-tax-related-attributes#tax-identifiers) and [tax certificates](https://docs.digitalriver.com/digital-river-api/setting-tax-related-attributes#tax-certificates).

### Locale

A customer's `locale` is used to [localize invoices and credit memos](https://docs.digitalriver.com/digital-river-api/integration-options/checkouts/creating-checkouts/designating-a-locale).

### Customer type

A customer's `type` allows you to [differentiate between business and individual customers](https://docs.digitalriver.com/digital-river-api/setting-tax-related-attributes#setting-the-customer-type).

### Enabling a customer

If you set a customer's `enabled` flag to `false`, then any attempts to create orders that reference this customer will fail. You should only set `enabled` to `false` when you want to block a customer from placing orders. For example, you may decide this is necessary when a customer has a history of fraudulent behavior.

### Default payment source

The `defaultSourceId` should reference a [source](https://docs.digitalriver.com/digital-river-api/payments/payment-sources) that customers have indicated is their default payment instrument.

For more information, refer to [setting the default payment source](https://docs.digitalriver.com/digital-river-api/payments/payment-sources/using-the-source-identifier#setting-the-default-payment-source) on the [Managing sources](https://docs.digitalriver.com/digital-river-api/payments/payment-sources/using-the-source-identifier) page.

### Request to be forgotten

When you [update customer](https://app.gitbook.com/s/x8fSFzVR3sg0TsNWwwVz/customers#customers-id-1) requests, you can use `requestToBeForgotten` to instruct Digital River to delete a customer's data from our system.

For more information, refer to the [Recording a customer's request to be forgotten](https://docs.digitalriver.com/digital-river-api/administration/dashboard/customers/removing-a-customers-personal-information) page.

## Creating a customer

The process of creating and updating a customer is similar. In a [create customer request](https://www.digitalriver.com/docs/digital-river-api-reference/#operation/createCustomers), you can specify the object's unique identifier. However,  when [updating a customer](https://app.gitbook.com/s/x8fSFzVR3sg0TsNWwwVz/customers#customers-id-1), you must pass in this unique identifier as a path parameter.

Updating a customer's request also allows you to [record a customer's right to be forgotten](#request-to-be-forgotten).

The following `POST/customers` request specifies a unique `id`:

{% tabs %}
{% tab title="POST/customers" %}

```
curl --location --request POST 'https://api.digitalriver.com/customers' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_key>' \
--data-raw '{
  "id": "5823594806",
  "email": "jsmith@digitalriver.com",
  "shipping": {
    "address": {
      "line1": "10380 Bren Rd W",
      "line2": "string",
      "city": "Minnetonka",
      "postalCode": "55129",
      "state": "MN",
      "country": "US"
    },
    "name": "John Smith",
    "phone": "952-111-1111",
    "email": "jsmith@digitalriver.com",
    "organization": "Digital River"
  },
  "type": "individual",
  "metadata": {
    "coupon": "iOS"
  },
  "locale": "en_US",
  "enabled": true
}'
```

{% endtab %}
{% endtabs %}

A successful request returns a `201 Created` whose payload contains a customer object:

{% tabs %}
{% tab title="201 Created" %}

```javascript
{
    "id": "5823594809",
    "createdTime": "2020-05-06T22:28:01Z",
    "email": "jsmith@digitalriver.com",
    "shipping": {
        "address": {
            "line1": "10380 Bren Rd W",
            "city": "Minnetonka",
            "postalCode": "55129",
            "state": "MN",
            "country": "US"
        },
        "phone": "952-111-1111",
        "email": "jsmith@digitalriver.com"
    },
    "enabled": true,
    "requestToBeForgotten": false,
    "locale": "en_US",
    "type": "individual",
    "liveMode": false
}
```

{% endtab %}
{% endtabs %}

Once you create a customer, you can reference this object in [registered checkouts](https://docs.digitalriver.com/digital-river-api/integration-options/checkouts/creating-checkouts/using-the-checkout-identifier#registered-checkouts-or-invoices).
