Before starting your UCP checkout service setup, ensure you have completed
the
[service provider and test account setup](https://developers.google.com/merchant/3p/quickstart)
and selected a test merchant account for your integration.

> [!IMPORTANT]
> **Important:** Managed merchants must meet all eligibility and account requirements listed in [Prepare your Merchant Center account](https://developers.google.com/merchant/ucp/guides/merchant-center).

To complete your UCP checkout service setup before requesting sandbox
testing enablement, perform the following steps:

1. [Implement UCP checkout endpoints and order webhooks](https://developers.google.com/merchant/3p/guides/ucp/checkout/setup#step-1)
2. [Create and host the merchant UCP profile](https://developers.google.com/merchant/3p/guides/ucp/checkout/setup#step-2)
3. [Prepare for account relationship handshakes](https://developers.google.com/merchant/3p/guides/ucp/checkout/setup#step-3)

## Implement UCP checkout endpoints and order webhooks

Implement the standard UCP REST APIs on the merchant's backend platform:

1. **Checkout Endpoints:**
   - Follow the [UCP checkout native checkout guide](https://developers.google.com/merchant/ucp/guides/overview/native-checkout) to implement the three core REST endpoints for session creation, pricing and shipping updates, and transaction completion.
2. **Order Lifecycle Webhooks:**
   - Follow the [UCP Order Integration Guide](https://developers.google.com/merchant/ucp/guides/orders) to handle order state changes, cancellations, and fulfillment tracking.

## Create and host the merchant UCP profile

After implementing checkout endpoints, create and deploy a UCP technical
profile for the merchant on their domain:

1. **Construct the Technical Profile:**
   - Generate the merchant's UCP JSON profile declaring supported payment methods, checkout endpoint URLs, and public signing keys.
   - For schema specifications and structure details, see the [UCP Profile Guide](https://developers.google.com/merchant/ucp/guides/ucp-profile).
2. **Host the Profile on the Merchant Domain:**
   - Host the generated profile at the standardized `.well-known` path on the merchant's store domain: `https://{MERCHANT_DOMAIN}/.well-known/ucp`
   - Ensure this endpoint is publicly accessible over HTTPS and returns a valid `application/json` payload.

## Prepare for account relationship handshakes

When a merchant links their Merchant Center account to your platform, Google
creates a service proposal (
[`accounts.services.propose`](https://developers.google.com/merchant/api/reference/rest/accounts_v1/accounts.services/propose)
) that your backend must
receive and approve (
[`accounts.services.approve`](https://developers.google.com/merchant/api/reference/rest/accounts_v1/accounts.services/approve)
).

To receive the proposal ID during the handshake, implement at least one of the
following delivery mechanisms:

- **Redirect callback URI (Recommended):** Host an HTTPS endpoint to receive the proposal ID and merchant details through URL query parameters when Google redirects the merchant back to your portal. For query parameter details, see the [Redirect callback specification](https://developers.google.com/merchant/3p/guides/ucp/checkout/sandbox-testing#redirect-callback).
- **Push notifications:** Subscribe to `ACCOUNT_SERVICE_CHANGE` webhook events using the Merchant API to receive asynchronous proposal updates. To set up push notifications, see [Subscribe to push notifications](https://developers.google.com/merchant/api/guides/notifications/account-service-changes).

> [!IMPORTANT]
> **Important:** After your backend calls `accounts.services.approve`, cross-account permissions can take up to 60 seconds to propagate. Design your post-approval onboarding workflow to retry subsequent Merchant API calls on the merchant's account with exponential backoff if they return `401 UNAUTHENTICATED`.

## Next steps

After completing setup, proceed to
[Integration testing enablement request](https://developers.google.com/merchant/3p/guides/ucp/checkout/request-testing).