Sidekick Should Verify Theme App Embed & Block/Section Placement - Not Just Guide

Disclaimer - I didn’t write this, sidekick generated it based on the context it has wrto theme extensibility. (with emdashes removed). Context and direction is mine, notes are from sidekick on what can be done with examples.

Apps that ship theme extensions - app embeds, sections, and blocks - require merchants to manually enable and place them in the theme editor. Today, Sidekick can guide merchants through this process, but has no mechanism to verify completion or signal back to the app that setup is actually done.

The result: apps are left guessing whether their extension is live. Merchants assume it’s working. Support tickets follow.


Real-World Failure Scenarios by Theme Extension Type

App Embeds

  • Merchant enables the embed on a development or duplicated theme, not the published live theme
  • Merchant enables the embed but forgets to click “Save” in the theme editor
  • Embed is disabled silently after a theme update or when the merchant switches to a new theme
  • Merchant publishes a different theme version that doesn’t have the embed enabled

Theme Sections

  • Section is added to the wrong template (e.g., added to index instead of product)
  • Section is present in the template JSON but set to hidden: true
  • Section is removed when the merchant reorganizes their template or switches themes
  • Merchant adds the section to a template that isn’t assigned to any products or pages

Theme Blocks

  • Block is placed inside the wrong parent section
  • Block is in the correct section but in the wrong position, breaking the intended UX
  • Block is removed when the merchant edits the section layout
  • Block is present but its required settings (e.g., linked metafield, product picker) are left unconfigured

Root Cause

There is no Admin API surface that exposes:

  • Which app embeds are enabled on which theme, and whether that theme is the live published theme
  • Which sections and blocks from a given app are present in which templates
  • Whether those sections/blocks are visible, correctly positioned, and fully configured

Without this, neither the app nor Sidekick can verify setup - they can only guide and hope.


What We’re Asking For

1. App Embed Status API

Expose per-theme app embed enablement via Admin GraphQL so apps and Sidekick can query it programmatically without scraping theme editor UI or parsing settings_data.json manually:

query {
  theme(id: "gid://shopify/OnlineStoreTheme/123") {
    appEmbeds {
      appId
      handle
      enabled
      themeRole  # "main" | "unpublished" | "development"
    }
  }
}

2. Section & Block Placement API

Extend the existing Assets API or introduce a dedicated endpoint that returns which sections and blocks from a given app are present in each template, including visibility and configuration state:

query {
  theme(id: "gid://shopify/OnlineStoreTheme/123") {
    templates {
      name
      sections {
        type
        appId
        blockHandle
        visible
        settings {
          key
          value
        }
      }
    }
  }
}

3. Sidekick Hints Write API

Allow apps to POST a structured task definition that Sidekick evaluates against live store state:

{
  "task_id": "enable-embed-live-theme",
  "title": "Enable app embed on live theme",
  "surface": "theme",
  "completion_criteria": {
    "type": "app_embed_enabled",
    "theme_role": "main",
    "app_id": "your-app-id",
    "embed_handle": "your-embed-handle"
  },
  "callback_url": "https://your-app.com/webhooks/sidekick-completion"
}

For section/block placement:

{
  "task_id": "place-product-block",
  "title": "Add review block to product template",
  "surface": "theme",
  "completion_criteria": {
    "type": "block_placed",
    "theme_role": "main",
    "template": "product",
    "block_handle": "your-block-handle",
    "app_id": "your-app-id",
    "require_visible": true,
    "require_configured": ["metafield_namespace", "product_picker"]
  },
  "callback_url": "https://your-app.com/webhooks/sidekick-completion"
}

4. sidekick/task_completed Webhook Topic

Fire when Sidekick verifies all criteria are met against live store state:

{
  "topic": "sidekick/task_completed",
  "task_id": "enable-embed-live-theme",
  "app_id": "your-app-id",
  "verified_at": "2026-07-30T04:00:00Z",
  "payload": {
    "theme_id": "gid://shopify/OnlineStoreTheme/123",
    "theme_role": "main",
    "embed_handle": "your-embed-handle",
    "enabled": true
  }
}

5. App Bridge sidekick:task_completed Client Event

For apps that prefer a real-time client-side signal over a server webhook, emit this event so the embedded app UI can update its onboarding state without a round-trip:

shopify.addEventListener('sidekick:task_completed', (event) => {
  const { taskId, verifiedAt, payload } = event.detail;
  // Mark onboarding step complete in your UI
});

6. Persistent Task State in Sidekick

Incomplete tasks registered by an app should survive session close and be re-surfaced the next time the merchant opens Sidekick - with full context intact:

  • “Last time you were setting up [App Name]. Your app embed still isn’t enabled on your live theme. Want to finish that now?”

Tasks should be dismissible by the merchant but re-surfaceable by the app if the criteria remain unmet.

7. Verification Loop Behavior

After guiding the merchant through enabling an embed or placing a block, Sidekick should:

  1. Query the theme state via the APIs above
  2. Confirm success explicitly: “Your app embed is now enabled on your live theme ✓”
  3. Fire the completion webhook/event
  4. If verification fails: surface the specific reason and offer to retry - not just repeat the same instructions

Expected Impact

  • Eliminates the #1 source of “why isn’t my app working?” support tickets for theme-dependent apps
  • Gives app developers a reliable signal to gate further onboarding steps on confirmed theme setup
  • Allows Sidekick to move from guide to verified completion engine for theme workflows
  • Merchants on new themes or after theme updates get proactive re-verification, not silent breakage

Hey again @Aravind_Baskaran - thanks for sharing this too

Right now, apps can already detect app blocks through template JSON and app embeds through config/settings_data.json, as well as deep-link merchants to add or activate them: Configure theme app extensions

But, like you mentioned, what isn’t standardized is whether the placement or configuration is “correct”, so things like the intended template, parent section, position, and required settings are app-specific. I think this overlaps with your POS post at the broader Sidekick task layer, but the underlying theme state is separate, so I’m happy to log another feature request for you.

We’re continuing to expand Sidekick app extensions, although I can’t confirm a roadmap or timeline for the proposed APIs or events. Could you share which real-world failure is most common, and whether the main need is read-only verification or having Sidekick guide the merchant through fixing it?

Thanks for the quick ack @Alan_G . Sharing a bit more on the last part you asked wrto real-world situations.

For highlighting the most common failures, I’m picking a generic enough set of steps that should cover for majority apps needing storefront setup (most should need at least 2-3 steps done)

  • Step 1 - enable embed
  • Step 2 - add block in pdp page
  • Step 3 - add block in collection page
  • Step 4 - add a “custom” page (maybe with custom template)
  • Step 5 - In that custom page (which was created in prev step), add a block inside it
  • Step 6 - add blocks on customer profile page - maybe link to the page in Step 4
  • Step 7 - add url in the navigation for the “custom” page created in Step 4

Most if not all the setup above requires merchants to do it themselves, ie shouldn’t be automated without merchants previewing the “output” state and agreeing to save. Here are some scenarios (with what is needed)

  • Initialization - Guide the merchant to finishing the above as part of initial installation.
    • Needs - base APIs to support theme state + Sidekick skills and quick task completion hooks
  • Theme refresh - Most merchants change themes ~2 times a year, they need to repeat the above without missing anything between themes - on their dev/staging instance and then transfer seamlessly to their production instance without gaps.
    • Needs - Same theme state API, a Sidekick skill to do the whole work of deploying themes instead of the merchant having to do anything.
  • Scheduled health check flows - In case the above scenarios are incompletely done, our systems should be able to get the state of the themes using the base state APIs. If the health is broken, the app can programmatically include a hint/task to Sidekick powered daily/weekly todos list. This list already surfaces major insights/todos, we need a way to plug activity into it with a vetted importance level for the merchant. The vetting needs thought - it shouldn’t be generic, should be contributed to by the merchant, Shopify Sidekick and the app, list renders based on how important it is for that merchant’s business. Even better is the todo list changes based on the role of the staff logging in, ie show up a task only if they have permissions to do that.
    • Needs - Theme state API, Sidekick long-living tasks primitive with vetted importance and role mapping.

The base APIs for theme state and then primitive stack for sidekick tasks will help solve these painpoints that currently require numerous emails/back-and-forths, ie let the merchant do what they want with less effort. Hope this context helps.

Hey @Aravind_Baskaran, thanks for the context here, much appreciated!

The theme-specific gap is a normalized way to read app-extension state and react when it changes. Apps can currently inspect the published theme and parse template JSON and settings_data.json, but each app has to interpret placement, order, visibility, and required configuration itself. There also isn’t a theme-file-level change event, so ongoing health checks still require polling or app-triggered checks.

The Sidekick piece is broader though and overlaps with your POS thread: durable app-contributed tasks with merchant confirmation, role and priority awareness, and a reliable completion signal. The customer profile example is technically a separate surface through customer account UI extensions, so I’d keep that distinct from theme state.

I’ll pass these along separately: one request for normalized theme-extension state and change signals, and another for Sidekick task/completion primitives. Thanks for the additional detail, I can’t guarantee anything on my end but I’ll for sure pass this along.