{"count":19,"docs":[{"slug":"blog/dry-run-preview","title":"Dry-run: preview every agent action before it happens","tags":["blog","feature","safety"],"body":"\n# Dry-run: preview every agent action before it happens\n\nEvery write tool in Shopigent accepts `dry_run: true`. When set, the tool validates the input, resolves all references (products, variants, customers), and returns **the exact mutation it would execute** — without executing it.\n\n## Why it matters\n\nAgents are great at intent, imperfect at details. Dry-run catches the gap:\n\n```json\n{\n  \"tool\": \"discounts_create\",\n  \"dry_run\": true,\n  \"input\": { \"title\": \"WEEKEND20\", \"value\": \"20%\", \"applies_to\": \"collection:hoodies\" }\n}\n```\n\nThe response shows the resolved discount — which collection ID matched, start/end dates, usage limits — so the agent (or you) can verify before committing.\n\n## Dry-run + confirmation gate\n\nThe two features stack:\n\n1. Agent calls the tool with `dry_run: true` → sees the preview.\n2. Agent calls it for real → Shopigent pauses at the **confirmation gate**.\n3. You approve in the dashboard → the mutation runs and lands in the **audit log**.\n\nThree checkpoints between \"the agent had an idea\" and \"your store changed\". That's how it should be.\n"},{"slug":"blog/shopigent-vs-raw-api-key","title":"Shopigent vs a raw Admin API key: why curated tools win","tags":["blog","comparison","security"],"body":"\n# Shopigent vs a raw Admin API key\n\nTechnically, you don't need Shopigent to connect an LLM to Shopify. You can create a custom app, grab an Admin API token, and hand it to your agent. Merchants ask us why they shouldn't. Fair question — here's the honest comparison.\n\n## What a raw token gives you\n\n- **Everything, forever.** Whatever scopes the token has, the agent has — 24/7, no questions asked.\n- **No record.** Shopify logs API calls internally, but *you* have no readable trail of what your agent did or why.\n- **No brakes.** A hallucinated ID in a `productDelete` mutation executes just as happily as a correct one.\n- **Raw GraphQL complexity.** The agent burns tokens (and makes mistakes) constructing mutations, cursors, and error handling from scratch.\n\n## What curated tools change\n\n| | Raw Admin token | Shopigent |\n|---|---|---|\n| Access control | All-or-nothing scopes | Per-category toggles, per-key |\n| Destructive actions | Execute immediately | Pause at the confirmation gate |\n| Visibility | None | Full audit log (input, result, latency) |\n| Agent ergonomics | Raw GraphQL | 51 validated, documented tools |\n| Failure mode | Silent damage | Rejected input or pending approval |\n| Revocation | Rotate token, redeploy | Revoke key in one click |\n\n## The deeper point\n\nAgents don't fail like humans. They fail *confidently*, at machine speed, in bulk. The right response isn't \"never connect an agent\" — it's **structure the access so mistakes are cheap**. Validated inputs catch most errors; the confirmation gate catches the rest; the audit log tells you what happened either way.\n\nThat's the entire product, honestly. Fewer capabilities exposed, more safely, with receipts.\n\n*Try it free — read-only access needs zero trust.*\n"},{"slug":"blog/use-case-bulk-seo","title":"Use case: bulk-editing product SEO with an agent","tags":["blog","use-case","products"],"body":"\n# Use case: bulk-editing product SEO with an agent\n\nProduct SEO is the most common \"should do, never does\" task. There are hundreds of products and writing unique descriptions by hand is brutal. An agent changes the math.\n\n## The prompt\n\n```\nFor products missing a meta description, write a 150-character meta description\nand a compelling product description using the title and vendor. Don't change\nprices or anything else. Show me a preview first.\n```\n\n## How it stays safe\n\n- The agent uses `products_list` (read) to find gaps — no writes yet.\n- For each product it drafts text, then calls `products_update` with `dry_run: true` so you see the before/after.\n- Only when you approve does the change go live. And you can scope it: \"only the apparel collection\" so nothing else moves.\n\n## Why not a bulk editor app?\n\nBulk editors are fast but dumb — they apply a template. An agent *understands* the product and writes per-item copy. Combined with the confirmation gate, you get bespoke quality with the safety of a bulk tool.\n\n> Tip: start read-only on the Free plan. Use the audit log to see exactly what the agent proposed, then upgrade to Growth and approve in one pass.\n"},{"slug":"blog/use-case-inventory-sync","title":"Use case: inventory sync after a stocktake","tags":["blog","use-case","inventory"],"body":"\n# Use case: inventory sync after a stocktake\n\nAfter a physical count, you often need to reconcile Shopify stock with what's on the shelves. Doing it by hand in the admin is slow and error-prone. Here's the agent-assisted version.\n\n## The prompt\n\n```\nFrom the attached stock count (SKU → quantity), adjust each variant's available\ninventory to match. Use inventory_adjust with dry_run first and report what will change.\n```\n\n## What happens\n\n1. The agent matches each SKU to a variant via `inventory_levels_list` (read) — catching typos before anything changes.\n2. For each mismatch it calls `inventory_adjust` with `dry_run: true`, returning a clear summary: \"SKU AB-123: 14 → 9\".\n3. You review the summary in the confirmation card and approve. No mismatched number slips through because the preview shows every delta.\n\n## The audit trail\n\nEvery adjustment — input, result, timestamp — lands in the audit log. So if a number looks wrong next month, you can see exactly when it was set and by which agent session.\n\n> Particularly useful for stores with multiple locations: the agent can target a specific location per SKU without you hunting through dropdown menus.\n"},{"slug":"blog/use-case-weekend-sale","title":"Use case: set up a weekend sale in two minutes","tags":["blog","use-case","discounts"],"body":"\n# Use case: set up a weekend sale in two minutes\n\nThe workflow merchants automate first is almost always discounts. It's fiddly in the admin (collection, value, dates, limits, code) and it's exactly the kind of structured task agents nail. Here's the full flow with Shopigent.\n\n## The prompt\n\nIn Claude, Cursor, or Hermes:\n\n```\nCreate a 20% discount code WEEKEND20 for the Hoodies collection,\nvalid Friday 00:00 to Sunday 23:59, one use per customer.\n```\n\n## What the agent does\n\n1. `products_list` / collections lookup — resolves \"Hoodies\" to the real collection ID.\n2. `discounts_create` with `dry_run: true` — previews the exact discount object.\n3. `discounts_create` for real — and here it **stops**.\n\n## What you do\n\nYour Shopigent dashboard shows a confirmation card:\n\n> **discounts_create** — WEEKEND20 · 20% off · collection: Hoodies (14 products) · Fri 00:00 → Sun 23:59 · 1/customer\n\nOne tap to approve. The discount goes live, the action lands in the audit log, and the agent confirms back in chat.\n\n## Variations that work just as well\n\n- \"Extend WEEKEND20 until Monday night\" → `discounts_update`\n- \"How did WEEKEND20 perform?\" → `orders_list` filtered by discount code\n- \"Kill the sale now\" → `discounts_delete` (confirmation again — deletes are always gated)\n\n## Why this beats doing it by hand\n\nNot because clicking is hard — because **the agent gets the details right** (IDs, dates, limits) and the gate means you review *one summary card* instead of five admin screens. Two minutes, fully audited.\n"},{"slug":"blog/why-ai-agents-for-shopify","title":"Why your Shopify store needs an AI agent (and how to stay in control)","tags":["blog","ai-agents","mcp"],"body":"\n# Why your Shopify store needs an AI agent (and how to stay in control)\n\nAI agents are past the demo phase. They can genuinely run store operations: updating product copy, building discounts, answering \"what were my top sellers last month\", adjusting inventory after a stocktake. The blocker was never intelligence — it was **safe access**.\n\n## The problem with raw API access\n\nGive an agent your Admin API key and you've given it everything, forever, with no record. One hallucinated `DELETE` and your catalog is gone. That's why most merchants (rightly) never connect an LLM to their store.\n\n## Scoped tools + human gate\n\nShopigent takes a different route:\n\n1. **You pick the categories** an agent can touch — Products yes, Orders no, for example.\n2. **Reads are free, writes are gated.** Any create/edit/delete/refund pauses and asks *you* to approve it in the dashboard.\n3. **Everything is logged.** Every call, its input, its result, its latency.\n\n> The agent proposes; you approve. That's the entire trust model, and it works.\n\n## What merchants actually automate first\n\nFrom what we see, the first wins are boring and valuable:\n\n- Bulk product copy cleanup and SEO descriptions\n- Seasonal discount setup (\"20% off everything in Collection X this weekend\")\n- Answering ops questions without opening five admin tabs\n- Tagging and segmenting customers after imports\n\nStart read-only on the Free plan, watch the audit log for a week, then enable writes for the categories you trust. Control first, speed second — and you end up with both.\n"},{"slug":"changelog","title":"Changelog","tags":["changelog"],"body":"\n# Changelog\n\n## 2026-07-27\n- **Landing redesign** — new mint/violet brand palette, dark mode with persistence, animated hero, and a live \"agent session\" demo.\n- **Blog & Docs site** — public docs and blog now render entirely from markdown; agents can consume everything as JSON at `/api/content`.\n- **Tool explorer** — interactive filterable view of the 51 curated tools on the homepage.\n\n## 2026-07-20\n- **Connect guides** — added setup guides for Claude, Cursor, and Hermes agents.\n- **Plans & Billing doc** — clarified plan limits and upgrade flow.\n\n## 2026-07-12\n- **Security & Trust doc** — published our access model, key handling, and data practices.\n- **Scopes reference** — mapped every tool category to its Shopify OAuth scopes.\n\n## 2026-06-30\n- **Confirmation gate** ships to all paid plans — every destructive action requires an in-dashboard approval.\n- **Audit log** — records tool name, input, result, and latency for every call.\n\n## 2026-06-15\n- **Dry-run preview** — every write tool supports `dry_run: true` to preview the exact mutation before executing.\n\n## 2026-05-01\n- **Public launch** — Shopigent on the Shopify App Store with 51 curated tools across 8 categories and scope-based access control.\n"},{"slug":"guides/connect-claude","title":"Connect Claude to your store","tags":["guide","claude","mcp"],"body":"\n# Connect Claude to your store\n\nThis guide shows how to connect Claude (Desktop or Code) to Shopigent's MCP endpoint.\n\n> **Prerequisite:** You've installed Shopigent and issued an MCP API key from the dashboard. See [Getting Started](/guides/getting-started).\n\n## 1. Add the MCP server\n\nAdd Shopigent to your Claude MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"shopigent\": {\n      \"url\": \"https://shopigent-mcp-server-production.up.railway.app/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_API_KEY\"\n      }\n    }\n  }\n}\n```\n\n## 2. Verify the connection\n\nAsk Claude something read-only first:\n\n```\nList my 5 most recent orders.\n```\n\nClaude should call `orders_list` and return real data from your store.\n\n## 3. Try a write action (Growth/Pro)\n\n```\nCreate a 10% discount code SUMMER10 valid until end of month.\n```\n\nShopigent will show a **confirmation prompt** in the app before the discount is created. Approve it, and check the audit log to see the recorded action.\n\n## Troubleshooting\n\n- **401 Unauthorized** — the API key is wrong or was revoked. Issue a new one from the dashboard.\n- **Tool not available** — the category (e.g. Discounts) is disabled in your Curated Tools settings, or your plan doesn't include write access.\n- **Action blocked** — a pending confirmation is waiting in the Shopigent app.\n"},{"slug":"guides/connect-cursor","title":"Connect Cursor to your store","tags":["guide","cursor","mcp"],"body":"\n# Connect Cursor to your store\n\nCursor supports MCP servers natively, which means your editor's AI can read and manage your Shopify store through Shopigent while you work.\n\n> **Prerequisite:** You've installed Shopigent and issued an MCP API key from the dashboard. See [Getting Started](/guides/getting-started).\n\n## 1. Add the MCP server\n\nOpen **Cursor Settings → MCP → Add new MCP server**, or edit `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"shopigent\": {\n      \"url\": \"https://shopigent-mcp-server-production.up.railway.app/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_API_KEY\"\n      }\n    }\n  }\n}\n```\n\nRestart Cursor. The Shopigent tools appear in the MCP tools list.\n\n## 2. Verify\n\nIn a Cursor chat, ask:\n\n```\nUsing shopigent, list my products that are out of stock.\n```\n\n## Ideas for developer workflows\n\n- Generate SEO descriptions in your editor and push them straight to products.\n- Pull real product data while building a storefront, instead of mocking it.\n- Update theme content (Pro plan) while iterating on Liquid locally.\n\n## Troubleshooting\n\n- **Tools don't appear** — check the JSON syntax and restart Cursor completely.\n- **401 Unauthorized** — regenerate the API key in the Shopigent dashboard.\n- **Writes rejected** — your plan is read-only (Free) or the category is disabled.\n"},{"slug":"guides/connect-hermes","title":"Connect Hermes Agent to your store","tags":["guide","hermes","mcp"],"body":"\n# Connect Hermes Agent to your store\n\nHermes Agent can operate your store conversationally — from Discord, Telegram, or the desktop app — through Shopigent's MCP endpoint.\n\n> **Prerequisite:** You've installed Shopigent and issued an MCP API key. See [Getting Started](/guides/getting-started).\n\n## 1. Add the MCP server to Hermes\n\n```bash\nhermes mcp add shopigent https://shopigent-mcp-server-production.up.railway.app/mcp \\\n  --header \"Authorization: Bearer YOUR_API_KEY\"\n```\n\nOr add it to your Hermes `config.yaml`:\n\n```yaml\nmcp:\n  servers:\n    shopigent:\n      url: https://shopigent-mcp-server-production.up.railway.app/mcp\n      headers:\n        Authorization: \"Bearer YOUR_API_KEY\"\n```\n\n## 2. Talk to your store\n\nFrom any connected chat:\n\n```\nΠόσες παραγγελίες είχαμε σήμερα; Ποια προϊόντα πούλησαν περισσότερο;\n```\n\nHermes calls `orders_list` / `products_list` and answers with live data — in any language.\n\n## 3. Autonomous routines\n\nBecause Hermes supports scheduled jobs, you can combine it with Shopigent for recurring ops:\n\n- Daily sales summary delivered to Discord every morning\n- Low-stock alerts checked hourly\n- Weekly draft of a promo discount, waiting for your approval in the confirmation gate\n\nThe confirmation gate matters most here: an autonomous agent can *prepare* destructive actions around the clock, but nothing executes until you approve it.\n\n## Troubleshooting\n\n- **Connection fails** — verify the URL and that the key hasn't been revoked.\n- **Tool missing** — the category is toggled off in Curated Tools, or your plan doesn't include it.\n"},{"slug":"guides/getting-started","title":"Getting Started with Shopigent","tags":["guide","getting-started"],"body":"\n# Getting Started with Shopigent\n\nThis guide walks you through connecting an AI agent to your Shopify store with Shopigent.\n\n## 1. Install\nInstall Shopigent from the Shopify App Store and grant the scopes your store needs.\n\n## 2. Enable tool categories\nOpen the **Curated Tools** dashboard in the app. Each category (Products, Orders, Customers, etc.) has a toggle — enable only what you want your agent to access.\n\n## 3. Issue an MCP API key\nFrom the dashboard, generate an MCP API key. The plaintext key is shown once — store it securely. Shopigent stores only a hash.\n\n## 4. Connect your agent\nPoint your MCP client (Claude, Cursor, Hermes, or your own) at the Shopigent MCP endpoint using the API key. Your agent can now list and act on your store data within the enabled scopes.\n\n## 5. Confirmation gate\nAny destructive action (create, edit, delete, refund) triggers a confirmation prompt. Approve it to proceed. Every action is recorded in the audit log.\n\n## Tips\n- Start with **Free** (read-only) to explore, then upgrade to **Growth** or **Pro** for write access.\n- Review the **audit log** regularly to see what your agents did.\n- Use **dry-run** to preview an action before committing it.\n"},{"slug":"guides/plans-and-billing","title":"Plans & Billing","tags":["guide","plans","billing"],"body":"\n# Plans & Billing\n\nShopigent bills through the Shopify App Store, so charges appear on your regular Shopify invoice. No separate card, no separate account.\n\n## Plans at a glance\n\n| | Free | Growth | Pro | Agency |\n|---|---|---|---|---|\n| Price | $0 | $9.99/mo | $29/mo | $99/mo |\n| Read tools | ✅ All | ✅ All | ✅ All | ✅ All |\n| Write tools | — | ✅ Core resources | ✅ Core resources | ✅ Core resources |\n| Translations | — | — | ✅ | ✅ |\n| Theme content & Liquid | — | — | ✅ | ✅ |\n| Tool calls / day | 25 | 500 | Unlimited | Unlimited |\n| Multi-store | — | — | — | ✅ (coming soon) |\n\n**Core resources** = Products, Orders, Customers, Discounts, Content, Inventory, Fulfillments.\n\n## How limits work\n\n- A **tool call** is one MCP tool invocation — one `products_list` call, one `orders_refund`, etc.\n- Limits reset at midnight UTC.\n- Calls that hit the confirmation gate count once (not again on approval).\n- `dry_run` calls count as normal calls.\n\n## Upgrading & downgrading\n\n1. Open the Shopigent dashboard in your Shopify admin.\n2. Go to **Plan** and pick the new tier.\n3. Shopify shows its standard approval screen; charges are prorated by Shopify automatically.\n\nDowngrades apply at the end of the current billing cycle. Your settings, keys, and audit log are kept — write tools simply stop being available if the new plan doesn't include them.\n\n## FAQ\n\n**Do unused calls roll over?** No, the daily allowance resets every day.\n\n**What happens if I hit my limit?** Tools return a clear `rate_limited` error with the reset time. Reads on the Free plan are throttled, never silently dropped.\n\n**Is there a trial for paid plans?** Growth and Pro include a 7-day free trial via Shopify's standard trial mechanism.\n"},{"slug":"guides/security-and-trust","title":"Security & Trust","tags":["guide","security","trust"],"body":"\n# Security & Trust\n\nGiving an AI agent access to your store is a trust decision. Here is exactly how Shopigent limits, records, and controls that access.\n\n## The access model\n\n1. **You choose the categories.** Each of the 8 tool categories (Products, Orders, …) has an on/off toggle. Disabled categories are invisible to agents — the tools aren't listed, let alone callable.\n2. **Reads and writes are separated by plan.** Free is read-only by design; write tools only exist on paid plans.\n3. **Destructive actions stop at the confirmation gate.** Create, edit, delete, refund — the call pauses and a confirmation card appears in your dashboard. Nothing executes until a human approves it.\n4. **Everything is written to the audit log.** Tool name, full input, result, latency, timestamp. The log is append-only.\n\n## API keys\n\n- Keys are shown **once** at creation; Shopigent stores only a salted hash.\n- Keys can be revoked instantly from the dashboard.\n- Each key is scoped to one store.\n\n## Data handling\n\n- Shopigent processes your store data to execute tool calls; it does not sell it or use it for advertising.\n- Store data is **not used to train AI models**.\n- Audit log entries are retained so you can review agent activity; you can request deletion of your data at any time.\n- Uninstalling the app triggers Shopify's standard data-removal webhooks and Shopigent deletes stored shop data accordingly (see [Privacy Policy](/privacy-policy)).\n\n## Shopify-side protections\n\n- Shopigent requests only the Shopify scopes needed for the categories you use.\n- All traffic runs over TLS.\n- Billing is handled entirely by Shopify — Shopigent never sees your payment details.\n\n## Reporting a vulnerability\n\nFound something? Email **shopigent@greeknous.com**. We respond fast and appreciate responsible disclosure.\n"},{"slug":"guides/troubleshooting-faq","title":"Troubleshooting & FAQ","tags":["guide","faq","troubleshooting"],"body":"\n# Troubleshooting & FAQ\n\n## Connection issues\n\n**401 Unauthorized**\nThe API key is invalid or revoked. Generate a new key in the dashboard and update your MCP client config. Remember: keys are shown only once.\n\n**MCP client can't find the server**\nCheck the endpoint URL and that your client actually reloaded its config (Cursor and Claude Desktop need a full restart).\n\n## Missing or failing tools\n\n**A tool doesn't appear in the tools list**\nThe category is toggled off in **Curated Tools**, or your plan doesn't include it (e.g. theme tools require Pro).\n\n**`plan_upgrade_required` error**\nThe tool exists but your plan is read-only for it. See [Plans & Billing](/guides/plans-and-billing).\n\n**`rate_limited` error**\nYou hit the daily call allowance (Free 25/day, Growth 500/day). The error includes the reset time (midnight UTC).\n\n## Confirmation gate\n\n**\"Action pending confirmation\" — nothing happens**\nThe action is waiting for approval in the Shopigent dashboard. Open the app in Shopify admin and approve or reject it.\n\n**Can I turn off confirmations?**\nNo — that's deliberate. Every destructive action requires human approval. Use `dry_run` for previews instead.\n\n## General\n\n**Does Shopigent work with any MCP client?**\nYes — anything that speaks Model Context Protocol: Claude, Cursor, Hermes, custom agents.\n\n**Can agents see data in disabled categories?**\nNo. Disabled categories aren't listed to the agent at all.\n\n**Where do I see what my agent did?**\nThe **Audit Log** in the dashboard — every call with input, result, and latency.\n\n**How do I completely revoke an agent's access?**\nRevoke its API key. Effect is immediate.\n\nStill stuck? Email **shopigent@greeknous.com**.\n"},{"slug":"index","title":"Shopigent — Operate your Shopify store with AI agents","tags":["home","overview"],"body":""},{"slug":"privacy-policy","title":"Privacy Policy","tags":["legal","privacy"],"body":"\n# Shopigent — Privacy Policy\n\n**Last updated:** 2026-07-24 | **Controller:** Greek Nous | **Contact:** shopigent@greeknous.com\n\n## 1. What Shopigent is\nShopigent is a Shopify app that lets merchants operate their store through AI agents (any MCP-compatible client, e.g. Hermes, Claude, Cursor). It exposes a curated set of read and write operations (\"tools\") over the Shopify Admin API, gated by the merchant's chosen plan and the scopes they grant at install time.\n\n## 2. Data we access\nAt install, the merchant authorizes Shopify OAuth scopes. Shopigent only accesses data required by the tools the merchant enables. Possible scope categories: products, orders, customers, discounts, inventory, fulfillments, online store content, and themes. We access store data **only** to fulfill a tool call the merchant (or their agent, on their behalf) explicitly triggers.\n\nWe do **not** access: payment instrument numbers, passwords, or any data outside the authorized Shopify scopes.\n\n## 3. Data we store\n- **Shop connection metadata** (store domain, granted scopes, current plan).\n- **API key hashes** — we store only a salted SHA-256 hash of the MCP API key. The plaintext key is shown once at creation and never stored.\n- **Tool-call audit logs** — for every tool call we record: shop, tool key, operation type, input arguments, result status, and latency.\n- **Plan / billing events** — subscription status and Shopify charge IDs (received via Shopify webhooks), not card numbers.\n\n## 4. Data we share\nWe do not sell or share merchant data with third parties except:\n- with **Shopify**, necessarily, to perform the requested operations;\n- with the merchant's chosen AI client, only the data needed to answer the specific request they made.\n\n## 5. Data retention\nAudit logs and connection metadata are retained while the app is installed. Uninstalling the app triggers deletion of store-specific records.\n\n## 6. Security\nMCP API keys are hashed (never stored in plaintext). All Admin API calls use the store's OAuth access token, transmitted only to Shopify over TLS. Destructive tools require an explicit confirmation step before they run.\n\n## 7. Your rights\nMerchants may request deletion of their data at any time via shopigent@greeknous.com or by uninstalling the app from their Shopify admin.\n\n## 8. Changes\nMaterial changes to this policy will be communicated via the support email.\n"},{"slug":"reference/scopes-and-permissions","title":"Scopes & Permissions Reference","tags":["reference","scopes","permissions"],"body":"\n# Scopes & Permissions Reference\n\nTwo layers of scoping protect your store: **Shopify OAuth scopes** (what the app itself may access) and **Shopigent category toggles** (what your agents may access). An agent can never exceed either layer.\n\n## Category → Shopify scope map\n\n| Shopigent category | Read scope | Write scope |\n|---|---|---|\n| Products | `read_products` | `write_products` |\n| Orders | `read_orders` | `write_orders` |\n| Customers | `read_customers` | `write_customers` |\n| Discounts | `read_discounts` | `write_discounts` |\n| Content (pages/blogs) | `read_content` | `write_content` |\n| Themes | `read_themes` | `write_themes` |\n| Inventory | `read_inventory` | `write_inventory` |\n| Fulfillments | `read_fulfillments` | `write_fulfillments` |\n| Translations *(Pro)* | `read_translations` | `write_translations` |\n\n## How the layers interact\n\n```\nAgent calls tool\n   │\n   ├─ 1. Is the category enabled in Curated Tools?   ── no → tool not even listed\n   ├─ 2. Does the plan allow this tool type?          ── no → plan_upgrade_required\n   ├─ 3. Does the app hold the Shopify scope?         ── no → scope_missing\n   ├─ 4. Is it destructive?                           ── yes → confirmation gate\n   └─ 5. Execute → record in audit log\n```\n\n## Principle of least privilege\n\n- Start with only the categories you need — you can enable more later without reinstalling.\n- Prefer separate API keys per agent/client, so revoking one doesn't break the others.\n- Review the audit log after enabling a new category to see how your agent uses it.\n"},{"slug":"reference/tools","title":"Tools Reference","tags":["reference","tools"],"body":"\n# Tools Reference\n\nShopigent exposes **51 curated tools** across 8 categories. Each category can be toggled on/off per store, and write tools always pass through the confirmation gate.\n\n> Tools are *curated operations*, not raw API passthrough — inputs are validated, outputs are trimmed to what agents actually need, and destructive calls require human approval.\n\n## Products\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `products_list` | Read | List products with filters (status, vendor, collection) |\n| `products_get` | Read | Full product detail incl. variants, images, SEO |\n| `products_create` | Write | Create a product with variants and options |\n| `products_update` | Write | Update title, description, status, SEO, tags |\n| `products_delete` | Write | Delete a product (confirmation required) |\n| `variants_update` | Write | Update price, SKU, inventory policy per variant |\n\n## Orders\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `orders_list` | Read | List orders with filters (status, date, customer) |\n| `orders_get` | Read | Full order detail incl. line items and transactions |\n| `orders_update` | Write | Update notes, tags, shipping address |\n| `orders_cancel` | Write | Cancel an order (confirmation required) |\n| `orders_refund` | Write | Issue full or partial refunds (confirmation required) |\n\n## Customers\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `customers_list` | Read | List/search customers |\n| `customers_get` | Read | Customer detail incl. order history |\n| `customers_create` | Write | Create a customer record |\n| `customers_update` | Write | Update contact info, tags, notes |\n\n## Discounts\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `discounts_list` | Read | List discount codes and automatic discounts |\n| `discounts_create` | Write | Create percentage/fixed/BXGY discounts |\n| `discounts_update` | Write | Change value, dates, usage limits |\n| `discounts_delete` | Write | Remove a discount (confirmation required) |\n\n## Content\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `pages_list` / `pages_get` | Read | Store pages |\n| `pages_create` / `pages_update` | Write | Manage page content |\n| `blogs_list` / `articles_list` | Read | Blogs and articles |\n| `articles_create` / `articles_update` | Write | Publish and edit blog posts |\n\n## Themes *(Pro)*\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `themes_list` | Read | Installed themes and roles |\n| `theme_content_get` | Read | Read section/block settings (JSON templates) |\n| `theme_content_update` | Write | Edit texts, images, settings in theme sections |\n| `theme_liquid_get` / `theme_liquid_update` | Read/Write | Raw Liquid file editing (confirmation required) |\n\n## Inventory\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `inventory_levels_list` | Read | Stock levels per location |\n| `inventory_adjust` | Write | Adjust available quantity |\n\n## Fulfillments\n\n| Tool | Type | What it does |\n|------|------|--------------|\n| `fulfillments_list` | Read | Fulfillment status per order |\n| `fulfillments_create` | Write | Mark items fulfilled, add tracking |\n\n## Cross-cutting features\n\n- **Dry-run** — every write tool accepts `dry_run: true` to preview the exact mutation without executing.\n- **Confirmation gate** — destructive calls pause until approved in the Shopigent dashboard.\n- **Audit log** — every call is recorded with input, result, and latency.\n- **Plan gating** — Free = read-only · Growth = write on core resources · Pro = translations + themes.\n"},{"slug":"terms-of-service","title":"Terms of Service","tags":["legal","terms"],"body":"\n# Shopigent — Terms of Service\n\n**Last updated:** 2026-07-24 | **Provider:** Greek Nous | **Contact:** shopigent@greeknous.com\n\n## 1. Acceptance\nBy installing or using Shopigent (\"the App\") you agree to these Terms. The App is provided as-is, without warranty, for use with your Shopify store.\n\n## 2. Plans and billing\nThe App offers Free, Growth, and Pro plans (Agency is pending). Plan limits (e.g. daily tool-call allowances, available tools) are enforced as described in the App. Paid plans are billed through Shopify's billing API; cancelling reverts the store to the Free plan. We do not store card details.\n\n## 3. Use of tools\nThe App exposes operations over your Shopify store. You are responsible for the actions your agents perform. Destructive operations (create/delete/refund/etc.) require an explicit confirmation step before execution. You should review audit logs regularly.\n\n## 4. Scope authorization\nThe App only performs operations your store has authorized via Shopify OAuth scopes. Enabling a tool does not grant new Shopify scopes; it only makes an already-authorized operation available to your agents.\n\n## 5. Acceptable use\nYou agree not to use the App to violate Shopify's Acceptable Use Policy, applicable law, or the rights of others. We may suspend access for abuse.\n\n## 6. Limitation of liability\nThe App is provided \"as is.\" To the maximum extent permitted by law, Greek Nous is not liable for indirect or consequential damages arising from use of the App, including merchant actions performed via AI agents.\n\n## 7. Termination\nEither party may terminate use by uninstalling the App. Upon uninstall, store data handling follows our Privacy Policy.\n\n## 8. Contact\nQuestions: shopigent@greeknous.com\n"}]}