This API object is provided to extensions registered for the extension targets that appear exclusively pre-purchase. It extends the [StandardApi](/docs/api/checkout-ui-extensions/apis/standardapi) and provides the write apis for the checkout data.
import {
reactExtension,
Checkbox,
useApplyAttributeChange,
} from '@shopify/ui-extensions-react/checkout';
// 1. Choose an extension target
export default reactExtension(
'purchase.checkout.block.render',
() => <Extension />,
);
function Extension() {
const applyAttributeChange =
useApplyAttributeChange();
// 2. Render a UI
return (
<Checkbox onChange={onCheckboxChange}>
I would like to receive a free gift with my
order
</Checkbox>
);
// 3. Call API methods to modify the checkout
async function onCheckboxChange(isChecked) {
const result = await applyAttributeChange({
key: 'requestedFreeGift',
type: 'updateAttribute',
value: isChecked ? 'yes' : 'no',
});
console.log(
'applyAttributeChange result',
result,
);
}
}
import {
extension,
Checkbox,
} from '@shopify/ui-extensions/checkout';
// 1. Choose an extension target
export default extension(
'purchase.checkout.block.render',
(root, api) => {
// 2. Render a UI
root.appendChild(
root.createComponent(
Checkbox,
{
onChange: onCheckboxChange,
},
'I would like to receive a free gift with my order',
),
);
// 3. Call API methods to modify the checkout
async function onCheckboxChange(isChecked) {
const result =
await api.applyAttributeChange({
key: 'requestedFreeGift',
type: 'updateAttribute',
value: isChecked ? 'yes' : 'no',
});
console.log(
'applyAttributeChange result',
result,
);
}
},
);
See the [StandardApi examples](/docs/api/checkout-ui-extensions/apis/standardapi#examples) for more information on how to use the API.
Performs an update on an attribute attached to the cart and checkout. If successful, this mutation results in an update to the value retrieved through the [`attributes`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-applyattributechange) property. > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay.
Performs an update on the merchandise line items. It resolves when the new line items have been negotiated and results in an update to the value retrieved through the [`lines`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-lines) property. > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay.
Performs an update on the discount codes. It resolves when the new discount codes have been negotiated and results in an update to the value retrieved through the [`discountCodes`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-discountcodes) property. > Caution: > See [security considerations](/docs/api/checkout-ui-extensions/configuration#network-access) if your extension retrieves discount codes through a network call. > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay.
Performs an update on the gift cards. It resolves when gift card change have been negotiated and results in an update to the value retrieved through the [`appliedGiftCards`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-appliedgiftcards) property. > Caution: > See [security considerations](/docs/api/checkout-ui-extensions/configuration#network-access) if your extension retrieves gift card codes through a network call. > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay.
Performs an update on a piece of metadata attached to the checkout. If successful, this mutation results in an update to the value retrieved through the [`metafields`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-metafields) property.
Performs an update on the note attached to the cart and checkout. If successful, this mutation results in an update to the value retrieved through the [`note`](/docs/api/checkout-ui-extensions/apis/standardapi#properties-propertydetail-note) property. > Note: This method will return an error if the buyer is using an accelerated checkout method, such as Apple Pay, Google Pay, or Meta Pay.
Performs an update of the shipping address. Shipping address changes will completely overwrite the existing shipping address added by the user without any prompts. If successful, this mutation results in an update to the value retrieved through the `shippingAddress` property. {% include /apps/checkout/privacy-icon.md %} Requires access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
Updates an attribute on the order. If an attribute with the provided key does not already exist, it gets created.
The type of the `AttributeUpdateChange` API.
Key of the attribute to add or update
Value for the attribute to add or update
The key for the attribute.
The value for the attribute.
AttributeChangeResultSuccess | AttributeChangeResultError
The returned result of a successful update to an attribute.
The type of the `AttributeChangeResultSuccess` API.
The returned result of an unsuccessful update to an attribute with a message detailing the type of error that occurred.
The type of the `AttributeChangeResultError` API.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
CartLineAddChange | CartLineRemoveChange | CartLineUpdateChange
An identifier for changes that add line items.
The merchandise ID being added.
The quantity of the merchandise being added.
The attributes associated with the line item.
The identifier of the selling plan that the merchandise is being purchased with.
These line item IDs are not stable at the moment, they might change after any operations on the line items. You should always look up for an updated ID before any call to `applyCartLinesChange` because you'll need the ID to create a `CartLineChange` object.
The merchandise being purchased.
The quantity of the merchandise being purchased.
The details about the cost components attributed to the cart line.
The line item additional custom attributes.
Discounts applied to the cart line.
Sub lines of the merchandise line. If no sub lines are present, this will be an empty array.
A globally-unique identifier.
The product variant’s title.
The product variant's subtitle.
Image associated with the product variant. This field falls back to the product image if no image is available.
List of product options applied to the variant.
The product object that the product variant belongs to.
Whether or not the product requires shipping.
The selling plan associated with the merchandise.
The image URL.
The alternative text for the image.
The name of the merchandise option.
The value of the merchandise option.
A globally-unique identifier.
The product’s vendor name.
A categorization that a product can be tagged with, commonly used for filtering and searching.
A globally-unique identifier.
The total amount after reductions the buyer can expect to pay that is directly attributable to a single cart line.
The price amount.
The ISO 4217 format for the currency.
'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOV' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'USN' | 'UYI' | 'UYU' | 'UYW' | 'UZS' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XAG' | 'XAU' | 'XBA' | 'XBB' | 'XBC' | 'XBD' | 'XCD' | 'XDR' | 'XOF' | 'XPD' | 'XPF' | 'XPT' | 'XSU' | 'XTS' | 'XUA' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWL'
CartCodeDiscountAllocation | CartAutomaticDiscountAllocation | CartCustomDiscountAllocation
The code for the discount
The type of the code discount
The money amount that has been discounted from the order
The title of the automatic discount
The type of the automatic discount
The money amount that has been discounted from the order
The title of the custom discount
The type of the custom discount
The money amount that has been discounted from the order
A unique identifier for the bundle line component. This ID is not stable. If an operation updates the line items in any way, all IDs could change.
The merchandise of this bundle line component.
The quantity of merchandise being purchased.
The cost attributed to this bundle line component.
Additional custom attributes for the bundle line component.
An identifier for changes that remove line items.
Line Item ID.
The quantity being removed for this line item.
An identifier for changes that update line items.
Line Item ID.
The new merchandise ID for the line item.
The new quantity for the line item.
The new attributes for the line item.
The identifier of the selling plan that the merchandise is being purchased with or `null` to remove the the product from the selling plan.
CartLineChangeResultSuccess | CartLineChangeResultError
Indicates that the line item was changed successfully.
Indicates that the line item was not changed successfully. Refer to the `message` property for details about the error.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
DiscountCodeAddChange | DiscountCodeRemoveChange
The type of the `DiscountCodeChange` API.
The code for the discount
The type of the `DiscountCodeChange` API.
The code for the discount
DiscountCodeChangeResultSuccess | DiscountCodeChangeResultError
Indicates that the discount code change was applied successfully.
Indicates that the discount code change failed.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
GiftCardAddChange | GiftCardRemoveChange
The type of the `GiftCardChange` API.
Gift card code.
The type of the `GiftCardChange` API.
Gift card code.
GiftCardChangeResultSuccess | GiftCardChangeResultError
Indicates that the gift card change was applied successfully.
Indicates that the gift card change failed.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
MetafieldRemoveChange | MetafieldUpdateChange | MetafieldRemoveCartChange | MetafieldUpdateCartChange
Removes a metafield.
The type of the `MetafieldRemoveChange` API.
The name of the metafield to remove.
The namespace of the metafield to remove.
Metadata associated with the checkout.
The name of the metafield. It must be between 3 and 30 characters in length (inclusive).
A container for a set of metafields. You need to define a custom namespace for your metafields to distinguish them from the metafields used by other apps. This must be between 2 and 20 characters in length (inclusive).
The information to be stored as metadata.
The metafield’s information type.
Updates a metafield. If a metafield with the provided key and namespace does not already exist, it gets created.
The type of the `MetafieldUpdateChange` API.
The name of the metafield to update.
The namespace of the metafield to add.
The new information to store in the metafield.
The metafield’s information type.
Removes a cart metafield.
The type of the `MetafieldRemoveChange` API.
The name of the metafield to remove.
The namespace of the metafield to remove.
Represents a custom metadata attached to a resource.
The key name of a metafield.
The namespace for a metafield.
The value of a metafield.
The metafield's type name.
Updates a cart metafield. If a metafield with the provided key and namespace does not already exist, it gets created.
The type of the `MetafieldUpdateChange` API.
MetafieldChangeResultSuccess | MetafieldChangeResultError
The type of the `MetafieldChangeResultSuccess` API.
The type of the `MetafieldChangeResultError` API.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
NoteRemoveChange | NoteUpdateChange
Removes a note
The type of the `NoteRemoveChange` API.
An Update to a note on the order. for example, the buyer could request detailed packaging instructions in an order note
The type of the `NoteUpdateChange` API.
The new value of the note.
NoteChangeResultSuccess | NoteChangeResultError
The type of the `NoteChangeResultSuccess` API.
The type of the `NoteChangeResultError` API.
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.
The type of the `ShippingAddressUpdateChange` API.
Fields to update in the shipping address. You only need to provide values for the fields you want to update — any fields you do not list will keep their current values.
The buyer's full name. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's first name. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's last name. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's company name. {% include /apps/checkout/privacy-icon.md %} Requires level 1 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The first line of the buyer's address, including street name and number. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The second line of the buyer's address, like apartment number, suite, etc. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's city. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's postal or ZIP code. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The ISO 3166 Alpha-2 format for the buyer's country. Refer to https://www.iso.org/iso-3166-country-codes.html. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's province code, such as state, province, prefecture, or region. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
The buyer's phone number. {% include /apps/checkout/privacy-icon.md %} Requires level 2 access to [protected customer data](/docs/apps/store/data-protection/protected-customer-data).
'AC' | 'AD' | 'AE' | 'AF' | 'AG' | 'AI' | 'AL' | 'AM' | 'AN' | 'AO' | 'AR' | 'AT' | 'AU' | 'AW' | 'AX' | 'AZ' | 'BA' | 'BB' | 'BD' | 'BE' | 'BF' | 'BG' | 'BH' | 'BI' | 'BJ' | 'BL' | 'BM' | 'BN' | 'BO' | 'BQ' | 'BR' | 'BS' | 'BT' | 'BV' | 'BW' | 'BY' | 'BZ' | 'CA' | 'CC' | 'CD' | 'CF' | 'CG' | 'CH' | 'CI' | 'CK' | 'CL' | 'CM' | 'CN' | 'CO' | 'CR' | 'CU' | 'CV' | 'CW' | 'CX' | 'CY' | 'CZ' | 'DE' | 'DJ' | 'DK' | 'DM' | 'DO' | 'DZ' | 'EC' | 'EE' | 'EG' | 'EH' | 'ER' | 'ES' | 'ET' | 'FI' | 'FJ' | 'FK' | 'FO' | 'FR' | 'GA' | 'GB' | 'GD' | 'GE' | 'GF' | 'GG' | 'GH' | 'GI' | 'GL' | 'GM' | 'GN' | 'GP' | 'GQ' | 'GR' | 'GS' | 'GT' | 'GW' | 'GY' | 'HK' | 'HM' | 'HN' | 'HR' | 'HT' | 'HU' | 'ID' | 'IE' | 'IL' | 'IM' | 'IN' | 'IO' | 'IQ' | 'IR' | 'IS' | 'IT' | 'JE' | 'JM' | 'JO' | 'JP' | 'KE' | 'KG' | 'KH' | 'KI' | 'KM' | 'KN' | 'KP' | 'KR' | 'KW' | 'KY' | 'KZ' | 'LA' | 'LB' | 'LC' | 'LI' | 'LK' | 'LR' | 'LS' | 'LT' | 'LU' | 'LV' | 'LY' | 'MA' | 'MC' | 'MD' | 'ME' | 'MF' | 'MG' | 'MK' | 'ML' | 'MM' | 'MN' | 'MO' | 'MQ' | 'MR' | 'MS' | 'MT' | 'MU' | 'MV' | 'MW' | 'MX' | 'MY' | 'MZ' | 'NA' | 'NC' | 'NE' | 'NF' | 'NG' | 'NI' | 'NL' | 'NO' | 'NP' | 'NR' | 'NU' | 'NZ' | 'OM' | 'PA' | 'PE' | 'PF' | 'PG' | 'PH' | 'PK' | 'PL' | 'PM' | 'PN' | 'PS' | 'PT' | 'PY' | 'QA' | 'RE' | 'RO' | 'RS' | 'RU' | 'RW' | 'SA' | 'SB' | 'SC' | 'SD' | 'SE' | 'SG' | 'SH' | 'SI' | 'SJ' | 'SK' | 'SL' | 'SM' | 'SN' | 'SO' | 'SR' | 'SS' | 'ST' | 'SV' | 'SX' | 'SY' | 'SZ' | 'TA' | 'TC' | 'TD' | 'TF' | 'TG' | 'TH' | 'TJ' | 'TK' | 'TL' | 'TM' | 'TN' | 'TO' | 'TR' | 'TT' | 'TV' | 'TW' | 'TZ' | 'UA' | 'UG' | 'UM' | 'US' | 'UY' | 'UZ' | 'VA' | 'VC' | 'VE' | 'VG' | 'VN' | 'VU' | 'WF' | 'WS' | 'XK' | 'YE' | 'YT' | 'ZA' | 'ZM' | 'ZW' | 'ZZ'
ShippingAddressChangeResultSuccess | ShippingAddressChangeResultError
The returned result of a successful update to the shipping address.
The type of the `ShippingAddressChangeResultSuccess` API.
The returned result of an update to the shipping address with a messages detailing the type of errors that occurred.
The type of the `ShippingAddressChangeResultError` API.
The errors corresponding to particular fields from a given change
An error corresponding to a particular field from a given change
field key from MailingAddress where the error occurred
A message that explains the error. This message is useful for debugging. It is **not** localized, and therefore should not be presented directly to the buyer.