# Upsert a customer

Creates or updates (upserts) a customer with a specified ID.

If the customer already has an identifier within your system,
and you want to create a customer with a specified ID &mdash; use this operation to prevent duplicate customers.
For more information, see Prevent duplicate customers.

Endpoint: PUT /customers/{id}
Version: latest
Security: SecretApiKey, JWT

## Path parameters:

  - `id` (string, required)
    ID of the resource.

## Request fields (application/json):

  - `websiteId` (string)
    ID of the website.
A website is where an organization obtains a customer.
For more information, see [Obtain an organization ID and website ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
    Example: "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"

  - `paymentToken` (string)
    Write-only payment token.
If supplied, the token is converted into a payment instrument and set as the defaultPaymentInstrument value.
If both are supplied, the value of this property overrides the defaultPaymentInstrument value.
The token expires after first use.

  - `defaultPaymentInstrument` (object,null)

  - `preferredPayoutInstrumentId` (string,null)
    ID of the customer's preferred payment instrument for payouts.
    Example: "inst_0YVB8KPKNXCBR9EDX7JHSED75N"

  - `customFields` (object)
    Use custom fields to extend a resource scheme to include custom data that is not provided as a common field.
For more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields).

  - `primaryAddress` (any)
    Customer's primary address.

  - `isEddRequired` (boolean)
    Specifies if Enhanced Due Diligence (EDD) is enabled for this customer.
For more information, see [Enhanced Due Diligence](https://www.rebilly.com/docs/kyc-and-aml/edd/).

  - `locale` (string,null)
    Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.
    Example: "fr-FR"

  - `taxNumbers` (array,null)
    Tax numbers of the customer.

  - `taxNumbers.type` (string, required)
    Type of the tax number.
    Enum: "eu-vat", "other"

  - `taxNumbers.value` (string, required)
    Value of the tax number.
    Example: "GB980780684"

  - `taxNumbers.isDefault` (boolean)
    Determines if the tax number is selected as default to display on invoices.
    Example: true

  - `leadSource` (object)
    Lead source information.

  - `leadSource.medium` (string,null)
    Category of the lead source traffic.
For example, the medium could be organic search, Google ads, Display ads, and so on.

  - `leadSource.source` (string,null)
    Domain, platform, or channel from which the lead source originates.

  - `leadSource.campaign` (string,null)
    Campaign name of the lead source.

  - `leadSource.term` (string,null)
    Term associated with a lead source.

  - `leadSource.content` (string,null)
    Content contained in the lead source content.
For example, content could be graphics, video, and so on.

  - `leadSource.affiliate` (string,null)
    Individual or entity that is affiliated with the lead source.

  - `leadSource.subAffiliate` (string,null)
    Individual or entity that is associated with a lead source affiliate.
In other products, this field may also be referred to as sub ID or click ID in some.

  - `leadSource.salesAgent` (string,null)
    Name of the sales agent associated with the lead source.

  - `leadSource.clickId` (string,null)
    ID of the lead source click.
This value is passed in the ad click URL for tracking and campaign attribution.

  - `leadSource.path` (string,null)
    URL from which the lead source originates.

  - `leadSource.referrer` (string,null)
    Lead source [referrer URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer).
    Example: "https://www.rebilly.com"

  - `personId` (string,null)
    ID of the associated person.
    Example: "prs_0YV7DDSDD1C8DA64KHH2W33CPF"

  - `notificationEmails` (array)
    Additional email addresses for notification delivery.

## Response 200 fields (application/json):

  - `id` (string)
    ID of the customer.
    Example: "cus_0YV7DDSDD1C8DA64KHH2W33CPF"

  - `email` (string,null)
    Customer's email address.

  - `firstName` (string,null)
    Customer's first name.

  - `lastName` (string,null)
    Customer's last name.

  - `websiteId` (string)
    ID of the website.
A website is where an organization obtains a customer.
For more information, see [Obtain an organization ID and website ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
    Example: "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"

  - `defaultPaymentInstrument` (object,null)

  - `preferredPayoutInstrumentId` (string,null)
    ID of the customer's preferred payment instrument for payouts.
    Example: "inst_0YVB8KPKNXCBR9EDX7JHSED75N"

  - `createdTime` (string)
    Date and time when the resource is created.
This value is set automatically when the resource is created.

  - `updatedTime` (string)
    Date and time when the resource is updated.
This value is set automatically when the resource is updated.

  - `customFields` (object)
    Use custom fields to extend a resource scheme to include custom data that is not provided as a common field.
For more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields).

  - `primaryAddress` (any)
    Customer's primary address.

  - `company` (object,null)
    Company information that is associated with the customer's primary email address domain.

This is a paid feature, to enable it [contact Rebilly](https://www.rebilly.com/support/).

  - `company.name` (string,null)
    Name of the company.

  - `company.domain` (string)
    Website domain of the company.

  - `company.yearFounded` (number,null)
    Founding year of the company.

  - `company.industry` (string,null)
    Industry the company is associated with.

  - `company.employeesCount` (number,null)
    Number of employees in the company.

  - `company.country` (string,null)
    Country where the company is based.

  - `company.locality` (string,null)
    Locality or region where the company is based.

  - `company._links` (array)

  - `company._links.href` (string)
    Link URL.

  - `company._links.rel` (string)
    Type of link.
    Enum: "linkedin"

  - `averageValue` (object)
    Average customer value.

  - `averageValue.currency` (string)
    Merchant's reporting currency.

  - `averageValue.amount` (number)
    Average amount of approved payments in the merchant's reporting currency.

  - `averageValue.amountUsd` (number)
    Average approved payment amount in USD.

  - `paymentCount` (integer)
    Total number of approved payments made by the customer.
Payments are the result of sale or capture transactions.

  - `lastPaymentTime` (string,null)
    Date and time when the customer made their last approved payment.
Payments are the result of sale or capture transactions.

  - `lifetimeRevenue` (object)
    Customer's lifetime revenue.

  - `lifetimeRevenue.currency` (string)
    Merchant's reporting currency.

  - `lifetimeRevenue.amount` (number)
    Revenue amount in the merchant's reporting currency.

  - `lifetimeRevenue.amountUsd` (number)
    Revenue amount in USD.

  - `invoiceCount` (integer)
    Total number of invoices issued to the customer.
This value is auto-incrementing.
If this value is 0, the record relates to a lead.
A lead is a customer who has not made a payment yet.
If this value is greater than or equal to 1 the record relates to a customer.

  - `tags` (array)
    List of customer tags.

  - `tags.id` (string)
    ID of the tag.

  - `tags.name` (string, required)
    Unique name for the tag.
Tag names are not case-sensitive.
    Example: "New"

  - `tags.type` (string, required)
    Type of tag.
Tags of a specific type can only be assigned to corresponding entity types.
For example, you can only use customer tags on customers.
    Enum: "customer", "kyc-document", "aml-check"

  - `tags.createdTime` (string)
    Date and time when the resource is created.
This value is set automatically when the resource is created.

  - `tags.updatedTime` (string)
    Date and time when the resource is updated.
This value is set automatically when the resource is updated.

  - `tags._links` (array)
    Related links.

  - `tags._links.href` (string)
    Link URL.

  - `tags._links.rel` (string)
    Type of link.
    Enum: "self"

  - `revision` (integer)
    Number of times the customer's data has been modified.

Use this value when analyzing webhook data to determine if a change must take precedence over the current representation.

  - `isEddRequired` (boolean)
    Specifies if Enhanced Due Diligence (EDD) is enabled for this customer.
For more information, see [Enhanced Due Diligence](https://www.rebilly.com/docs/kyc-and-aml/edd/).

  - `hasFulfilledKyc` (boolean)
    Specifies if the customer has accepted and reviewed identity and address documents, or an accepted credit file document.

  - `organizationId` (string)
    Unique organization identifier.
An organization is an entity that represents a company.
For more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
    Example: "org_0YVDM8RC7GDADADSBSMW124JA8"

  - `locale` (string,null)
    Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.
    Example: "fr-FR"

  - `taxNumbers` (array,null)
    Tax numbers of the customer.

  - `taxNumbers.type` (string, required)
    Type of the tax number.
    Enum: "eu-vat", "other"

  - `taxNumbers.value` (string, required)
    Value of the tax number.
    Example: "GB980780684"

  - `taxNumbers.isDefault` (boolean)
    Determines if the tax number is selected as default to display on invoices.
    Example: true

  - `taxNumbers.isValid` (boolean,null)
    Determines if the tax number passed the EU official [VIES validation](https://ec.europa.eu/taxation_customs/vies/#/vat-validation).
    Example: true

  - `personId` (string,null)
    ID of the associated person.
    Example: "prs_0YV7DDSDD1C8DA64KHH2W33CPF"

  - `notificationEmails` (array)
    Additional email addresses for notification delivery.

  - `_links` (array)
    Related links.

  - `_links.href` (string)
    Link URL.

  - `_links.rel` (string)
    Type of link.
    Enum: "self", "attachments", "defaultPaymentInstrument", "leadSource", "website"

  - `_embedded` (object)
    Embedded objects that are requested using the expand query string parameter.

  - `_embedded.defaultPaymentInstrument` (object)

  - `_embedded.website` (object)

  - `_embedded.leadSource` (object)

## Response 201 fields (application/json):

  - `id` (string)
    ID of the customer.
    Example: "cus_0YV7DDSDD1C8DA64KHH2W33CPF"

  - `email` (string,null)
    Customer's email address.

  - `firstName` (string,null)
    Customer's first name.

  - `lastName` (string,null)
    Customer's last name.

  - `websiteId` (string)
    ID of the website.
A website is where an organization obtains a customer.
For more information, see [Obtain an organization ID and website ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
    Example: "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"

  - `defaultPaymentInstrument` (object,null)

  - `preferredPayoutInstrumentId` (string,null)
    ID of the customer's preferred payment instrument for payouts.
    Example: "inst_0YVB8KPKNXCBR9EDX7JHSED75N"

  - `createdTime` (string)
    Date and time when the resource is created.
This value is set automatically when the resource is created.

  - `updatedTime` (string)
    Date and time when the resource is updated.
This value is set automatically when the resource is updated.

  - `customFields` (object)
    Use custom fields to extend a resource scheme to include custom data that is not provided as a common field.
For more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields).

  - `primaryAddress` (any)
    Customer's primary address.

  - `company` (object,null)
    Company information that is associated with the customer's primary email address domain.

This is a paid feature, to enable it [contact Rebilly](https://www.rebilly.com/support/).

  - `company.name` (string,null)
    Name of the company.

  - `company.domain` (string)
    Website domain of the company.

  - `company.yearFounded` (number,null)
    Founding year of the company.

  - `company.industry` (string,null)
    Industry the company is associated with.

  - `company.employeesCount` (number,null)
    Number of employees in the company.

  - `company.country` (string,null)
    Country where the company is based.

  - `company.locality` (string,null)
    Locality or region where the company is based.

  - `company._links` (array)

  - `company._links.href` (string)
    Link URL.

  - `company._links.rel` (string)
    Type of link.
    Enum: "linkedin"

  - `averageValue` (object)
    Average customer value.

  - `averageValue.currency` (string)
    Merchant's reporting currency.

  - `averageValue.amount` (number)
    Average amount of approved payments in the merchant's reporting currency.

  - `averageValue.amountUsd` (number)
    Average approved payment amount in USD.

  - `paymentCount` (integer)
    Total number of approved payments made by the customer.
Payments are the result of sale or capture transactions.

  - `lastPaymentTime` (string,null)
    Date and time when the customer made their last approved payment.
Payments are the result of sale or capture transactions.

  - `lifetimeRevenue` (object)
    Customer's lifetime revenue.

  - `lifetimeRevenue.currency` (string)
    Merchant's reporting currency.

  - `lifetimeRevenue.amount` (number)
    Revenue amount in the merchant's reporting currency.

  - `lifetimeRevenue.amountUsd` (number)
    Revenue amount in USD.

  - `invoiceCount` (integer)
    Total number of invoices issued to the customer.
This value is auto-incrementing.
If this value is 0, the record relates to a lead.
A lead is a customer who has not made a payment yet.
If this value is greater than or equal to 1 the record relates to a customer.

  - `tags` (array)
    List of customer tags.

  - `tags.id` (string)
    ID of the tag.

  - `tags.name` (string, required)
    Unique name for the tag.
Tag names are not case-sensitive.
    Example: "New"

  - `tags.type` (string, required)
    Type of tag.
Tags of a specific type can only be assigned to corresponding entity types.
For example, you can only use customer tags on customers.
    Enum: "customer", "kyc-document", "aml-check"

  - `tags.createdTime` (string)
    Date and time when the resource is created.
This value is set automatically when the resource is created.

  - `tags.updatedTime` (string)
    Date and time when the resource is updated.
This value is set automatically when the resource is updated.

  - `tags._links` (array)
    Related links.

  - `tags._links.href` (string)
    Link URL.

  - `tags._links.rel` (string)
    Type of link.
    Enum: "self"

  - `revision` (integer)
    Number of times the customer's data has been modified.

Use this value when analyzing webhook data to determine if a change must take precedence over the current representation.

  - `isEddRequired` (boolean)
    Specifies if Enhanced Due Diligence (EDD) is enabled for this customer.
For more information, see [Enhanced Due Diligence](https://www.rebilly.com/docs/kyc-and-aml/edd/).

  - `hasFulfilledKyc` (boolean)
    Specifies if the customer has accepted and reviewed identity and address documents, or an accepted credit file document.

  - `organizationId` (string)
    Unique organization identifier.
An organization is an entity that represents a company.
For more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
    Example: "org_0YVDM8RC7GDADADSBSMW124JA8"

  - `locale` (string,null)
    Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.
    Example: "fr-FR"

  - `taxNumbers` (array,null)
    Tax numbers of the customer.

  - `taxNumbers.type` (string, required)
    Type of the tax number.
    Enum: "eu-vat", "other"

  - `taxNumbers.value` (string, required)
    Value of the tax number.
    Example: "GB980780684"

  - `taxNumbers.isDefault` (boolean)
    Determines if the tax number is selected as default to display on invoices.
    Example: true

  - `taxNumbers.isValid` (boolean,null)
    Determines if the tax number passed the EU official [VIES validation](https://ec.europa.eu/taxation_customs/vies/#/vat-validation).
    Example: true

  - `personId` (string,null)
    ID of the associated person.
    Example: "prs_0YV7DDSDD1C8DA64KHH2W33CPF"

  - `notificationEmails` (array)
    Additional email addresses for notification delivery.

  - `_links` (array)
    Related links.

  - `_links.href` (string)
    Link URL.

  - `_links.rel` (string)
    Type of link.
    Enum: "self", "attachments", "defaultPaymentInstrument", "leadSource", "website"

  - `_embedded` (object)
    Embedded objects that are requested using the expand query string parameter.

  - `_embedded.defaultPaymentInstrument` (object)

  - `_embedded.website` (object)

  - `_embedded.leadSource` (object)

## Response 401 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 403 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 409 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

## Response 422 fields (application/json):

  - `status` (integer)
    HTTP status code.

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.

  - `invalidFields` (array)
    Invalid field details.

  - `invalidFields.field` (string)
    Name of the field.
Dot notation is used for nested object field names.

  - `invalidFields.message` (string)
    Message field.

## Response 429 fields (application/json):

  - `type` (string)
    Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.
It should provide human-readable documentation for the problem type.
When this member is not present, its value is assumed to be "about:blank".
    Example: "about:blank"

  - `title` (string)
    Short, human-readable summary of the problem type.
Other than for the purposes of localization, this should not change from occurrence to occurrence of the problem.
    Example: "Rate Limit Exceeded"

  - `status` (integer)
    HTTP status code.

  - `detail` (string)
    Human-readable explanation that is specific to this occurrence of the problem.
    Example: "A request cannot be executed because the user has sent too many requests within a certain period of time"

  - `instance` (string)
    URI reference that identifies the specific occurrence of the problem.
It may or may not yield further information if dereferenced.


