Tutorial: Launch your first Checkout Store
In this tutorial you'll build a working Checkout Store (also called a micro-store) backed by your Shopify catalog. We'll use Comet's GraphQL API to:
- Fetch products for a campaign collection
- Create a checkout flow
- Launch it as a Checkout Store via the Comet console
Prerequisites: Complete the Quick Start first — you need a connected Shopify store and a working API key.
Overview
A Checkout Store in Comet is a standalone, URL-addressable store page designed for a specific campaign (product launch, seasonal sale, social commerce drop). It:
- Pulls products from your existing Shopify catalog
- Has its own URL (e.g.
your-brand.satellites.comet.rocks/summer-launch) - Handles checkout through Comet's federated cart API
- Can be embedded or shared as a link (e.g. on social media, email, ads)
Part 1: Select your campaign products
First, identify the products you want to feature. Use tags or a collection ID from Shopify.
Query products by collection
query GetCampaignProducts($organizationId: ID!, $collectionId: String!) {
productFind(
organizationId: $organizationId
filters: { externalCollectionId: $collectionId }
pagination: { first: 20 }
) {
nodes {
id
name
description
sku
externalId
type
variantOf {
id
name
}
}
}
}TIP
externalId is the Shopify product GID. Use this to cross-reference with Shopify Admin.
Part 2: Build the checkout flow
A complete checkout in Comet follows this sequence:
cartCreate → cartAddProducts → cartApplyShippingAddress
→ cartGetShippingMethods → cartCreatePaymentIntent → orderSubmit1. Create a cart
mutation CreateCart($orgId: ID!) {
cartCreate(input: { organizationId: $orgId }) {
id
bags {
id
merchantId
}
}
}2. Add campaign products
mutation AddProducts($cartId: ID!, $productId: ID!) {
cartAddProducts(input: {
cartId: $cartId
products: [{ productId: $productId, quantity: 1 }]
}) {
id
bags {
id
products {
productId
quantity
price {
amount
currencyCode
}
}
subtotal {
amount
currencyCode
}
}
}
}3. Apply shipping address
mutation SetAddress($cartId: ID!) {
cartApplyShippingAddress(input: {
cartId: $cartId
useSameForBilling: true
address: {
firstName: "Jane"
lastName: "Doe"
address1: "123 Main St"
city: "New York"
province: "NY"
country: "US"
zip: "10001"
phone: "+1 212 555 0100"
}
}) {
id
bags {
availableShippingMethods {
id
title
price {
amount
currencyCode
}
}
}
}
}4. Select shipping method
Take the id of your chosen shipping method from the response above:
mutation SetShipping($cartId: ID!, $bagId: ID!, $methodId: ID!) {
cartApplyShippingMethods(input: {
cartId: $cartId
shippingMethods: [{ bagId: $bagId, shippingMethodId: $methodId }]
}) {
id
total {
amount
currencyCode
}
}
}5. Create payment intent
mutation CreatePayment($cartId: ID!) {
cartCreatePaymentIntent(input: { cartId: $cartId }) {
paymentIntentId
clientSecret
amount
currency
}
}Use the clientSecret with Stripe.js to collect payment on the frontend.
6. Submit the order
mutation SubmitOrder($cartId: ID!) {
orderSubmit(input: { cartId: $cartId }) {
id
status
bags {
id
externalOrderId
}
}
}On success, Comet places the order in Shopify. The externalOrderId is the Shopify order GID.
Part 3: Launch your Checkout Store
Now publish this campaign as a live URL using the Comet console.
- In console.comet.rocks, navigate to Storefronts
- Click New Storefront
- Set:
- Name:
Summer Launch - Slug:
summer-launch→ your URL will beyour-brand.satellites.comet.rocks/summer-launch - Organization: select your Shopify org
- Name:
- Under Products, add the product IDs from Part 1
- Click Publish
Your storefront is now live. Share the URL in ads, email, or social posts.
What's next?
- Custom domain: Point a subdomain (e.g.
launch.yourbrand.com) tosatellites.comet.rocksvia CNAME - Styling: The satellite storefront supports custom CSS and logo upload from the console
- Discount codes: Use
cartApplyCouponsto support promo codes - Analytics: Each storefront tracks conversion events — view them in the console under Analytics
- Multi-merchant campaigns: Add products from multiple connected stores to the same cart
Explore the full Checkout API reference for advanced options.