IziStore · Agent integrations

    Drive IziStore from your agent

    One tool registry backs the in-app assistant, the REST API and the MCP server. What you connect here behaves exactly as it does inside the app.

    GET /api/v1/tools
    POST /api/v1/tools/{toolId}
    /api/mcp
    /.well-known/agents.json
    Contents
    • What this is
    • Get a key
    • REST API
    • MCP
    • Command line
    • Confirmation codes
    • Permissions
    • AI allowance
    • Errors
    • Manifest
    Step 01

    What the agent tools are

    The agent tools are IziStore's capabilities — read orders, edit a product, adjust stock, launch a campaign — each declared once in a shared registry along with its argument schema and the permissions it needs.

    The in-app assistant, the REST API and the MCP server all read that same registry, so a tool behaves identically wherever it is called from, with the same scope, store and confirmation checks applied.

    The command to paste

    In Claude Code, a single line connects your store. Swap in your own key.

    claude code
    claude mcp add --transport http izistore https://izistore.app/api/mcp \
      --header "Authorization: Bearer sk_live_VOTRE_CLE"
    Step 02

    Get an API key

    Every surface authenticates the same way: an Authorization: Bearer header carrying an IziStore key.

    1. Open Settings → Developers.
    2. Create a key, give it a name, and tick only the permissions your agent needs.
    3. Copy the key straight away: it starts with sk_live_ and is shown once. After that only its prefix stays visible.
    API access is included from the Starter plan upwards. Unpaid or expired accounts cannot create API keys.

    Apps installed from the marketplace get their own token, prefixed izapp_. It is used exactly the same way, and it is revoked on uninstall.

    Step 03

    The REST API

    Two entry points: one to discover tools, one to run them.

    List the tools your key can reach

    Returns the tools your key can actually reach, with their id, summary and argument schema. A tool your scopes do not reach does not appear at all.

    GET /api/v1/tools
    curl -s https://izistore.app/api/v1/tools \
      -H "Authorization: Bearer sk_live_VOTRE_CLE"

    Run a tool

    The JSON body carries the tool's arguments, as described by its schema. The response is the tool's result.

    POST /api/v1/tools/{toolId}
    curl -s -X POST https://izistore.app/api/v1/tools/orders.list \
      -H "Authorization: Bearer sk_live_VOTRE_CLE" \
      -H "Content-Type: application/json" \
      -d '{"storeId":"STORE_ID","status":"pending","limit":20}'

    Describe one tool

    The same entry the listing carries, for one id. It is the only way to tell a tool that does not exist (404) from one your permissions do not reach (403) — the listing omits both alike. The 403 names the scope you are missing.

    GET /api/v1/tools/{toolId}
    curl -s https://izistore.app/api/v1/tools/orders.updateStatus \
      -H "Authorization: Bearer sk_live_VOTRE_CLE"
    Most tools work on one store. Start with stores.list, then pass the returned storeId on every following call. Without it the call fails with store_required.
    stores.list
    curl -s -X POST https://izistore.app/api/v1/tools/stores.list \
      -H "Authorization: Bearer sk_live_VOTRE_CLE" \
      -H "Content-Type: application/json" \
      -d '{}'

    Find a tool without loading them all

    The registry holds dozens of tools. tools.find searches them by keyword or domain and returns ids and summaries only; tools.run executes one by id, with exactly the same guards applied.

    tools.find
    curl -s -X POST https://izistore.app/api/v1/tools/tools.find \
      -H "Authorization: Bearer sk_live_VOTRE_CLE" \
      -H "Content-Type: application/json" \
      -d '{"query":"stock"}'
    Step 04

    Connect Claude or Cursor over MCP

    The MCP server speaks Streamable HTTP at /api/mcp. Authentication is the same Bearer header as the REST API.

    Claude Code

    terminal
    claude mcp add --transport http izistore https://izistore.app/api/mcp \
      --header "Authorization: Bearer sk_live_VOTRE_CLE"

    Claude Desktop

    Add this block to claude_desktop_config.json, then restart the app.

    claude_desktop_config.json
    {
      "mcpServers": {
        "izistore": {
          "type": "http",
          "url": "https://izistore.app/api/mcp",
          "headers": {
            "Authorization": "Bearer sk_live_VOTRE_CLE"
          }
        }
      }
    }

    Cursor

    Put this block in ~/.cursor/mcp.json for every project, or in .cursor/mcp.json at a project root.

    .cursor/mcp.json
    {
      "mcpServers": {
        "izistore": {
          "url": "https://izistore.app/api/mcp",
          "headers": {
            "Authorization": "Bearer sk_live_VOTRE_CLE"
          }
        }
      }
    }
    Step 05

    From a terminal

    The same tools from a terminal, with no model in the loop — for scripting a task rather than asking for it. The API key is stored 0600 in ~/.izistore/config.json and is never printed.

    terminal
    # Depuis une copie du dépôt : npm link
    izistore login
    # Clé API : sk_live_...
    
    izistore tools                      # ce que votre clé atteint
    izistore tools orders.updateStatus  # le schéma d'un outil
    izistore run stores.list
    izistore run orders.updateStatus --arg orderId=abc --arg status=delivered
    # 409 confirmation_required — code : 402913
    izistore run orders.updateStatus --arg orderId=abc --arg status=delivered \
      --confirm 402913
    The CLI never confirms on your behalf. A destructive tool prints its code and stops; re-running it with --confirm is a second command, typed deliberately. There is no --yes flag.
    Step 06

    Destructive tools ask for a code

    This is the part that surprises everyone on a first integration: a destructive tool always refuses its first call. That is not a failure.

    An agent that can send a bulk WhatsApp campaign can also send it by accident, and the merchant only finds out afterwards. So the first call to a destructive tool runs nothing: it returns a confirmation_required error carrying a six-digit code. Replay the same call with that code to execute it.

    1
    First call — nothing is written
    curl -s -X POST https://izistore.app/api/v1/tools/products.delete \
      -H "Authorization: Bearer sk_live_VOTRE_CLE" \
      -H "Content-Type: application/json" \
      -d '{"storeId":"STORE_ID","productId":"PRODUCT_ID"}'
    Response
    {
      "ok": false,
      "code": "confirmation_required",
      "error": "products.delete makes a change that cannot be undone. Nothing has run yet. ...",
      "details": {
        "confirmationCode": "418327",
        "warning": "products.delete makes a change that cannot be undone. ..."
      }
    }
    2
    Second call — same arguments, plus the code
    curl -s -X POST https://izistore.app/api/v1/tools/products.delete \
      -H "Authorization: Bearer sk_live_VOTRE_CLE" \
      -H "Content-Type: application/json" \
      -d '{"storeId":"STORE_ID","productId":"PRODUCT_ID","confirmationCode":"418327"}'
    The arguments must be identical. The code is derived from the exact call: change one value and it no longer matches.
    The code expires after roughly ten minutes. After that, make the first call again to get a fresh one.
    A code is never guessed and never invented. It exists to be shown to a human, who decides.

    Tools that require confirmation

    affiliates.requestPayout
    automations.enable
    campaigns.launch
    campaigns.stop
    classroom.revokeAccess
    delivery.assign
    inventory.bulkAdjust
    messaging.launchCampaign
    messaging.send
    orders.bulkUpdateStatus
    pages.delete
    products.delete
    storefront.setSections
    storefront.setTheme
    workshops.emailReferralLink
    Step 07

    Permissions

    Every tool declares the scopes it requires. A key only reaches what it is scoped for — everything else does not even appear in the tool list.

    stores
    stores:readstores:write
    products
    products:readproducts:write
    orders
    orders:readorders:write
    inventory
    inventory:readinventory:write
    customers
    customers:read
    delivery
    delivery:readdelivery:write
    messaging
    messaging:readmessaging:write
    campaigns
    campaigns:readcampaigns:write
    marketing
    marketing:readmarketing:write
    storefront
    storefront:readstorefront:write
    classroom
    classroom:readclassroom:write
    workshops
    workshops:readworkshops:write
    analytics
    analytics:read
    skills
    skills:read
    • A domain wildcard covers both halves: orders:* grants orders:read and orders:write.
    • The * permission reaches every tool.
    • The key creation screen currently offers the stores, products, orders, whatsapp and automations scopes. A call refused on scope returns the forbidden error, naming the scope it needed.
    Step 08

    Monthly AI token allowance

    Each plan includes a volume of AI tokens funded by IziStore, spent by the in-app assistant and the AI agent.

    PlanAI tokens / monthAPI calls
    Free—No API access
    Starter800 000500 / h
    Premium2 000 0001 000 / h
    Enterprise4 000 000Unlimited
    Connecting your own AI key or AI account lifts this ceiling: what you pay your provider is never counted against the allowance. Set it under Settings → AI provider.

    Driving IziStore from your own agent spends that agent's tokens, at your provider. The allowance above covers the AI IziStore runs for you.

    Step 09

    Errors

    A failure always carries a machine-readable code and a message that says what to do next.

    codeMeaning
    invalid_inputThe arguments do not satisfy the tool's schema. The message lists each offending field.
    forbiddenThe key lacks the required scope, or the tool is not exposed on this surface.
    store_requiredThe tool needs a store. Call stores.list and pass the storeId back in.
    confirmation_requiredNothing ran. A six-digit code was issued — replay the call with it.
    unknown_toolNo tool carries that id. Call tools.find to see what exists.
    tool_errorThe tool failed while running. The message carries the reason.
    Step 10

    One URL to hand an agent

    The manifest names the product, the entry points, the authentication method, the scope vocabulary and the confirmation rule. An agent can read it and take it from there.

    GET /.well-known/agents.json
    curl -s https://izistore.app/.well-known/agents.json

    This manifest and this page are public: no authentication is needed to read them.

    A question? [email protected] · Back to the help centre