> Shopify Plus: > Checkout styling customizations are available only to [Shopify Plus](https://www.shopify.com/plus) merchants. Checkout forms consist of different UI components for user input, such as `Checkbox`, `DatePicker`, and `TextField`. This guide teaches you how to use the GraphQL Admin API to customize form controls, beyond what you can customize using the checkout editor. In some cases, you'll style form controls using [design system](/docs/apps/build/checkout/styling#data-structures) tokens. You'll learn some sample customizations, but you can use what you've learned to make other form control customizations. > Tip: > You can reset styles to their defaults by writing parent fields to `null` with the GraphQL Admin API. Refer to examples of resetting [some](/docs/api/admin-graphql/latest/mutations/checkoutBrandingUpsert#examples-Reset_color_schemes_to_the_defaults) and [all](/docs/api/admin-graphql/latest/mutations/checkoutBrandingUpsert#examples-Reset_all_styling_to_defaults) values to the defaults. ## What you'll learn In this tutorial, you’ll learn how to do the following tasks: - Retrieve a list of your store's checkout profile IDs. - Customize the label position and corner radius for all form controls. - Customize checkboxes to add a distinct corner radius. - Customize buttons to add inner padding and a distinct corner radius. ## Requirements - The store that you're modifying must be on a [Shopify Plus plan](https://help.shopify.com/manual/intro-to-shopify/pricing-plans/plans-features/shopify-plan). - You've created a new [development store](/docs/api/development-stores#create-a-development-store-to-test-your-app) with the [Checkout and Customer Accounts Extensibility](/docs/api/developer-previews#checkout-and-customer-accounts-extensibility-developer-preview) developer preview enabled. - You can make [authenticated requests](/docs/api/admin-graphql#authentication) to the GraphQL Admin API. - You've either [installed the GraphiQL app](https://shopify-graphiql-app.shopifycloud.com/login) on your store or [created an app](/docs/apps/build/scaffold-app), with the `read_checkout_branding_settings` and `write_checkout_branding_settings` [access scopes](/docs/api/usage/access-scopes). - You're using API version `2023-10` or higher. - You're familiar with the [GraphQL Admin API's branding types](/docs/apps/build/checkout/styling#data-structures). ## Step 1: Retrieve the store's published checkout profile ID Checkout styling properties apply to a [checkout profile ID](/docs/apps/build/checkout/styling#checkout-profile). In this step, you'll retrieve the checkout profile to which you'll apply form control changes. 1. Query [`checkoutProfiles`](/docs/api/admin-graphql/latest/queries/checkoutProfiles) to retrieve a list of checkout profile IDs. The `is_published` parameter indicates which checkout profile is currently applied to your store's live checkout.

2. Make note of your corresponding ID from the list. You'll supply the ID in subsequent mutations. ## Step 2: Set the label position and corner radius In this step, you'll set the label position and then the corner radius for form controls. For both styles, you'll use the [`checkoutBrandingUpsert`](/docs/api/admin-graphql/latest/mutations/checkoutBrandingUpsert) mutation's `customizations` object and the [`CheckoutBrandingInput`](/docs/api/admin-graphql/latest/input-objects/CheckoutBrandingInput) input object. 1. Set the label position. The following example puts labels outside fields. This keeps field labels visible when users are typing inputs, and improves accessibility. ```graphql mutation CustomizingControls($checkoutBrandingInput: CheckoutBrandingInput!, $checkoutProfileId: ID!) { checkoutBrandingUpsert(checkoutBrandingInput: $checkoutBrandingInput, checkoutProfileId: $checkoutProfileId) { checkoutBranding { customizations { control { labelPosition } } } userErrors { field message } } } ``` ```json { "checkoutProfileId": "gid://shopify/CheckoutProfile/YOUR_CHECKOUT_PROFILE_ID_HERE", "checkoutBrandingInput": { "customizations": { "control": { "labelPosition": "OUTSIDE" } } } } ``` ```json { "data": { "checkoutBrandingUpsert": { "checkoutBranding": { "customizations": { "control": { "labelPosition": "OUTSIDE" } } }, "userErrors": [] } } } ``` 1. Set the corner radius. ```graphql mutation CustomizingControls($checkoutBrandingInput: CheckoutBrandingInput!, $checkoutProfileId: ID!) { checkoutBrandingUpsert(checkoutBrandingInput: $checkoutBrandingInput, checkoutProfileId: $checkoutProfileId) { checkoutBranding { customizations { control { cornerRadius } } } userErrors { field message } } } ``` ```json { "checkoutProfileId": "gid://shopify/CheckoutProfile/YOUR_CHECKOUT_PROFILE_ID_HERE", "checkoutBrandingInput": { "customizations": { "control": { "cornerRadius": "LARGE" } } } } ``` ```json { "data": { "checkoutBrandingUpsert": { "checkoutBranding": { "customizations": { "control": { "cornerRadius": "LARGE" } } }, "userErrors": [] } } } ```
Form field labels displaying above fields that have a slightly rounded edge
## Step 3: Set the corner radius for checkboxes At this point, checkboxes have the corner radius that [you set for form controls](#step-2-set-the-label-position-and-corner-radius). However, this style makes the checkboxes look like radio buttons. In this step, you'll adjust the checkbox's corner radius to visually distinguish it as a checkbox and make its function clear. ```graphql mutation CustomizingControls($checkoutBrandingInput: CheckoutBrandingInput!, $checkoutProfileId: ID!) { checkoutBrandingUpsert(checkoutBrandingInput: $checkoutBrandingInput, checkoutProfileId: $checkoutProfileId) { checkoutBranding { customizations { checkbox { cornerRadius } } } userErrors { field message } } } ``` ```json { "checkoutProfileId": "gid://shopify/CheckoutProfile/YOUR_CHECKOUT_PROFILE_ID_HERE", "checkoutBrandingInput": { "customizations": { "checkbox": { "cornerRadius": "BASE" } } } } ``` ```json { "data": { "checkoutBrandingUpsert": { "checkoutBranding": { "customizations": { "checkbox": { "cornerRadius": "BASE" } } }, "userErrors": [] } } } ```
The checkbox as a square with slightly rounded edges
## Step 4: Style primary buttons The customizations for `control` don't apply to buttons. In this step, you'll style the corner radius and padding for primary buttons. For both styles, you'll use the [`checkoutBrandingUpsert`](/docs/api/admin-graphql/latest/mutations/checkoutBrandingUpsert) mutation's `customizations` object and the [`CheckoutBrandingInput`](/docs/api/admin-graphql/latest/input-objects/CheckoutBrandingInput) input object. 1. Set the corner radius. The following example shapes the buttons as rectangles with sharp corners, which affects the perceived clickability of the button. ```graphql mutation CustomizingControls($checkoutBrandingInput: CheckoutBrandingInput!, $checkoutProfileId: ID!) { checkoutBrandingUpsert(checkoutBrandingInput: $checkoutBrandingInput, checkoutProfileId: $checkoutProfileId) { checkoutBranding { customizations { primaryButton { cornerRadius } } } userErrors { field message } } ``` ```json { "checkoutProfileId": "gid://shopify/CheckoutProfile/YOUR_CHECKOUT_PROFILE_ID_HERE", "checkoutBrandingInput": { "customizations": { "primaryButton": { "cornerRadius": "NONE" } } } } ``` ```json { "data": { "checkoutBrandingUpsert": { "checkoutBranding": { "customizations": { "primaryButton": { "cornerRadius": "NONE" } } }, "userErrors": [] } } } ``` 1. Set the inline padding. The following example helps to ensure that the label doesn't touch the button edges, which improves readability and aesthetics. ```graphql mutation CustomizingControls($checkoutBrandingInput: CheckoutBrandingInput!, $checkoutProfileId: ID!) { checkoutBrandingUpsert(checkoutBrandingInput: $checkoutBrandingInput, checkoutProfileId: $checkoutProfileId) { checkoutBranding { customizations { primaryButton { inlinePadding } } } userErrors { field message } } } ``` ```json { "checkoutProfileId": "gid://shopify/CheckoutProfile/YOUR_CHECKOUT_PROFILE_ID_HERE", "checkoutBrandingInput": { "customizations": { "primaryButton": { "inlinePadding": "BASE" } } } } ``` ```json { "data": { "checkoutBrandingUpsert": { "checkoutBranding": { "customizations": { "primaryButton": { "inlinePadding": "BASE" } } }, "userErrors": [] } } } ```
Buttons as rectangles with sharp edges. The button
## Next steps - Explore the [GraphQL Admin API](/docs/api/admin-graphql/latest/mutations/checkoutBrandingUpsert) to learn more about customizing checkout's form controls.