---
title: "Update Billing Address"
method: PATCH
path: "/v5/customers/{customer_id}/billing/{billing_id}"
tags: ["Customers"]
---

# Update Billing Address

`PATCH /v5/customers/{customer_id}/billing/{billing_id}`

## Request

- Base URL: `https://sandbox.nmi.com/api`
- URL: `https://sandbox.nmi.com/api/v5/customers/{customer_id}/billing/{billing_id}`
- Auth: API key in header `Authorization`

Update a customer billing address.

## Path parameters

- `customer_id` string, required
- `billing_id` string, required

## Request body

- UpdateCustomerVaultBillingRequest: Partial update of a customer vault billing record.
  - `id` string: Billing information identifier. Usually omitted when updating via `billing_id` in the URL.
  - `first_name` string: First name
  - `last_name` string: Last name
  - `company` string: Company name
  - `address1` string: Address line 1
  - `address2` string: Address line 2
  - `city` string: City
  - `state` string: State or province. Format: `CC`
  - `zip` string: ZIP or postal code
  - `country` string: Country code (ISO 3166-1 alpha-2). Format: `CC`
  - `phone` string: Phone number
  - `email` string, email: Email address
  - `fax` string: Fax number
  - `currency` string: ISO 4217 currency code used for payment validation. Defaults to `USD` when omitted.
  - `priority` integer, nullable: Priority of the billing address
  - `payment_details` union: Payment method for a customer vault billing record. Supports the same retail card-present variants as payment transactions.
    - object
      - `card_number` string, required: Credit card number
      - `card_exp` string, required: Credit card expiration date. Format: `MMYY`
    - RetailUnencryptedMagneticStripe: Card-present payment using raw magnetic stripe data from a card reader. Set `industry` to `retail` on the payment request.
      - `track_1` string, required: Raw magnetic stripe data.
      - `track_2` string, required: Raw magnetic stripe data.
      - `track_3` string: Raw magnetic stripe data.
    - RetailMagTekMagensaEncryptedSwipe: Card-present payment using encrypted magnetic stripe data from a MagTek Magensa reader. Set `industry` to `retail` on the payment request.
      - `magnesafe_track_1` string, required: Raw MagTek Magensa data.
      - `magnesafe_track_2` string, required: Raw MagTek Magensa data.
      - `magnesafe_magneprint` string: Raw MagTek Magensa data.
      - `magnesafe_ksn` string: Raw MagTek Magensa data.
      - `magnesafe_magneprint_status` string: Raw MagTek Magensa data.
    - RetailIdTechEncryptedSwipe: Card-present encrypted swipe data from an ID Tech M130 reader. Set `industry` to `retail` on the payment request.
      - `encrypted_track_1` string, required: Raw encrypted data.
      - `encrypted_track_2` string, required: Raw encrypted data.
      - `encrypted_track_3` string: Raw encrypted data.
      - `encrypted_ksn` string: Raw encrypted data.
    - RetailIdTechEncryptedKeyed: Card-present encrypted keyed entry data from an ID Tech M130 reader. Set `industry` to `retail` on the payment request.
      - `encrypted_data` string, required: Raw encrypted data.
    - RetailIngenicoChip: Card-present EMV chip payment from an Ingenico Telium 2 reader. Set `industry` to `retail` on the payment request.
      - `entry_mode` 'emv_icc', required: The type of transaction data to be processed.
      - `emv_auth_request_data` string, required: EMV data for the transaction as received from the EMV chip card SDK.
      - `emv_device` 'ingenico_rba', required: The EMV-capable card reader.
      - `verification_method` 'signature' | 'offline_pin' | 'offline_pin_signature' | 'none', required: Method used to verify the EMV transaction.
      - `encrypted_ksn` string, required: Raw encrypted data.
      - `encrypted_track_2` string, required: Raw encrypted data.
    - RetailIngenicoSwipe: Card-present encrypted swipe from an Ingenico Telium 2 reader. Set `industry` to `retail` on the payment request.
      - `entry_mode` 'swiped' | 'swiped_emv_fallback', required: The type of transaction data to be processed.
      - `emv_device` 'ingenico_rba', required: The EMV-capable card reader.
      - `encrypted_ksn` string, required: Raw encrypted data.
      - `encrypted_track_1` string, required: Raw encrypted data.
      - `encrypted_track_2` string, required: Raw encrypted data.
    - RetailIngenicoNfc: Card-present NFC payment from an Ingenico Telium 2 reader. Set `industry` to `retail` on the payment request.
      - `entry_mode` 'nfc_msd', required: The type of transaction data to be processed.
      - `emv_device` 'ingenico_rba', required: The EMV-capable card reader.
      - `encrypted_ksn` string, required: Raw encrypted data.
      - `encrypted_track_2` string, required: Raw encrypted data.
    - RetailIngenicoKeyed: Card-present encrypted keyed entry from an Ingenico Telium 2 reader. Set `industry` to `retail` on the payment request.
      - `entry_mode` 'keyed', required: The type of transaction data to be processed.
      - `emv_device` 'ingenico_rba', required: The EMV-capable card reader.
      - `encrypted_ksn` string, required: Raw encrypted data.
      - `encrypted_track_2` string, required: Raw encrypted data.
    - RetailMobileSdkEncryptedPayment: RSA-encrypted card data from the NMI Mobile SDK (iOS/Android). Use in place of raw card number, expiration, and CVV. Set `industry` to `retail` on the payment request when processing as a card-present transaction.
      - `encrypted_payment` string, required: Encrypted payment blob returned by the Mobile SDK.
    - object
      - `check_name` string, required: The name on the customer's ACH account
      - `check_aba` number, required: The customer's bank routing number
      - `check_account` number, required: The customer's bank account number
      - `account_type` 'checking' | 'savings': The type of ACH account the customer has
      - `account_holder_type` 'personal' | 'business': Whether the ACH account is personal or business
      - `sec_code` 'PPD' | 'WEB' | 'TEL' | 'CCD' | 'POP' | 'RCK': The Standard Entry Class code of the ACH transaction
    - object
      - `payment_token` string, required: The tokenized version of the customer's card or check information
      - `payment` 'check' | 'creditcard': Selects card vs check when a [Payment Component](../docs/payment-component) (or [Collect.js](https://secure.networkmerchants.com/merchants/resources/integration/integration_portal.php#cjs_methodology)) `payment_token` contains both card and ACH data.
    - object
      - `applepay_payment_data` string, required: Encrypted payment data from the Apple Pay SDK.
    - object
      - `googlepay_payment_data` string, required: Encrypted payment data from the Google Pay SDK.
    - object
      - `decrypted_applepay_data` true, required: Set to `true` when submitting merchant-decrypted Apple Pay data.
      - `card_number` string, required: Device primary account number (dPAN) from the decrypted Apple Pay payload.
      - `card_exp` string, required: Credit card expiration date from the decrypted Apple Pay payload. Format: `MMYY`
    - object
      - `decrypted_googlepay_data` true, required: Set to `true` when submitting merchant-decrypted Google Pay data.
      - `card_number` string, required: Device primary account number (dPAN) from the decrypted Google Pay payload.
      - `card_exp` string, required: Credit card expiration date from the decrypted Google Pay payload. Format: `MMYY`
  - `cardholder_auth` union: Cardholder authentication data. Use the 3-D Secure variant for EMV authentication results. Use the Decrypted wallet variant for merchant-decrypted Apple Pay or Google Pay, which relays the cryptogram and ECI to the 3-D Secure fields.
    - object: EMV 3-D Secure authentication result fields.
      - `status` 'verified' | 'attempted', required: Set 3D Secure condition. Value used to determine E-commerce indicator (ECI).
      - `cavv` string, required: Cardholder authentication verification value from the 3-D Secure authentication response. Format: base64 encoded.
      - `xid` string: Cardholder authentication transaction id. Format: base64 encoded.
      - `three_ds_version` string: 3DSecure version (for example `2.1.0` or `2.2.0`).
      - `directory_server_id` string: Directory Server Transaction ID from 3DSecure 2.0 authentication. Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    - object: Wallet authentication for decrypted Apple Pay or Google Pay payments.
      - `cavv` string, required: Wallet payment cryptogram (submitted in the repurposed 3-D Secure `cavv` field).
      - `eci` string: Electronic Commerce Indicator from the wallet payment data (submitted in the repurposed 3-D Secure `eci` field).

## Response `200`

Billing address updated successfully

- CustomerResponse: Customer response matching CustomerRestSerializer structure
  - `object` 'customer', required: Resource type identifier
  - `id` string, required: Customer vault ID
  - `created` string, date-time, nullable: Customer creation date in UTC ISO 8601 format
  - `billing` object[]: Array of billing addresses
    - `object` 'billing', required: Resource type identifier
    - `id` string, required: Billing address ID (address_name)
    - `first_name` string: First name
    - `last_name` string: Last name
    - `company` string: Company name
    - `address1` string: Address line 1
    - `address2` string: Address line 2
    - `city` string: City
    - `state` string: State or province
    - `zip` string: ZIP or postal code
    - `country` string: Country code (ISO 3166-1 alpha-2)
    - `phone` string: Phone number
    - `email` string, email: Email address
    - `fax` string: Fax number
    - `priority` integer, nullable: Priority of the billing address
    - `payment_details` union: Masked payment method on a customer vault billing record response.
      - object
        - `card_number` string, required: Masked card number
        - `card_exp` string, required: Card expiration date. Format: `MMYY`
      - object
        - `check_account` string: Masked bank account number
        - `check_aba` string: Bank routing number
        - `check_name` string: Name on the ACH account
        - `account_type` 'checking' | 'savings': ACH account type
        - `account_holder_type` 'personal' | 'business': ACH account holder type
        - `sec_code` string: Standard Entry Class code
  - `shipping` object[]: Array of shipping addresses
    - `object` 'shipping', required: Resource type identifier
    - `id` string, required: Shipping address ID (shipping_address_name)
    - `first_name` string: First name
    - `last_name` string: Last name
    - `company` string: Company name
    - `address1` string: Address line 1
    - `address2` string: Address line 2
    - `city` string: City
    - `state` string: State or province
    - `zip` string: ZIP or postal code
    - `country` string: Country code (ISO 3166-1 alpha-2)
    - `phone` string: Phone number
    - `email` string, email: Email address
    - `fax` string: Fax number
    - `priority` integer, nullable: Priority of the shipping address
  - `merchant_defined_fields` MerchantDefinedFields: Custom fields configured in the merchant control panel under Settings → Merchant Defined Fields (`field_1` through `field_20`).
    - `field_1` string: Merchant defined field 1
    - `field_2` string: Merchant defined field 2
    - `field_3` string: Merchant defined field 3
    - `field_4` string: Merchant defined field 4
    - `field_5` string: Merchant defined field 5
    - `field_6` string: Merchant defined field 6
    - `field_7` string: Merchant defined field 7
    - `field_8` string: Merchant defined field 8
    - `field_9` string: Merchant defined field 9
    - `field_10` string: Merchant defined field 10
    - `field_11` string: Merchant defined field 11
    - `field_12` string: Merchant defined field 12
    - `field_13` string: Merchant defined field 13
    - `field_14` string: Merchant defined field 14
    - `field_15` string: Merchant defined field 15
    - `field_16` string: Merchant defined field 16
    - `field_17` string: Merchant defined field 17
    - `field_18` string: Merchant defined field 18
    - `field_19` string: Merchant defined field 19
    - `field_20` string: Merchant defined field 20

## Other responses

- `400`: Bad Request - Validation Error
- `401`: Unauthorized
- `404`: Customer or billing address not found

---

[API](https://skmtc.dev/nmi/apis/payments-api.md) - [All operations](https://skmtc.dev/nmi/apis/payments-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nmi/apis/payments-api/revisions/c03727f27e27?raw)
