Growomat platform

Your campaigns, wherever you work.

Growomat plugs into the tools you already use. Chat with Claude to draft and run campaigns — no code — or build on the REST API and SDKs. Everything the app can do, from wherever you ask for it.

No code

connect Claude · draft, report & stage changes by asking

Builders

REST API · SDKs in 5 languages · OpenAPI 3.1

Platforms

Google · Microsoft · Reddit · Meta Ads · one account

Safety

drafts stay paused · nothing goes live until you push it

one account, three ways in — same data, same guardrails

growomat — same result, three ways

LIVE
you › Draft a search campaign for my bakery —
      £20 a day, Manchester only.
create_campaignBakery · SEARCH
create_keyword ×6“fresh bread manchester”, …
claude › Draft’s ready and paused — say the word and I’ll preview the push.
Works with
Claude
Claude Code
VS Code
Cursor

These are the clients the connector has been run in and verified. It is a standard remote MCP server, so any client that supports remote servers over OAuth should connect the same way.

Quickstart · for builders

Zero to a staged campaign in three requests.

Campaigns are created locally and staged — nothing touches a live ad platform until a token holding the sync scope triggers a sync.

1
Mint a token

Settings → Developer

Generate a token with a name, an expiry of up to one year, and the minimum scopes it needs. The plaintext shows once — only its SHA-256 is stored.

# shown once — store it in a secret manager
grow_live_A1B2C3D4E5F6G7H8_veryLongSecret…

export GROWOMAT_TOKEN=grow_live_…
2
Introspect it

Confirm auth with /me

GET /me echoes the token’s identity, plan, and granted scopes — the fastest way to confirm your wiring.

curl -s -H "Authorization: Bearer $GROWOMAT_TOKEN" \
  https://api.growomat.com/api/v1/me

# → { "data": { "uid": "user_abc", "email": "[email protected]",
#     "plan": { "id": "pro", "name": "Pro" },
#     "scopes": ["campaigns:read","campaigns:write"] } }
3
Create something

POST your first campaign

Writes need their resource’s write scope. Every response uses the same envelope: { data, meta }

curl -s -X POST https://api.growomat.com/api/v1/campaigns \
  -H "Authorization: Bearer $GROWOMAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Black Friday 2026","type":"SEARCH","budget":50}'
Auth & scopes · for builders

Tokens built to be scanned, scoped, and rotated.

grow_live_A1B2C3D4E5F6G7H8_veryLongUrlSafeBase64Secret
grow_ — fixed prefix — GitHub secret scanning and trufflehog recognize a leaked token on sight
live | test — environment, visible at a glance in logs
A1B2… — public token ID — safe to log and reference
secret — confidential — only its SHA-256 is stored server-side
  • ·Accepted only in the Authorization header — query-string and cookie forms are rejected
  • ·Up to 5 tokens per account, expiry up to one year, one-click revoke
  • ·Rotation issues a new secret but keeps the token ID — your references survive
  • ·Scopes are immutable — changing access means minting a new token

Scoped access — 13 grants

campaigns:readread
campaigns:writewrite
ads:readread
ads:writewrite
keywords:readread
keywords:writewrite
assets:readread
assets:writewrite
businesses:readread
businesses:writewrite
reports:readread
sync:readread
sync:writewrite

sync:write is deliberately separate from the resource scopes — triggering a sync mutates external ad platforms and can spend real budget. A reporting token never needs it.

Start where you are.

Connect Claude and ask for your first draft — or mint a token in Settings → Developer and point curl at /me.