Skip to main content
Semji connects to Shopify through the GraphQL Admin API, with an app you create for Semji in your store’s Shopify Dev Dashboard. You give Semji the app’s Client ID and Client secret: Semji exchanges them for an Admin API access token valid 24 hours (Shopify’s client credentials grant) and renews it on its own. Once connected, Semji’s AI agents can work on blog posts, pages, collection descriptions, and product pages, in every language enabled on your store. Compatible with all Shopify plans.

Prerequisites

  • Your store’s myshopify.com domain (e.g. your-store.myshopify.com). Semji also accepts the store handle alone (your-store) or your admin URL (https://admin.shopify.com/store/your-store). Your public domain (www.your-store.com) is not accepted.
  • Access to your Shopify admin as the store owner, or as staff allowed to develop apps. Collaborator accounts cannot open the Dev Dashboard.
  • An app created for Semji from your store’s own Shopify admin, see Step 1. Shopify only lets an app request tokens for stores of its own organization: an app created in an agency’s or partner’s organization cannot be used.
  • You are a workspace owner in Semji. The connection is shared with the whole workspace, and a workspace connects one Shopify store.
Availability of the Shopify integration depends on your Semji plan. If the integration does not appear in Settings → Integrations, or opens an upgrade dialog instead of the connection form, contact your account manager.
Since January 1, 2026, Shopify no longer lets you create custom apps directly in the Shopify admin, and Semji does not take a static Admin API access token (shpat_…). Create the app in the Dev Dashboard as described below, even if your store still has an older custom app.

Step 1: Create the Semji app in the Dev Dashboard

1

Open the Dev Dashboard from your store

In your Shopify admin, go to Settings → Apps → Develop apps and click Build apps in Dev Dashboard. Shopify documents this path for apps used on your own store. The connection requires the app and the store to belong to the same Shopify organization.
2

Create the app

In the Dev Dashboard, open Apps and click Create app. In the Start from Dev Dashboard section, give it a recognizable name (e.g. Semji), and click Create.
3

Set the access scopes and release the version

On the app’s Versions page:
  • Scopes (in the Access section): enter the seven scopes listed in Access scopes for the app:
  • App URL: Semji does not use it. If the field is empty, enter https://shopify.dev/apps/default-app-home.
  • Webhooks API version: any version (Semji uses no webhooks).
Click Release, then Release again to confirm (the version name and message are optional). Scopes only apply once the version is released.
4

Install the app on your store

Open the app’s Installs card, click Install app, select your store, and click Install.
5

Copy the Client ID and the Client secret

Open the app’s Settings and copy the Client ID and the Client secret from the Credentials section. Treat the secret like a password: share it only through the Semji connection form.
Shopify never displays an Admin API access token for a Dev Dashboard app. There is nothing else to copy: Semji requests its own token with the Client ID and the Client secret.

Access scopes for the app

Enter all of the following scopes on the app’s version:
All seven scopes are required, even if you plan to disable some tools. Semji checks the scopes granted to the app when you connect and refuses the connection if one of them is missing.
Changing the scopes later: add them to a new version of the app and release it. For a store of your own organization, releasing the version approves the change. If the error persists, reinstall the app on the store from its Installs card, then try again.

Step 2: Connect from Semji

1

Open the CMS integrations

In Semji, go to Settings → Integrations, find Shopify among the CMS integrations and click Enable. If Semji opens the Shopify page first, click Enable there.
2

Enter your store's credentials

Fill in the three fields:
  • Store domain: your myshopify.com domain, e.g. your-store.myshopify.com (the handle alone or your admin URL also work, your public domain does not).
  • Client ID: copied in Step 1.
  • Client secret: copied in Step 1.
Click Next. Semji tests the connection live: it requests an access token from your store with the Client ID and the Client secret, checks the scopes granted to the app, and reads your store’s name and primary domain. Nothing is written to your store.
3

Pick the Shopify tools

Choose what AI agents can do on your store. Every tool is enabled by default; you can disable any of them:
  • Describe content model: inspect the languages and writable fields of pages, collections and products.
  • List contents: browse and search pages, collections and products.
  • Read content: retrieve a page, collection or product and its content.
  • Create & update content: create and update pages and products, update collection content.
  • Delete content: delete pages (destructive).
  • Describe blog model: inspect the blogs, tags, languages and writable fields of blog posts.
  • List blog posts: browse and search blog posts.
  • Read blog post: retrieve a blog post and its content.
  • Create & update blog posts: create and update blog posts (drafts by default).
  • Delete blog post: delete blog posts (destructive).
  • Register translations: register the translation of an entry for a store language.
4

Connect

Click Connect. Semji verifies the credentials one more time, then saves the connection. Shopify now shows as Enabled.

What Semji can do once connected

A few guarantees built into the connector:
  • Collections are never created or deleted, products are never deleted. A product created by Semji is a draft holding its title, description, handle and search engine listing only: set its price, inventory, variants and sales channels in Shopify before making it active.
  • A product’s price, inventory, tags and vendor are never written, and its status is never changed.
  • New blog posts and pages are drafts until you ask an agent to publish them, and a published post or page is never switched back to draft.
  • Some edits go live immediately: any update to an active product, a collection, or an already published blog post or page (Shopify keeps no draft revision), and any translation in a published language. The CMS Publisher agent tells you the change will be visible at once and waits for your explicit approval before writing.
  • Updates are partial: only the fields the agent changes are written, everything else keeps its current value.
  • Changing a handle redirects the old URL to the new one.
  • Deletion is limited to blog posts and pages, and agents ask for your explicit confirmation of the exact entry before deleting it.

Languages and translations

  • Translations are registered on the original entry, for one of the languages enabled on your store (Settings → Languages in Shopify), never as a separate copy per language. Semji writes translations through Shopify’s Admin API.
  • The target language must be enabled on your store and cannot be its primary language.
  • A translation in a published language is live immediately. In a language that is enabled but not published yet, it stays invisible to buyers until you publish the language.
  • Translatable fields: title, content, excerpt (blog posts), SEO title and description, and handle.
  • When the original entry changes, Shopify flags its translations as outdated; agents see that flag when they read the entry.

Manage or disconnect

In Settings → Integrations, open Shopify:
  • Manage tools: enable or disable each tool individually.
  • Disable: removes the connection for the whole workspace. It does not uninstall the app from your store: uninstall it from your Shopify admin (Settings → Apps) if you no longer need it.
The store domain, the Client ID and the Client secret cannot be edited in Semji. To connect another store or to change the credentials, disable the integration and connect again (the tool selection is reset).
Rotating the Client secret: in the Dev Dashboard, open the app’s Settings, click Rotate next to the Client secret and generate a new secret. Disable the Shopify integration in Semji and connect again with the new secret (choose the tools again: the selection is not kept), then revoke the old secret in the Dev Dashboard. Revoking the old secret first breaks the connection until you reconnect.

Network and firewalls

Semji only calls Shopify’s Admin API on your store’s myshopify.com domain, which Shopify hosts. Your storefront’s public domain is never called (Semji only uses it to build links to your content), so a firewall, WAF, or Cloudflare rule in front of your storefront does not affect the connection, and there is no IP address to allow.

Troubleshooting

Shopify refused to issue an access token. Check, in order:
  1. The Client ID or the Client secret is wrong: copy both again from the app’s Settings in the Dev Dashboard. If the secret was rotated, use the new one.
  2. The app is not installed on the store: open the app’s Installs card in the Dev Dashboard and install it on your store.
  3. The app belongs to another organization: an app created in an agency’s or partner’s organization cannot request tokens for your store. Create the app from your own Shopify admin (Settings → Apps → Develop apps → Build apps in Dev Dashboard) as described in Step 1.
The app’s released version lacks at least one of the seven scopes. Add the missing scopes to a new version of the app, release it, and try again. If the error persists, reinstall the app on the store from its Installs card. See Access scopes for the app.
  • The store domain is your public domain (e.g. www.your-store.com): enter your your-store.myshopify.com domain instead.
  • The store domain is malformed: a store handle only contains lowercase letters, digits, and dashes.
  • Shopify returned a temporary error: wait a minute and try again.
No store exists with this handle. Check the spelling of your myshopify.com domain: it can differ from your store’s name or public domain.
Shopify answered that the store cannot serve API requests, for example a store frozen for an unpaid bill, or a locked store. Check the store’s status in your Shopify admin, then try again.
The request did not reach Shopify (unknown domain, network error, or timeout). Check the store domain and try again a bit later.
A workspace connects a single Shopify store. Disable the current Shopify integration first, then connect the new store.
If you just reinstalled the app or released a new version, ask the agent again: Semji requests a new token after the first refused request. Otherwise, the connection worked but Shopify now refuses the requests. Frequent causes: the app was uninstalled from the store, its Client secret was rotated or revoked, or its scopes changed. Reinstall the app or release the missing scopes, and if the secret changed, disable the integration and connect again with the new secret.
Translations can only target a language enabled on your store. Add the language under Settings → Languages in your Shopify admin, then ask the agent again.
That is Shopify’s behavior, not a bug: collections, active products, and published blog posts and pages have no draft revision, so every update is live on the storefront. For this reason, Semji’s CMS Publisher agent warns you and asks for your approval before such a write. New blog posts, pages and products, in contrast, are created as drafts, and a draft product stays hidden until you make it active.