Skip to content

Developer Portal

At a glance

LocationSidebar → Developer Portal (Code2 icon)
PlanAll plans, including the free tier
Related features2

Build and publish your own extensions for the Spun marketplace. Access API documentation and developer tools. API keys and Connected AI apps (claude.ai, ChatGPT or Gemini app connections signed in with Spun) are managed under Settings: connections can be disconnected at any time, and an org manager can enable or disable autonomous sending per connected app (typed confirmation; re-connecting from the AI app resets it). The access level of an already-connected app can also be changed in place from the same panel, between Read-only analyst, Assistant (no sends) and Assistant with sends, without disconnecting and reconnecting: the change takes effect immediately for the app. Raising an app to a send-capable level requires a typed confirmation because it grants more than was approved when the app was connected, the panel keeps showing which level was originally consented to, changing the level always turns autonomous sending back off, and lowering the level cancels any AI sends from that app that are still waiting for approval. REST API keys can be locked to an IP allowlist (single IPs or CIDR ranges, IPv4 and IPv6, set per key in Settings): requests from any other IP are rejected, and an empty list means the key works from anywhere. The allowlist applies only to REST keys - it does not apply to AI/MCP connections, whose traffic comes from shared AI-provider IPs. A wrongly configured list never locks you out of managing keys, since Settings uses your Spun login rather than the key. The REST Actions API (/api/integrations, Bearer wap_ keys) covers text sends, media sends (image, video, audio, voice note, or document, from a URL or a base64 upload, with captions - POST /send-media with the send_message scope), contact and label management, phone checks, webhook subscriptions, and polling lists: GET /messages (read_messages scope) and GET /contacts (read_contacts scope) return cursor-paginated pages (since + limit, max 100 per page) so automation tools like n8n can poll for new activity. If the WhatsApp channel is offline, text sends are queued for delivery on reconnect, but media sends are not queued - the API returns a clear channel-offline error and the caller retries later. The whole REST Actions API is also described by a public OpenAPI 3.1 document at https://api.spun.com/api/integrations/openapi.json, which needs no API key to read: it lists every endpoint, the scope each one requires, request and response shapes, the error codes, and the webhook delivery envelope with its HMAC-SHA256 signature scheme, so automation tools and developers can generate a client or import the API directly. AI/MCP connections (API keys and Connected AI apps) can be limited to toolset bundles: an org manager picks All tools, a Support, Sales or Reporting toolset, or individual bundles (messaging reads, outbound sends, chat management, contact reads, contact writes, workspace, groups, status and newsletters, presence and profile, commerce, AI compute, analytics, digests) per key or per connected app in Settings, and the AI then only sees and can call the tools in those bundles; existing keys keep every tool until narrowed. MCP tools can also create contacts and update contact details (a dedicated Create and Update Contacts scope; a duplicate phone number is reported instead of creating a second contact, and contact notes are append-only so the AI can never delete what a person wrote), create labels, read per-day message volume and response-rate statistics for a date range, and check their own remaining AI budget, rate-limit usage and toolset. Org managers can see which MCP tools each key calls and how often they fail (per-tool usage, last 7, 30 or 90 days) in Settings and in the admin MCP control page.

How to use

  1. Open Developer Portal from the sidebar.
  2. Create a new extension project.
  3. Follow the SDK documentation.
  4. Submit for review.

FAQ

  • How do I build an extension?
  • Where is the developer portal?
  • Is there an API?