See also the Braintree::Customer response object.

To update a customer, use its ID along with new attributes. The same validations apply as when creating a customer. Any attribute not passed will remain unchanged.

Ruby
Copy
Copied
result = Braintree::Customer.update(
  "a_customer_id", # id of customer to update
  :first_name => "New First Name",
  :last_name => "New Last Name"
)
if result.success?
  puts "customer successfully updated"
else
  p result.errors
end

If the customer can't be found, it will raise a Braintree::NotFoundError.

Arguments
id required, String

A string value representing an existing customer in your Vault.

Additional Parameters
:company String

Company name. 255 character maximum.

:credit_card

A credit or debit payment method.

:billing_address

A billing address associated with a specific credit card. The maximum number of addresses per customer is 50.

:company String

Company name. 255 character maximum.

:country_code_alpha2 String

The ISO 3166-1 alpha-2 country code specified in an address. The gateway only accepts specific alpha-2 values.

:country_code_alpha3 String

The ISO 3166-1 alpha-3 country code specified in an address. The gateway only accepts specific alpha-3 values.

:country_code_numeric String

The ISO 3166-1 numeric country code specified in an address. The gateway only accepts specific numeric values.

:country_name String

The country name specified in an address. We only accept specific country names.

:extended_address String

The extended address information—such as apartment or suite number. 255 character maximum.

:first_name String

The first name. 255 character maximum.

:last_name String

The last name. 255 character maximum.

:locality String

The locality/city. 255 character maximum.

:options

Optional values that can be passed with a request.

:update_existing bool

Update the billing address associated with the payment method token specified. Other payment methods associated with the same billing address will have their addresses updated, as well.

:postal_code String

The postal code. Postal code must be a string of 4-9 alphanumeric characters, optionally separated by a dash or a space. Spaces, hyphens, and all other special characters are ignored.

:region String

The state or province. 255 character maximum.

:street_address String

The credit card billing street address. 255 character maximum. Only required if using card verification when AVS rules are configured to require street address.

:billing_address_id String

The two-letter value for an address associated with a specific credit card. The maximum number of addresses per customer is 50.

:cardholder_name String

The name associated with the credit card. Must be less than or equal to 175 characters.

:cvv String

Typically requires PCI SAQ D compliance

We recommend using payment_method_nonce to avoid any PCI concerns with raw credit card data being present on your server.

A 3 or 4 digit card verification value assigned to a credit card. The CVV will never be stored in the gateway, but it can be provided with one-time requests to verify the card.

:expiration_date String

While we recommend using payment_method_nonce when updating raw credit card data, the expiration date can be updated directly without any PCI concerns as long as you do not store, process, or transmit the raw PAN or CVV.

The expiration date, formatted MM/YY or MM/YYYY. May be used instead of expiration_month and expiration_year.

:expiration_month String

While we recommend using payment_method_nonce when updating raw credit card data, the expiration month can be updated directly without any PCI concerns as long as you do not store, process, or transmit the raw PAN or CVV.

The expiration month of a credit card, formatted MM. May be used with expiration_year, and instead of expiration_date.

:expiration_year String

While we recommend using payment_method_nonce when updating raw credit card data, the expiration year can be updated directly without any PCI concerns as long as you do not store, process, or transmit the raw PAN or CVV.

The two or four digit year associated with a credit card, formatted YYYY or YY. May be used with expiration_month, and instead of expiration_date.

:number String

Typically requires PCI SAQ D compliance

We recommend using payment_method_nonce to avoid any PCI concerns with raw credit card data being present on your server.

The 12-19 digit value on a credit card consisting of a bank identification number (BIN) and primary account number (PAN).

:options

Optional values that can be passed with a request.

:fail_on_duplicate_payment_method bool

If this option is passed and the payment method has already been added to the Vault, the request will fail. This option will not work with PayPal payment methods.

:make_default bool

This option makes the specified payment method the default for the customer.

:update_existing_token String

Update the payment method token specified.

:verification_amount String

Specify a non-negative amount that you want to use to verify a card. If you do not pass this option, the gateway will automatically use a verification amount of $0 or $1, depending on the processor and/or card type.

:verification_merchant_account_id String

Specify the merchant account ID that you want to use to verify a card. Can't be a Braintree Marketplace sub-merchant account. For more details on merchant accounts in general, see merchant_account_id on Braintree::Transaction.sale().

:verify_card bool

If the payment method is a credit card, this option prompts the gateway to verify the card's number and expiration date. It also verifies the AVS and CVV information if you've enabled AVS and CVV rules. If you want to verify all cards before they are stored in your Vault, you can turn on card verification for your entire account in the Control Panel.

In some cases, cardholders may see a temporary authorization on their account after their card has been verified. The authorization will fall off the cardholder's account within a few days and will never settle.

Only returns a Braintree::CreditCardVerification result if verification runs and is unsuccessful.

:token String

An alphanumeric value that references a specific payment method stored in your Vault. Must be less than or equal to 36 characters. If using a custom integration, you can specify what you want the token to be. If not specified, the gateway will generate one that can be accessed on the result. If using our Drop-in UI with a customer ID to vault payment methods, you can't specify your own token. Length and format of gateway-generated tokens and IDs may change at any time.

:custom_fields

A collection of custom field/value pairs. Fields and values must be less than 255 characters. You must set up each custom field in the Control Panel prior to passing it with a request. Querying this value returns a collection of custom field values stored on the customer object.

:default_payment_method_token String

Update the customer's default payment method to the specified token.

:device_data String

Customer device information. Passing this value is strongly recommended when using Advanced Fraud Tools and adding credit card data to your Vault. Not recommended when vaulting PayPal or Venmo accounts.

:email String

Email address composed of ASCII characters.

:fax String

Fax number. 255 character maximum.

:first_name String

The first name. 255 character maximum.

:id String

If specified, will replace the customer's existing ID. 36 character maximum; must be unique within your Vault; valid characters are letters, numbers, -, and _; the words "all" and "new" currently can't be used.

:last_name String

The last name. 255 character maximum.

:payment_method_nonce String

One-time-use reference to payment information provided by your customer, such as a credit card or PayPal account. When passed on customer update, it creates a payment method associated with the existing customer; see example below.

:phone String

Phone number. Phone must be 10-14 characters and can only contain numbers, dashes, parentheses and periods.

:website String

Website URL. 255 character maximum. Website must be well-formed. The URL scheme is optional.

Examples

Update customer and existing credit card

To update an existing credit card when using the customer update method, you need to pass the token of the credit card under the credit card options.

note

Credit cards are the only payment method type that you can update using the customer update method. To update other payment method types, use Braintree::PaymentMethod.update().

Ruby
Copy
Copied
result = Braintree::Customer.update(
  "a_customer_id", # id of customer to update
  :payment_method_nonce => nonce_from_the_client,
  :email => "new.email@example.com",
  :credit_card => {
    :options => {
      # token of credit card to update
      :update_existing_token => "the_token"
    }
  }
)

If you are only storing the customer ID in your system and using a 1:1 model of customer to credit card, then you can get the token for the credit card from the customer details.

Ruby
Copy
Copied
customer = Braintree::Customer.find("a_customer_id")
token = customer.credit_cards[0].token

Update customer, credit card, and billing address

The billing address can also be updated by adding in the billing address details and setting the update_existing option in the billing address attributes.

note

Using this method, you can update any of the credit card parameters listed above, but some parameters have been deprecated to avoid any PCI concerns with raw credit card data being present on your server.

Ruby
Copy
Copied
result = Braintree::Customer.update(
  "a_customer_id",
  :payment_method_nonce => nonce_from_the_client,
  :email => "new.email@example.com",
  :credit_card => {
    :options => {
      :update_existing_token => "the_token",
    },
    :billing_address => {
      :street_address => "New Street Address",
      :postal_code => "60622",
      :options => {
        :update_existing => true
      }
    }
  }
)

If you omit the update_existing option under the billing address, we will create a new address for the customer and associate it to the credit card. The old address will remain associated to the customer but no longer associated as the billing address of the credit card.

Update customer and create new payment method

You can add a new payment method to an existing customer using the customer update API.

Credit card

If you omit the update_existing_token option from the examples in the previous sections, a new credit card will be created and associated to the customer.

Ruby
Copy
Copied
customer = Braintree::Customer.find("the_customer_id")
customer.credit_cards.size
#=> 1
result = Braintree::Customer.update(
  customer.id,
  :payment_method_nonce => nonce_from_the_client
)
if result.success?
  result.customer.credit_cards.size
  #=> 2
end

Any payment method type

You can use a payment method nonce for any payment method type—not just a credit card—to associate that payment method to the customer. The example below shows adding a payment method while also updating customer details.

Ruby
Copy
Copied
result = Braintree::Customer.update(
  "a_customer_id", # id of customer to update
  :payment_method_nonce => nonce_from_the_client,
  :email => "new.email@example.com",
)

Card verification

By default we will run credit card validations but not perform verification. Set the verify_card option to verify the card.

Ruby
Copy
Copied
result = Braintree::Customer.update(
  "a_customer_id",
  :payment_method_nonce => nonce_from_the_client,
  :credit_card => {
    :options => {
      :update_existing_token => "the_token",
      :verify_card => true
    }
  }
)
important

If you are using our Advanced Fraud Tools, we strongly recommend passing device_data each time you verify a card.

See also

Still have questions?

If you can’t find an answer, contact our Support team.