Skip to content
WACRM.AI

How to connect to the WACRM API and MCP server

WACRM's Core API lets your code or an AI agent read and write WhatsApp CRM data with a scoped API key, and wacrm-mcp will wrap five of those calls as MCP tools once it ships. This tutorial covers what works today: minting a key and calling the API with curl, plus what to expect from wacrm-mcp.

By Huy Nguyen (David), Founder & CEO of Netbase JSC Updated

The WACRM Core API (api.wacrm.ai/v1) is the same API that the developer portal documents in full, and wacrm-mcp is a small server that wraps five of its calls as tools for an MCP-compatible AI agent. The Core API works today; wacrm-mcp doesn’t ship as an installable package yet, and even once it does, there’s a real gap worth knowing before you start: Workspace’s key-creation screen only offers its original scope checklist, so a handful of the newer WACRM-specific scopes — including every scope wacrm-mcp’s own tools need — aren’t selectable there yet. This tutorial sticks to the calls that actually work with a key minted today, and says plainly where the rest currently stops.

What you need before you start

  • A WACRM Workspace account with at least one project (early access — see pricing if you don’t have one yet).
  • curl, or any HTTP client that can set a header — nothing else to install for the API part.

Get an API key and make your first call

  1. Create an API key. In Workspace, open Developer / API & MCP and create a new key. Choose Secret key (sk_live_…) — server-side for a server or script, or Publishable key (pk_live_…) — browser-safe if the key will ship in browser code, then give it a label you’ll recognize later. Leave “Restrict what this key can do (advanced)” switched off for now — its default scopes already cover both calls below. The new key is shown exactly once, in a “Your new API key” dialog right after you create it, which warns that WACRM stores it hashed and can’t re-send or recover it for you — copy it immediately. The same Developer screen also shows an MCP card marked “Preview” — that’s not a working connector yet, just a preview of what’s coming once wacrm-mcp ships; see “Connect the MCP server” below for what to expect.

    The developer portal documents the same Core API this key calls into — auth, scopes, idempotency and the full endpoint reference:

    WACRM developer portal page documenting Core API auth, scopes, idempotency and the endpoint reference

  2. Call the health check — no key needed. GET /v1/health is public: it’s the fastest way to confirm you can reach the API before worrying about authentication at all.

    Code
    curl -s https://api.wacrm.ai/v1/health
    Code
    {"status":"ok","version":"1.0.0","database":"ok"}

    Terminal showing curl -s https://api.wacrm.ai/v1/health and its real JSON response

  3. Make your first authenticated call. Every authenticated request sends the key as an Authorization: Bearer header. GET /v1/message-templates lists your project’s WhatsApp message templates and needs only templates:read, which is on by default for both a Secret and a Publishable key — so the key from step 1 already works here with no extra scope request.

    Code
    curl -s https://api.wacrm.ai/v1/message-templates \
      -H "Authorization: Bearer sk_live_your_scoped_key"
    Code
    {
      "data": [
        {
          "id": "7e9b9b7a-2f3a-4e36-9a0d-6a2b7a9b7a01",
          "name": "order_confirmation",
          "language": "en",
          "category": "utility",
          "body": "Hi {{1}}, your order #{{2}} is confirmed.",
          "status": "approved",
          "created_at": "2026-10-20T09:00:00+00:00",
          "variant_group_id": null
        }
      ]
    }

Which WACRM API calls can I make today?

A WACRM v1 route checks its required scope on every request, and a handful of scopes aren’t yet offered by Workspace’s key-creation screen — so the honest answer depends on the endpoint, not on your plan:

ResourceScope neededWith a key minted in Workspace today?
GET /v1/healthnoneYes — no key required
GET /v1/message-templatestemplates:readYes — default for a Secret or Publishable key
GET /v1/commerce/productsproducts:readYes — default for a Secret or Publishable key
GET /v1/commerce/ordersorders:readYes — default for a Secret key (not Publishable)
GET /v1/contacts, POST /v1/messages, /v1/ai/*, /v1/channels/*contacts:*, messages:send, ai:*, channels:*Not yet — these scopes aren’t selectable from Workspace’s key screen today

Note

Every request that fails a scope check answers 403 {"error": {"code": "insufficient_scope", "message": "..."}} — the same shape every other Core API error uses, documented in full on the developer portal.

Rate limits and retries

Two limits are documented today: the AI endpoints (/v1/ai/*) are rate-limited, and POST /v1/messages is capped at 30 requests per minute per key — both answer 429 once hit. A write that should never run twice, like POST /v1/messages, also accepts an Idempotency-Key header: retrying the same request with the same key replays the first response instead of sending again, which is the safe way to retry after a timeout or a dropped connection.

Connect the MCP server to an AI agent

wacrm-mcp isn’t something a WACRM customer can install today. The package lives only inside WACRM’s private repository — there’s no npm package and no public GitHub repo to point to — and a public release is planned, with no date set yet. What follows is the shape your MCP client will use once wacrm-mcp ships, not a connector you can run right now.

Point your MCP client at the server over stdio, with your own scoped key in the environment — the same key shape from step 1 above:

Code
{
  "mcpServers": {
    "wacrm": {
      "command": "node",
      "args": ["/path/to/apps/mcp/src/index.mjs"],
      "env": {
        "WACRM_API_KEY": "sk_live_your_scoped_key",
        "WACRM_API_BASE": "https://api.wacrm.ai"
      }
    }
  }
}

WACRM_API_KEY is the only variable wacrm-mcp requires — the same scoped key from step 1, sent only as an Authorization: Bearer header and never logged or echoed back in a tool result. WACRM_API_BASE defaults to https://api.wacrm.ai and only needs setting to point at a sandbox or a local fake. An account-scoped key (sk_acc_live_...) also needs WACRM_PROJECT_ID, sent as X-WACRM-Project-Id; a project-scoped key (sk_live_...) already implies its project and doesn’t need it.

wacrm-mcp page on wacrm.ai listing its five tools

Once it’s running, a tools/list call will return all five tools — send_template, read_conversation, create_contact, notify_order and wallet_balance — described in full on the wacrm-mcp page.

Note

Every one of those five tools needs a WACRM-specific scope — messages:send, contacts:read or contacts:write, wallet:read, or wa_webhooks:write — and none of those are in the table above as selectable today. Until Workspace’s key-creation screen adds them, a self-service key would make each tool answer 403 insufficient_scope once wacrm-mcp is available; only the Core API call in step 3 of the previous section is something a self-service key can actually run end to end right now.

Ready to try this against your own project? Request early access to get a Workspace, or see pricing first if you’re still comparing plans. For more how-tos like this one, browse the full guides list.

Huy Nguyen (David), Founder and CEO of Netbase JSC

Talk to an expert

Huy Nguyen (David), Founder & CEO

Ask David a question about connect to the wacrm api and mcp server.

Frequently asked questions

Do I need a paid plan to call the WACRM API?

No — any WACRM project can mint an API key from Workspace and call the endpoints its key's scopes allow, on any plan. What isn't open on every plan is the AI endpoints (translate, summarize, suggest-reply and similar) when they're called with an API key rather than through the Workspace inbox itself — see the Core API reference for the current detail.

Why can't I select scopes like contacts:read or messages:send when I create a key?

Workspace's API key screen today only lists its original scope set — things like templates, products, orders and (for an account-level key) wallet access. The newer WhatsApp-CRM-specific scopes documented in the Core API reference exist in the backend and are checked on every request, but that screen's own checklist hasn't been extended to offer them yet, so a key you mint there can't request them. This guide only walks through the calls that work with what the screen offers today.

What does a 403 insufficient_scope error mean?

Your API key is valid, but it wasn't minted with the scope the endpoint you called requires. Every WACRM v1 route checks scopes before anything else, so this happens regardless of your plan or which project the key belongs to — the fix is to mint a new key with that scope, if the key-creation screen currently offers it.

Where do I get the wacrm-mcp server from today?

You don't, yet — it isn't published to npm, and there's no public GitHub repo to clone it from. wacrm-mcp lives only inside WACRM's private repository today. A public release is planned, with no date set; the MCP section below shows the config shape your MCP client will use once it ships.

What is MCP, and why connect WACRM to it?

MCP (Model Context Protocol) is an open standard for connecting an AI agent to external tools and data over a common protocol, so an agent doesn't need a one-off integration for every service it calls. Connecting wacrm-mcp lets an MCP-compatible agent call a handful of WACRM Core API actions as regular tool calls, using the same scoped API key and the same checks as a direct API request.

Want this set up for you?

Quick Setup connects your number with coexistence in 48 hours, done by a person.