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.
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
Open the Dev Dashboard from your store
Create the app
Set the access scopes and release the version
-
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).
Install the app on your store
Copy the Client ID and the Client secret
Access scopes for the app
Enter all of the following scopes on the app’s version:Step 2: Connect from Semji
Open the CMS integrations
Enter your store's credentials
- 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.
Pick the Shopify tools
- 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.
Connect
What Semji can do once connected
- 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.
Network and firewalls
Semji only calls Shopify’s Admin API on your store’smyshopify.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 rejected the credentials. Check the Client ID and Client secret, and that the app is installed on this store (the app and the store must belong to the same Shopify organization)."
"Shopify rejected the credentials. Check the Client ID and Client secret, and that the app is installed on this store (the app and the store must belong to the same Shopify organization)."
- 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.
- The app is not installed on the store: open the app’s Installs card in the Dev Dashboard and install it on your store.
- 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 is missing Admin API access scopes. Grant read_content, write_content, read_products, write_products, read_translations, write_translations and read_locales on its version, reinstall it, then try again."
"The app is missing Admin API access scopes. Grant read_content, write_content, read_products, write_products, read_translations, write_translations and read_locales on its version, reinstall it, then try again."
"Could not connect to the Shopify store. Check the store domain and the app credentials."
"Could not connect to the Shopify store. Check the store domain and the app credentials."
- The store domain is your public domain (e.g.
www.your-store.com): enter youryour-store.myshopify.comdomain 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 Shopify store answers on this domain. Check the store domain."
"No Shopify store answers on this domain. Check the store domain."
myshopify.com domain: it can differ from your store’s name or public
domain."The store is not reachable through its Admin API right now (frozen, locked or behind a security challenge). Check the store status in Shopify and try again."
"The store is not reachable through its Admin API right now (frozen, locked or behind a security challenge). Check the store status in Shopify and try again."
"The store cannot be reached. Check the domain and try again."
"The store cannot be reached. Check the domain and try again."
"This workspace is already connected to a Shopify store. Disconnect the existing integration before creating a new one."
"This workspace is already connected to a Shopify store. Disconnect the existing integration before creating a new one."
An agent reports a Shopify authentication or permission error
An agent reports a Shopify authentication or permission error
An agent reports that a language is not enabled on the store
An agent reports that a language is not enabled on the store
A product or collection update went live immediately
A product or collection update went live immediately
Related
- Sync drafts to your CMS: API-based publishing flow, if you prefer to drive the sync yourself.