# 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 — 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 value. If both are supplied, the value of this property overrides the value. The token expires after first use. - `defaultPaymentInstrument` (any) - `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 ## 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` (any) - `createdTime` (string) Date and time which is set automatically when the resource is created. - `updatedTime` (string) Date and time which updates 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 approved payment amount in 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 or transactions. - `lastPaymentTime` (string,null) Date and time of the customer's last approved payment. Payments are the result of or transactions. - `lifetimeRevenue` (object) Customer's lifetime revenue. - `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 , 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 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._links` (array) Related links. - `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 - `_embedded` (object) Embedded objects that are requested using the query string parameter. - `_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` (any) - `createdTime` (string) Date and time which is set automatically when the resource is created. - `updatedTime` (string) Date and time which updates 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 approved payment amount in 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 or transactions. - `lastPaymentTime` (string,null) Date and time of the customer's last approved payment. Payments are the result of or transactions. - `lifetimeRevenue` (object) Customer's lifetime revenue. - `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 , 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 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._links` (array) Related links. - `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 - `_embedded` (object) Embedded objects that are requested using the query string parameter. - `_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. Example: [{"field":"field1","message":"field1 is invalid"},{"field":"subObject.field2","message":"field2 is invalid"},{"field":"subObject.field2","message":"another error in the field2"}] - `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.