GrowSurf

com.growsurf由 growsurf.com 發布官方發布者v0.19.32更新於 Nov 13, 2026

Build and manage GrowSurf referral and affiliate programs through AI assistants.

已驗證Streamable HTTP可網頁執行開發者工具資料與分析商業與電商

概覽

AI 產生的概覽

GrowSurf 官方伺服器,讓 AI 助理建立與管理推薦及聯盟計畫、獎勵、參與者與數據分析。

可以做什麼
  • 設計與排錯:計畫設計顧問(含基準數據)、整合與行動 SDK 指南、API 函式庫範例、依症狀診斷追蹤問題
  • 管理計畫:列出、取得、建立、更新與複製活動,以及設計、郵件、選項、安裝設定與自訂網域
  • 設定獎勵與分組:建立、更新、刪除活動獎勵與參與者分組,管理參與者資源(含檔案上傳)
  • 處理參與者與撥款:新增、更新、寄信、批次刪除參與者,觸發或取消推薦獎勵,記錄聯盟銷售與退款
  • 讀取分析與團隊資料:計畫分析、啟用世代、參與者活動、團隊驗證、預覽截圖與 webhook 輔助工具
適用情境
當你經營 GrowSurf 推薦或聯盟計畫,希望助理草擬並設定計畫、串接追蹤、管理參與者與獎勵或查看成效數據時使用。也適合排查追蹤問題與取得整合程式碼。
執行需求
可使用含 OAuth 登入的遠端託管端點,或以 Node.js 22 以上執行本機 npm 套件。需要 GrowSurf 帳號,API 類工具需在 GROWSURF_API_KEY 提供 API 金鑰;GROWSURF_CAMPAIGN_ID 可設預設計畫。檔案資源上傳需要 GROWSURF_UPLOAD_ALLOWED_ORIGINS。靜態指南工具無需憑證。
安裝前請注意
它直接操作線上計畫:寫入的設定就是參與者看到的內容,寫入的獎勵金額就是客戶要支付的金額。許多工具會建立、更新或刪除計畫、獎勵、分組、資源與參與者,批次刪除參與者無法復原。它涉及 API 金鑰與參與者自動驗證密鑰;範例請用測試密鑰,正式簽章應在後端完成。不支援刪除計畫與獎勵發放。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 GrowSurf,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.growsurf%2Fgrowsurf/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "growsurf": {
      "type": "http",
      "url": "https://mcp.growsurf.com/"
    }
  }
}

README

GrowSurf MCP Server

[npm version] [npm downloads] [license] [node]

The official GrowSurf command-line interface (CLI) and open-source Model Context Protocol (MCP) server for implementing GrowSurf referral and affiliate programs with guided steps and safe REST API wrappers.

Connect it to an AI agent and, in plain language, the agent can create a referral or affiliate program, configure rewards, install tracking, add and manage participants, and read analytics, all backed by the GrowSurf REST API.

MCP is optional. Any action-capable agent that can send HTTPS requests can start with GrowSurf's client-neutral REST workflow at https://growsurf.com/agent-start.md.

Who is this for

This MCP server is for:

  • Developers using MCP-compatible tools (Claude Code, Codex, Cursor, Copilot, and other MCP clients)
  • Teams that want guided, AI-assisted GrowSurf integrations

This MCP server is NOT for:

  • Browser-only users who want a local stdio install. ChatGPT web and Claude.ai use the hosted remote connector at https://mcp.growsurf.com. Claude Desktop can use either the local stdio server or the hosted connector. See the full client list and setup at https://docs.growsurf.com/build-with-ai#connect-the-mcp-server.

What you get

  • Guided Integration:
    • Universal Code install
    • Native iOS/Android and React Native SDK implementation guidance
    • Native GrowSurf Window guidance
    • Signup flow
    • Qualifying action flow
    • Affiliate sale / transaction tracking
    • Webhooks
  • Agent Recipes:
    • MCP prompts for creating referral programs, creating affiliate programs, advising on program design, troubleshooting referral tracking, embedding the widget, listing and fetching programs and participants, configuring rewards, wiring webhooks, and reading analytics
    • Prompts use details from your conversation and ask only for missing information needed for the next step. No form inputs are needed. Existing prompt names and direct arguments remain supported.
    • Installable Agent Skill bundle at skills/growsurf-agent-toolkit
    • Steering to review starter Design, Emails, Options, Installation, rewards, and GrowSurf Window content before patching
    • One-shot program-creation eval prompts and acceptance checks for starter content and configuration review
  • Happy‑Path REST API Wrappers:
    • Read and rename the bound team, request team verification, and resend the team owner's verification email
    • List and get campaigns
    • Get campaign analytics (totals, time series, email metrics, participant engagement activity, and activation cohorts)
    • Create, update, and clone programs (campaigns)
    • List, create, update, and delete campaign rewards
    • List, create, update, and delete Program Resources, including a safe one-time FILE preparation flow
    • Get/update Design, Emails, Options, and Installation config
    • Capture temporary GrowSurf preview screenshots so the user can see a draft program
    • List, create, update, delete, and test program webhooks
    • List the program's integrations and get a dashboard link to connect one
    • List, get, add, and bulk delete participants
    • Update a participant, email a participant, and get a participant's analytics and activity logs
    • Get a participant's payout-destination status and ask them to confirm a payout destination
    • Trigger referral credit (for referral programs), with optional delayed award (1-90 days)
    • Cancel a pending delayed referral trigger (for referral programs)
    • Record affiliate sales/transactions and their refunds or chargebacks (for affiliate programs)
    • Create mobile participant tokens for signed-in native app users
  • Official API Library Snippets:
    • TypeScript
    • Python
    • PHP
    • Ruby
    • Java
  • Helpers:
    • Compute participant auto-auth HMAC hash
    • Normalize webhook payloads
    • Generate best‑effort idempotency keys for webhook deduplication

Choosing a tool

Use program and participant tools to read or change records. Guidance tools return advice or code for you to apply:

TaskTool
Choose a program design and reward structuregrowsurf_program_design_advisor
Plan a web integrationgrowsurf_integration_guide
Get browser JavaScript examplesgrowsurf_client_snippets
Get one embeddable element's HTMLgrowsurf_embeddable_element_snippet
Generate page-level participant auto authentication codegrowsurf_grsf_config_snippet
Get backend REST API library examplesgrowsurf_api_library_snippets
Integrate a native iOS, Android, or React Native appgrowsurf_mobile_sdk_guide
Diagnose a program problemgrowsurf_troubleshoot_referral_tracking
Generate checks for an agent's program-creation workflowgrowsurf_agent_program_creation_eval

Published tool names and fields use campaign for a program, including campaignId. These identifiers remain supported. Display titles use program terminology; Campaign Reward remains the name for a reward configuration.

To delete one participant, pass one ID or email in participants to growsurf_bulk_delete_participants. The same permanent-deletion warnings apply. A separate single-participant tool is not needed. Program deletion and explicit reward fulfillment are outside this MCP tool set; completing a program is not deletion, and configuring a reward is not proof that it was delivered.

Optional compact connection

The default connection lists all 71 tools. Add --compact to select 32 tools for program setup, installation, participant management, referral tracking, rewards, and analytics. Your credential permissions can reduce the visible set further.

bash
npx -y @growsurfteam/growsurf-mcp --compact

In a stdio client configuration, append "--compact" to the package's args array. Server integrations can call createGrowSurfMcpServer({ toolSurface: "compact" }). Omit the option to keep the full catalog.

Compact combines related guidance and settings tools:

ToolSelectionArguments
growsurf_get_guidancetopic: integration, browser, api_libraries, mobile_sdk, embeddable_element, participant_auto_auth, or program_creation_checksPut the selected guide's existing arguments under input. Use {} for defaults.
growsurf_get_program_settingssection: design, emails, options, or installationPut campaignId under input, or use the configured default.
growsurf_update_program_settingsThe same section valuesPut campaignId and the fields patch under input. Read the section first.

For example, read a program's installation settings:

json
{  "name": "growsurf_get_program_settings",  "arguments": { "section": "installation", "input": { "campaignId": "YOUR_PROGRAM_ID" } }}

Program recommendations and troubleshooting keep their own tools. Participant reads, updates, deletion, referral actions, and sale or refund actions remain separate. Compact prompts, resources, guidance, and proposed configuration calls use the compact tool names and arguments.

Use the full connection for team administration, program cloning, groups and bulk participant moves, participant resources, custom domains, webhook creation/updates/deletion/tests, participant emails, payout destinations, and webhook normalization. Remove --compact and reconnect. These operations remain available with their existing contracts on the full connection; compact rejects calls to tools outside its catalog. The tool-selection table above describes the full connection.

Requirements

  • Node.js 22+
  • A GrowSurf account for hosted OAuth. Sign up at https://app.growsurf.com.
  • A GrowSurf API key for local stdio setup or manual API-key remote setup. Create one in the GrowSurf dashboard after you sign up. A scoped key works as long as it has access to the tools and programs you want the agent to use.
  • A campaign (program) ID for campaign-scoped tools. Set GROWSURF_CAMPAIGN_ID as the default, pass a campaignId argument to target a specific program, or call growsurf_list_campaigns to find available programs. For a newly created program, pass the id returned by growsurf_create_campaign to the other tools.
  • Static guidance/snippet tools can run without credentials
  • Team-level tools do not need a campaign ID.
  • Every listed tool publishes standard MCP read-only, destructive, idempotent, and open-world safety hints. Scoped business actions stay available; API-key rotation is intentionally not an MCP tool. Rotate keys in GrowSurf Settings or through a direct REST/SDK client.

Official CLI

The npm package installs the growsurf-mcp command. Run it without a global install:

bash
npx -y @growsurfteam/growsurf-mcp

The CLI starts GrowSurf's local stdio MCP server. Set GROWSURF_API_KEY for API-backed actions and GROWSURF_CAMPAIGN_ID for a default program. Public developer resources and static integration guidance work without credentials.

Inspect the installed command without starting the stdio server:

bash
npx -y @growsurfteam/growsurf-mcp --helpnpx -y @growsurfteam/growsurf-mcp --version

Supported MCP Hosts

For an MCP-compatible host, use GrowSurf's hosted OAuth endpoint at https://mcp.growsurf.com when the host supports remote Streamable HTTP with OAuth. Use the local npx server when the host needs a stdio process or manual API-key setup. No GrowSurf account yet? Sign up at https://app.growsurf.com and create an API key in the dashboard, or connect to https://mcp.growsurf.com and sign in with OAuth.

The GrowSurf MCP server works with any MCP-compatible host. The examples below cover a few config-based and CLI hosts. For the complete, current list of supported clients (including ChatGPT web, Claude.ai, Claude Desktop, GitHub Copilot, Gemini CLI, Devin Desktop, and Cline) with step-by-step setup, see https://docs.growsurf.com/build-with-ai#connect-the-mcp-server.

  • Cursor
  • Claude Code (CLI-based)
  • Antigravity
  • Codex (CLI-based)

Cursor

  1. Open or create Cursor's global MCP configuration at ~/.cursor/mcp.json.
  2. Add a server named growsurf with the hosted OAuth endpoint:
json
{  "mcpServers": {    "growsurf": {      "type": "http",      "url": "https://mcp.growsurf.com"    }  }}

For local stdio instead, use:

json
{  "mcpServers": {    "growsurf": {      "command": "npx",      "args": ["-y", "@growsurfteam/growsurf-mcp"],      "env": {        "GROWSURF_API_KEY": "YOUR_API_KEY",        "GROWSURF_CAMPAIGN_ID": "YOUR_CAMPAIGN_ID"      }    }  }}

Claude Code (CLI-based)

Open your terminal and connect Claude Code to the hosted OAuth endpoint:

bash
claude mcp add --transport http --scope user growsurf https://mcp.growsurf.comclaude mcp login growsurf

For local stdio instead, install the server directly into Claude Code:

bash
claude mcp add growsurf \  -e GROWSURF_API_KEY=your_api_key \  -e GROWSURF_CAMPAIGN_ID=your_campaign_id \  -- npx -y @growsurfteam/growsurf-mcp

Antigravity

  1. Open Antigravity.
  2. Click the … menu in the panel to the right and select MCP Servers.
  3. Click Manage MCP Servers > View raw config.
  4. Recommended: in the mcp_config.json file, add the hosted OAuth endpoint:
json
{  "mcpServers": {    "growsurf": {      "serverUrl": "https://mcp.growsurf.com"    }  }}
  1. Save the config, open Settings > Customizations, and select Authenticate for GrowSurf.

For local stdio instead, use:

json
{  "mcpServers": {    "growsurf": {      "command": "npx",      "args": ["-y", "@growsurfteam/growsurf-mcp"],      "env": {        "GROWSURF_API_KEY": "YOUR_API_KEY",        "GROWSURF_CAMPAIGN_ID": "YOUR_CAMPAIGN_ID"      }    }  }}

Codex

Recommended: connect Codex to the hosted OAuth endpoint:

bash
codex mcp add growsurf --url https://mcp.growsurf.comcodex mcp login growsurf

Or create or edit ~/.codex/config.toml:

toml
[mcp_servers.growsurf]url = "https://mcp.growsurf.com"

For local stdio instead, add the following:

toml
[mcp_servers.growsurf]command = "npx"args = ["-y", "@growsurfteam/growsurf-mcp"]
[mcp_servers.growsurf.env]GROWSURF_API_KEY = "YOUR_API_KEY"GROWSURF_CAMPAIGN_ID = "YOUR_CAMPAIGN_ID"

Or configure local stdio from the CLI:

bash
codex mcp add growsurf \  --env GROWSURF_API_KEY=YOUR_API_KEY \  --env GROWSURF_CAMPAIGN_ID=YOUR_CAMPAIGN_ID \  -- npx -y @growsurfteam/growsurf-mcp

Configuration

Set the following environment variables when running the MCP server:

  • GROWSURF_API_KEY (optional for startup; required for API-calling tools. Use a key with the scopes and program access those tools need)
  • GROWSURF_CAMPAIGN_ID (optional; the default program for campaign-scoped tools. A tool's campaignId argument overrides it, so a single server can operate on any of your programs)
  • GROWSURF_API_BASE_URL (optional; defaults to https://api.growsurf.com/v2. Useful for local or hosted MCP gateways that should call a different GrowSurf API origin)
  • GROWSURF_UPLOAD_ALLOWED_ORIGINS (required only for FILE Resource uploads; a comma-separated private allowlist of exact HTTPS origins accepted from GrowSurf upload tickets. Wildcards and URL paths are rejected)

The hash helper requires an explicit participantAuthSecret argument and never uses GROWSURF_PARTICIPANT_AUTH_SECRET. Use a test secret for MCP examples; authenticate users and sign with production secrets on your backend.

For webhooks, configure a signing secret and verify GrowSurf-Signature on your backend. GROWSURF_WEBHOOK_TOKEN is no longer used; keep secrets out of webhook URLs.

Run with npx

After publishing this package, customers can run:

bash
npx @growsurfteam/growsurf-mcp

For local development in this repo:

bash
npm installnpm run buildnode dist/cli.js

MCP tools

Every tool declares an MCP output schema and returns structuredContent, so hosts know each tool's result shape. REST tools return the API response (plus a JSON text block for older clients); the guidance and snippet tools return their markdown document under markdown.

Program, reward-configuration, options, and participant reads also include a rewardEvidence object in structuredContent. It records what this response establishes about approval policy and automatic fulfillment marking. Delivery remains unknown without the relevant fulfillment records. This assessment applies to this response only; combine it with other evidence. The API fields and original JSON text remain unchanged.

Guided Integration

  • growsurf_integration_guide Step-by-step guidance for implementing a GrowSurf referral or affiliate program.

  • growsurf_mobile_sdk_guide Native iOS/Android or React Native SDK guidance for attribution, shareUrl, trackShare, and the native GrowSurf Window. Set platform to react_native for the React Native SDK.

  • growsurf_api_library_snippets Official REST API library snippets for TypeScript, Python, PHP, Ruby, and Java.

  • growsurf_list_integrations List every integration the program can connect, each with connected, enabled, autoDisabled, and the dashboard connectUrl. Check this before acting on an integration.

  • growsurf_get_integration_connect_link Get a dashboard link that opens a specific integration's connect panel (Stripe, PayPal, Tango Card, Mailchimp, and many more). Hand it to the user when they want to connect one. The program is checked first, and the result reports whether the integration is already connected. Connecting happens in the dashboard, not through the API.

Program design and troubleshooting

  • growsurf_program_design_advisor Returns a short first draft by default. Set detail: "full" for the complete report, including reward, sharing, and integration figures. benchmarkFacts carries complete statements with each ratio's unit, median, quartiles, sample, and source. Quote these statements together so a referral ratio cannot be mistaken for the percentage of people who refer.

    Recommend a qualifying action, reward structure, fulfillment path, safeguards, share channels, and integrations. The result includes markdown, a configurationPlan with exact tool arguments, and decisions with the qualifying action and unresolved customer choices. Call it before proposing rewards. Preserve the returned call shapes; the advisor and program-creation tools use different goal enums. Replace each <new-program-id> with the id returned by program creation. Drafts leave reward amounts and commission terms open until the customer chooses them; a budget is a limit, not an incentive. Set salesMotion to sales_led for demos or negotiated contracts, or self_service for direct purchases. When the host supplies insights, advice includes aggregate figures; without insights it uses documentation. Non-USD advice and budget comparisons omit dollar reward bands because the data mixes dollar currencies.

  • growsurf_troubleshoot_referral_tracking Symptom-first diagnosis: referrals not credited, participant emails not sending, rewards not issued, participants not added, Universal Code not detected, integrations not syncing, Zapier errors, fraud flags, dashboard numbers that look wrong, and more. Returns the checks to run in order (with the read tool and field for each), the likely causes most common first, fixes, and doc links. Pass a symptom key, or a description that names the symptom.

Client & UI Snippets

  • growsurf_client_snippets JavaScript SDK, GrowSurf Window, and embeddable examples. Includes a reminder to use a frontend design workflow when placing or styling embeddable UI.

  • growsurf_embeddable_element_snippet HTML snippet for a specific GrowSurf embeddable element.

  • growsurf_grsf_config_snippet <head> snippet for configuring window.grsfConfig and participant auto-auth.

Team

  • growsurf_get_team Fetch the team bound to the API key or OAuth connection, including its GrowSurf verification state.

  • growsurf_update_team Update the bound team's display name.

  • growsurf_request_team_verification Ask GrowSurf to verify the bound team, which is required before a program can email participants.

  • growsurf_resend_team_owner_verification_email Resend the verification email to the bound team's owner without revealing their email address.

API & Tracking

  • growsurf_get_campaign Fetch campaign configuration.

  • growsurf_list_campaigns List programs available to the credential. Use this to find a campaignId before calling campaign-scoped tools.

  • growsurf_get_campaign_analytics Fetch program analytics, with optional per-period series, comparison, status, rate, email metrics via include=email, and participant activity-period engagement via include=engagement.

  • growsurf_get_campaign_activation_analytics Fetch eligible-participant activation cohorts with a fixed 7- or 30-day observation window. Referral programs group by enrolledAsAdvocateAt; affiliate programs group by approvedAsAffiliateAt. Read coverageStartAt, state, and reason before interpreting zeroes or nulls.

  • growsurf_create_campaign Create a new program (campaign) with type-appropriate starter content and optional inline rewards (only needs GROWSURF_API_KEY, not GROWSURF_CAMPAIGN_ID). Review the seeded Design, Emails, Options, Installation, rewards, and GrowSurf Window content before patching.

  • growsurf_agent_program_creation_eval Generate one-shot program-creation eval prompts and acceptance checks for starter content, conservative rewards, configuration review, frontend install proof, and clean public copy.

  • growsurf_update_campaign Update the program's identity and lifecycle: name, company branding, and status (only the fields you send are changed).

  • growsurf_clone_campaign Clone the program into a new DRAFT program (integrations and credentials are not copied).

  • growsurf_list_campaign_rewards List the program's configured rewards. Each reward's groupId names its group (null is Default). Pass groupId to list one group's rewards.

  • growsurf_create_campaign_reward Create a campaign reward.

  • growsurf_update_campaign_reward Update a campaign reward by its reward key.

  • growsurf_delete_campaign_reward Delete a campaign reward by its reward key.

  • growsurf_list_campaign_groups / growsurf_create_campaign_group / growsurf_update_campaign_group / growsurf_delete_campaign_group Manage groups, which give some participants a different reward list. A new group gets a copy of each active Default reward except Leaderboard rewards; change the copies with growsurf_update_campaign_reward. EMAIL and DOMAIN rules place new signups, and PARTICIPANT rules move existing participants. Deleting a group moves its members to Default.

  • growsurf_list_program_resources / growsurf_create_program_resource / growsurf_update_program_resource / growsurf_delete_program_resource Manage ordered participant resources. LINK uses HTTPS and TEXT uses plain text.

  • growsurf_prepare_program_resource_file Request a one-time ticket and upload an allowed file up to 10 MB to the exact host-allowlisted destination selected by GrowSurf. Pass the returned ticket and signed result unchanged to create/update. The tool accepts no upload URL or credential and never retries an upload.

  • growsurf_get_campaign_design / growsurf_update_campaign_design Read or patch design configuration, including the Program Editor Design tab and payout-destination confirmation page copy.

  • growsurf_get_campaign_emails / growsurf_update_campaign_emails Read or patch the Program Editor Emails tab config.

  • growsurf_get_campaign_options / growsurf_update_campaign_options Read or patch the Program Editor Options tab config, including the program's languages.

  • growsurf_get_campaign_installation / growsurf_update_campaign_installation Read or patch the Program Editor Installation tab config.

  • growsurf_get_campaign_custom_domain / growsurf_set_campaign_custom_domain / growsurf_verify_campaign_custom_domain / growsurf_remove_campaign_custom_domain Serve the program's landing pages from your own domain. Set a hostname such as refer.example.com, add the CNAME record from the returned dnsRecord at your DNS provider, then verify to run a live DNS check. Setting a different domain replaces the current one, and the old domain stops loading right away. Removing the domain sends landing pages back to their GrowSurf URL.

  • growsurf_capture_referral_flow_screenshots Capture temporary GrowSurf preview screenshots for the current program, after a draft is saved or when the user asks to see it. This returns the controlled referrer Window and referred-friend experience; use browser automation instead to prove the user's installed site.

  • growsurf_list_campaign_webhooks List the program's webhooks (secrets are never returned).

  • growsurf_create_campaign_webhook Add a webhook to the program (with events and a write-only signing secret).

  • growsurf_update_campaign_webhook Update a webhook by id (primary for the program's primary webhook).

  • growsurf_delete_campaign_webhook Remove a webhook by id.

  • growsurf_test_campaign_webhook Send a live test event to a webhook using its stored URL and secret.

  • growsurf_add_participant Add a participant (or referred participant) during signup.

  • growsurf_list_participants List participants in the current program, paginated by nextId. Pass metadata (up to 3 keys) to return only participants whose metadata matches exactly, such as looking someone up by your own customer ID. Use this to find a participant ID before calling participant-scoped tools.

  • growsurf_get_participant Fetch one participant by GrowSurf participant ID or email address.

  • growsurf_update_participant Update a participant by ID or email (including internal notes, the participant's language, and their group with groupId).

  • growsurf_bulk_delete_participants — Check each row outcome. analyticsErasure.status: "pending" means analytics erasure is still pending; do not repeat successful rows. Permanently delete up to 200 participants (by ID and/or email, mixed lists allowed) in one request, with per-row DELETED/NOT_FOUND/DUPLICATE/ERROR results. Irreversible. Successful rows lose participant access immediately; related record cleanup completes automatically, subject to required financial record retention.

  • growsurf_bulk_move_participants Move up to 200 participants (by ID and/or email) to a group, or to Default with groupId: null, with per-row MOVED/NOT_FOUND/DUPLICATE/ERROR results. A move applies to new referrals only; rewards already earned keep their amounts.

  • growsurf_email_participant Email a participant using a configured template or a free-form subject/body.

  • growsurf_get_participant_analytics Fetch one participant's engagement, rank, share, affiliate revenue, commission, payout, optional email metrics, and covered first milestones. Use include=activation for milestones such as firstPortalViewedAt and firstShareChannel; add series for covered portalViews and shareActions. An unavailable null is unknown, not proof that the action never happened.

  • growsurf_get_participant_activity_logs List a participant's activity logs (offset/limit paginated).

  • growsurf_trigger_referral Trigger referral (for referral programs only). Optionally pass delayInDays (1-90) to hold the credit for N days before awarding it (e.g. to cover a refund window).

  • growsurf_cancel_delayed_referral Cancel a pending delayed referral trigger before the delay elapses (e.g. on refund/cancellation).

  • growsurf_get_participant_payout_destination Get a participant's payout-destination status across every provider enabled for the program (PayPal, Venmo, or Wise): per-provider status, confirmed payout email, legal recipient type, and repair reason.

  • growsurf_request_participant_payout_destination_confirmation Ask a participant to confirm their payout destination for a provider — sends them a one-time confirmation link (only the participant can confirm).

  • growsurf_record_sale Record affiliate sales or transactions (for affiliate programs only).

  • growsurf_refund_transaction Record an amendment (refund, partial refund, or chargeback) against a recorded transaction; reverses or adjusts the referrer's commission (for affiliate programs only). The inverse of growsurf_record_sale.

  • growsurf_create_mobile_participant_token Create or fetch a participant, then create a participant-scoped mobile SDK token for a signed-in mobile user.

Helpers

  • growsurf_participant_auth_hash Generate participant auto-auth HMAC hashes (to authenticate participants automatically).

  • growsurf_webhook_normalize Normalize webhook payloads and generate idempotency keys (to deduplicate webhook deliveries).

Webhooks

GrowSurf webhooks notify your server when important referral or affiliate events occur, such as when new objects like participants, referrals, rewards, or transactions are created. Here are common use-cases:

  • Fulfill rewards automatically
  • Maintain internal points or credit systems
  • Sync participant and referral data into your database

Duplicate Delivery Handling

Webhook handlers should be idempotent because the same event can arrive more than once. Store an idempotency key before changing anything in your system.

Webhook Security & Idempotency

GrowSurf signs webhook deliveries when the webhook has a secret configured: each delivery includes a GrowSurf-Signature HMAC header computed with that secret (the secret is write-only and never returned). To securely use webhooks, we recommend the following:

  • Set a secret on the webhook and verify the GrowSurf-Signature header on receipt
  • Validate the payload shape and expected event type
  • Deduplicate webhook events using an idempotency key, because the same event can arrive more than once

The GrowSurf MCP server provides a helper tool (growsurf_webhook_normalize) that normalizes webhook payloads and generates a best-effort idempotency key to simplify safe webhook processing.

Development and Testing

bash
npm run devnpm test

Additional Resources

Read developer docs at the following:

The GrowSurf MCP server helps GrowSurf customers implement referral programs and affiliate programs quickly.

來源:README.md,提交 168d42d

工具

71

growsurf_integration_guide

Plan Program Integration

Plan a web integration for a referral or affiliate program. Returns Markdown steps for installing the Universal Code, identifying participants, tracking referrals or sales, and verifying webhooks. Does not inspect or change a program. Use `growsurf_client_snippets` for browser JavaScript examples, `growsurf_api_library_snippets` for backend code, or `growsurf_mobile_sdk_guide` for native or React Native apps.

輸入參數programTypesinglePageAppreferralTriggerwebhookSecurityparticipantAuthEnabled

growsurf_agent_program_creation_eval

Generate Program Creation Checks

Generate Markdown prompts and acceptance checks for evaluating an agent's program-creation workflow: starter content, rewards, configuration, and frontend installation. Does not create a program or run the checks. Use `growsurf_program_design_advisor` to choose a program design, or `growsurf_integration_guide` to plan its web integration.

輸入參數programTypeincludeOneShotPrompts

growsurf_program_design_advisor

Recommend Program Design

Generate program designs, benchmarks, typical rewards, and metric definitions, including participant-to-referral and lead-to-referral ratios. Read-only. Returns a short draft, complete `benchmarkFacts`, a proposed `configurationPlan`, and unresolved `decisions`. Incentive amounts and qualifying actions remain unresolved unless supplied by the customer. `detail: summary` returns a configuration draft and reward structure; `detail: full` adds detailed benchmark tables. Hosted figures describe GrowSurf's high-performing programs; without a bundle, guidance is documentation-based. `programType: AFFILIATE` selects affiliate advice. `industry: other` covers local services, pets, hospitality, and agencies. All inputs are optional.

輸入參數goaldetailaudienceindustrycompanyNamecurrencyISOprogramTypesalesMotionincludeRulesbusinessModelqualifyingActionrewardBudgetPerReferral

growsurf_troubleshoot_referral_tracking

Troubleshoot Referral Tracking

Diagnose referral tracking and program problems. Accepts a symptom or description without requiring a program or participant ID. Covers referrals not credited, participant emails not sending, rewards not issued, participants not added, Universal Code not detected, integrations or CRMs not syncing, Zapier errors, fraud flags, and analytics discrepancies. Returns ordered diagnostic checks, likely causes, fixes, and documentation links. It does not read program or participant records. Unknown `symptom` keys return the available symptoms. A `description` matches only when it contains a symptom label or alias verbatim; otherwise the symptom list is returned.

輸入參數symptomcampaignIddescriptionparticipantIdparticipantEmail

growsurf_mobile_sdk_guide

Get Mobile SDK Guide

Get Markdown implementation guidance for native iOS/Android SDK 0.10.3 or React Native SDK 0.3.1, including attribution, `shareUrl` sharing, `trackShare`, and the native GrowSurf Window. Choose `platform` and `participantState` to tailor the guide; `includeInstallSnippets` controls installation examples. Does not install an SDK or create a participant token. Use `growsurf_client_snippets` for browser JavaScript or `growsurf_api_library_snippets` for backend token-creation code.

輸入參數platformcampaignIdmobilePublicKeyparticipantStateattributionProviderincludeInstallSnippetsserverVerifiedQualifyingAction

growsurf_api_library_snippets

Generate REST API Library Snippets

Generate Markdown code examples for the official backend REST API libraries in TypeScript, Python, PHP, Ruby, and Java. Select `language` and `workflow`; both default to `all`. Covers setup, program lookup, participant creation, referral credit, sales, and mobile participant tokens. Returns code without executing API calls. Use `growsurf_client_snippets` for browser JavaScript or `growsurf_mobile_sdk_guide` for native or React Native app setup.

輸入參數emaillanguageworkflowcampaignIdreferredByparticipantIdOrEmail

growsurf_get_campaign

Get Program

Fetch your GrowSurf campaign (program) details via REST. Embedded reward settings do not establish that an individual reward was earned, approved, or delivered. Earned reward records belong to the individual participant. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_list_campaigns

List Programs

List the GrowSurf programs available to the bound team, including their IDs for program selection. Deleted programs are not returned. Does not require `GROWSURF_CAMPAIGN_ID`.

無需輸入參數。

growsurf_create_campaign

Create Program

Create a new GrowSurf program (campaign) with type-appropriate starter content and optional inline rewards. Starter content includes Design, Emails, Options, Installation, and GrowSurf Window defaults. Only `type` is required. The program starts in `DRAFT` status and is owned by the credential's bound team. `currencyISO` defaults to `USD` and is immutable after creation. `goal` sets the sharing settings at creation and cannot be set later. Incentives require the customer's chosen amount or commission rate. Without `rewards`, GrowSurf's starter rewards are switched off and award nothing. Editor-tab configuration is not accepted here. Does not require `GROWSURF_CAMPAIGN_ID`. The response includes the new program `id`.

輸入參數goalnametype必填rewardscompanyNamecurrencyISOcompanyLogoImageUrl

growsurf_update_campaign

Update Program

Update your GrowSurf program's (campaign's) identity and lifecycle: name, companyName, companyLogoImageUrl, and status (set IN_PROGRESS to publish/resume the program, COMPLETE to end it). Only the fields you send are changed. `type`, `urlId`, and `currencyISO` are immutable (currency is chosen once at program creation), so this tool does not accept them. Editor-tab config (design, emails, options, installation) is edited with the dedicated config sub-resource tools, not here. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數namestatuscampaignId必填companyNamecompanyLogoImageUrl

growsurf_clone_campaign

Clone Program

Clone your GrowSurf program (campaign) into a new DRAFT program. Integrations and credentials are not copied; active rewards are cloned. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_list_campaign_rewards

List Campaign Rewards

List your GrowSurf program's configured Campaign Rewards, including switched-off rewards and rewards whose reward type is not selected. Deleted rewards are excluded. A reward can be earned only when it also appears in the campaign response's embedded `rewards` array. The list includes every group's rewards; each reward's `groupId` names its group (`null` is Default). These settings do not establish that a participant earned or received a reward; earned reward records belong to the individual participant. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數groupIdcampaignId必填

growsurf_create_campaign_reward

Create Campaign Reward

Create a new campaign reward (reward config) on your GrowSurf program. `type` must be compatible with the program type (affiliate programs support only AFFILIATE rewards; referral programs support the other types). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數type必填eventlimitordertitlevaluegroupIdimageUrlmetadataisVisiblecampaignId必填couponCode另有 13 個

growsurf_update_campaign_reward

Update Campaign Reward

Update an existing campaign reward (reward config) on your GrowSurf program. `campaignRewardId` is the reward key (e.g. crew_...). The reward `type` is immutable. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數eventlimitordertitlevaluegroupIdimageUrlmetadataisVisiblecampaignId必填couponCodedescription另有 13 個

growsurf_delete_campaign_reward

Delete Campaign Reward

Delete a campaign reward (reward config) from your GrowSurf program. The reward is deactivated, removed from the program's reward set, and any connected upfront-discount coupons are cleaned up. `campaignRewardId` is the reward key. Returns { id, success }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填campaignRewardId必填

growsurf_list_campaign_groups

List Campaign Groups

List your GrowSurf program's groups in display order. Groups give some participants a different reward list. Each participant is in one group, and `groupId: null` is Default, which holds the program's standard rewards and is not in this list. A group's rewards replace Default's whole reward list for its members' new referrals. Leaderboard rewards stay program-wide. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_create_campaign_group

Create Campaign Group

Create a group on your GrowSurf program. GrowSurf copies each active Default reward into it, except Leaderboard rewards; change the copies with `growsurf_update_campaign_reward`. `rules` place participants: `EMAIL` matches an exact email, `DOMAIN` matches a company domain (public email domains are refused), and `PARTICIPANT` moves an existing participant in now. Each email and domain can be in one group only. Email and domain rules place new signups and affiliate approvals only. Confirm reward amounts with the person before you change the copies. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數name必填rulescampaignId必填

growsurf_update_campaign_group

Update Campaign Group

Rename, reorder, or change the rules of a group on your GrowSurf program. Sending `rules` replaces the whole list. An added `PARTICIPANT` rule moves that participant in now; a removed one moves them back to Default if they are still in this group. Email and domain rule changes move no one. To change the group's rewards, use `growsurf_update_campaign_reward`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數nameorderrulesgroupId必填campaignId必填

growsurf_delete_campaign_group

Delete Campaign Group

Delete a group from your GrowSurf program. Its members move to Default, and its Campaign Rewards are removed from the program. Rewards already earned keep their amounts and can still be sent. Returns { id, success, movedToDefault }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數groupId必填campaignId必填

growsurf_list_program_resources

List Program Resources

List the participant resources configured for your GrowSurf program, including drafts. Results stay in display order. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_prepare_program_resource_file

Prepare Program Resource File

Prepare a local file for a `FILE` Program Resource. Accepts a safe file name, matching supported MIME type, and padded base64 bytes, up to 10 MB. GrowSurf requests a one-time ticket and uploads only to the secure HTTPS destination selected by GrowSurf. Returns the original `uploadTicket` and `uploadResult` required for file resource creation or replacement. Altered upload results are not valid. The tool does not accept upload URLs or credentials and never retries an ambiguous upload. Requires `GROWSURF_UPLOAD_ALLOWED_ORIGINS` on the server; without it, only `LINK` and `TEXT` resources are available. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數fileName必填mimeType必填campaignId必填fileBase64必填

growsurf_create_program_resource

Create Program Resource

Create a `FILE`, `LINK`, or `TEXT` resource for participants. `LINK` requires an HTTPS `url`. `TEXT` requires plain `text`. A `FILE` up to 10 MB requires a one-time `uploadTicket` and the unmodified `uploadResult` from GrowSurf's secure upload flow. New resources default to draft unless `isPublished` is set. API reference: https://growsurf.com/openapi.json. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數urltexttype必填title必填categorycampaignId必填descriptionisPublisheduploadResultuploadTicket

growsurf_update_program_resource

Update Program Resource

Update at least one participant resource field, or move it to a zero-based `position`. Only supplied fields change. A replacement `FILE` requires a one-time `uploadTicket` and the unmodified `uploadResult` from GrowSurf's secure upload flow. API reference: https://growsurf.com/openapi.json. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數urltexttypetitlecategorypositioncampaignId必填resourceId必填descriptionisPublisheduploadResultuploadTicket

growsurf_delete_program_resource

Delete Program Resource

Delete a participant resource from your GrowSurf program. This does not remove its reusable Media Center asset. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填resourceId必填

growsurf_get_campaign_design

Get Program Design

Fetch the configured design fields for your GrowSurf program, including GrowSurf Window content, colors, sharing sections, participant avatars under `participantAvatarStyle`, referred-visitor content such as the Claim Offer Popup, the website widget under `widget`, the participant Traffic report under `trafficInsights` (it starts on for new affiliate programs and hidden for referral programs, and every setting is returned with its default copy), participant sign-in copy under `login`, payout-destination confirmation page copy under `payoutDestinationConfirmation`, country-name overrides under `countryLabels`, and the participant Settings panel under `participantSettings` (its `languageSectionTitle` and `languageSectionInstructionsText` label the language picker shown when the program has more than one language). `participantAvatarStyle` is `CHARACTERS`, `INITIALS`, `ANIMALS`, or `GRADIENT`; missing or unknown values mean `INITIALS`. `visualStyle` is the program Style (`GLOW`, `CLEAN`, `FLAT`, `ROUND`, `TINT`, or `GLASS`) and is omitted when the program has no saved Style. The confirmation section is omitted when no confirmation fields are stored. Stored `null` fields are returned as `null`; omitted and `null` fields use localized defaults. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_update_campaign_design

Update Program Design

Update the design configuration for your GrowSurf program, including participant avatars under `participantAvatarStyle`, referred-visitor content such as the Claim Offer Popup and the side content of its GrowSurf page (`referredExperience.offerPageDescription` HTML, up to 5 `offerPageSteps` of `{ text, iconKey }`, and up to 3 `offerPageLinks` of `{ text, url }` where an empty `url` links to the Share URL), the website widget under `widget` (button or card, placement, timing, and visible pages), the participant Traffic report under `trafficInsights`, participant sign-in copy under `login`, payout-destination confirmation page copy under `payoutDestinationConfirmation`, and the participant Settings panel under `participantSettings`, such as the language picker's `languageSectionTitle` (up to 100 characters) and `languageSectionInstructionsText` (up to 255 characters). `trafficInsights.isPublicDisplayed` controls visibility; its labels cannot be blank. `participantAvatarStyle` accepts `CHARACTERS`, `INITIALS`, `ANIMALS`, or `GRADIENT`. `visualStyle` accepts `GLOW`, `CLEAN`, `FLAT`, `ROUND`, `TINT`, or `GLASS`; it sets corners, shadows, button shape and background on program pages and the GrowSurf Window. Changing it also fills `theme.buttons.borderRadius` and the `theme.globalBoxShadow` fields unless the same request sets them. Text fields use the same character limits as the dashboard Program Editor. Text the Program Editor requires, such as Window labels, button text, and status names, cannot be set to `null`, empty, or only spaces. Only supplied `fields` change; omitted fields retain their existing content and arrays replace wholesale. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數fields必填campaignId必填

growsurf_get_campaign_emails

Get Program Emails

Fetch the Emails tab configuration for your GrowSurf program, including participant and admin email templates, settings, and read-only fields. `settings.sender.fromEmail` is read-only and can be changed in the dashboard after domain verification. When updating, omit unchanged sender fields; `fromName` and `replyToEmail` cannot be cleared with `null`. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_update_campaign_emails

Update Program Emails

Update writable Emails tab fields for your GrowSurf program under `fields`, in their existing nested shape. `settings.sender.fromEmail` is read-only; sender address changes require domain verification in the dashboard. `settings.sender.fromName` and `settings.sender.replyToEmail` accept non-empty strings, not `null`. Omit either field to keep its current value, including an unset value returned by a read. The `invite` and transactional email `isEnabled` toggles are read-only. An email `subject` cannot be empty. Email bodies require their template links and footer tokens. When `settings.design.layoutMode` is `INLINE`, each body must include `{{emailFooter}}`; `{{emailHeader}}` is optional. `layoutMode` is read-only. Omitted fields retain their existing content; arrays replace wholesale. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數fields必填campaignId必填

growsurf_get_campaign_options

Get Program Options

Fetch the Options tab configuration for your GrowSurf program (referral triggers, anti-fraud lists and toggles, affiliate enrollment and application review, notifications, the program's languages under `languages`, and other behavior options). Returns the full object with every field and its current value, the same shape you send back on update. `autoFulfillRewards: false` permits manual fulfillment and does not prove that any reward went undelivered. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_update_campaign_options

Update Program Options

Update the Options tab configuration for your GrowSurf program under `fields`, in its existing nested shape. Only supplied fields change; omitted fields retain their existing values and arrays replace wholesale. `languages.additionalLanguages` takes the full list of extra languages; send `[]` to turn them off. The base language is dropped from that list and duplicates collapse. `languages.showFlags` shows or hides the flag next to each language name. `languages.flagCountries` picks the flag for a language that offers more than one, such as `{ "en": "GB" }`; `null` restores the default flag. Turning on `languages.additionalLanguages` returns `403` if your account does not include additional languages. While any are on, every `languages` change, including turning them off, returns the same `403`. Translations are managed in the GrowSurf dashboard, not through this tool. `notificationEmails.recipients` needs at least one valid email address. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數fields必填campaignId必填

growsurf_get_campaign_installation

Get Program Installation

Fetch the Installation tab configuration for your GrowSurf program (embed/installation and tracking setup). Returns the full object with every field and its current value — the same shape you send back on update. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_update_campaign_installation

Update Program Installation

Update the Installation tab configuration for your GrowSurf program under `fields`. Only supplied fields change; omitted fields retain their existing values and arrays replace wholesale. `allowedUrls` includes permitted browser origins such as `http://localhost:3000`. An origin missing from both `shareUrl` and `allowedUrls` can return `403`. Referral links already shared point at the current `shareUrl`. Replacing an existing Share URL requires the customer's explicit approval and `replaceExistingShareUrl: true`; otherwise the patch is refused. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數fields必填campaignId必填replaceExistingShareUrl

growsurf_get_campaign_custom_domain

Get Program Custom Domain

Fetch the custom domain that serves your GrowSurf program's landing pages, such as `https://refer.example.com`. Returns `domain` (`null` when none is set), `isVerified`, `verifiedAt`, and `dnsRecord`, the `CNAME` record to add at the DNS provider. This read does not check DNS; use `growsurf_verify_campaign_custom_domain` for a live check. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_set_campaign_custom_domain

Set Program Custom Domain

Set or replace the custom domain for your GrowSurf program's landing pages. Pass a hostname such as `refer.example.com` in `domain`; `https://` is added if you leave it out. Paths, ports, queries, and `http://` return `400`. Replacing a domain removes the old one right away, and its pages stop loading there, so confirm with the customer before replacing a domain that is already set. Sending the current domain again changes nothing. A domain used by another program returns `409`, and `403` means the account cannot use custom domains yet: a higher plan is needed, or for an affiliate program, a payment method on file. A new domain starts unverified: add the `CNAME` record from the returned `dnsRecord` at the DNS provider (`dnsRecord.name` pointing to `dnsRecord.value`), then call `growsurf_verify_campaign_custom_domain`. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數domain必填campaignId必填

growsurf_verify_campaign_custom_domain

Verify Program Custom Domain

Check the program's custom domain DNS now and return the result in `isVerified`. Call it after the `CNAME` record from `dnsRecord` is in place. If the record is wrong or has not propagated yet, `isVerified` stays `false`; try again later. The first time the check passes, GrowSurf sets up the domain's SSL certificate, and pages can take a few minutes to load over `https://` after that. More than one `CNAME` record on the hostname returns `400`. Returns `404` when no custom domain is set. A domain that is already verified is returned as is, without a new check. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_remove_campaign_custom_domain

Remove Program Custom Domain

Remove the custom domain from your GrowSurf program. Its landing pages stop loading on that domain and go back to their GrowSurf URL. Returns `{ domain, success }`. Returns `404` when no custom domain is set. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_capture_referral_flow_screenshots

Capture Referral Flow Screenshots

Capture temporary GrowSurf preview screenshots after a draft program is saved. Returns short-lived URLs for the controlled referrer Window and referred-friend experience, with an `expiresAt` timestamp in UTC. The screenshots reflect the saved program at capture time and do not verify installation on the customer's site. A failed inline image alone does not establish that the URL expired. This tool does not accept arbitrary URLs, HTML, JavaScript, or external screenshot targets. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_get_team

Get Team

Fetch the team bound to the API key or OAuth connection. `verificationStatus` is `VERIFIED` once GrowSurf has verified the team, which is required before a program can email participants. Personal profiles and internal identifiers are not returned. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

無需輸入參數。

growsurf_update_team

Update Team

Update the display name of the team bound to the API key or OAuth connection. Personal profiles, billing, and team ownership are not editable here. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

輸入參數name必填

growsurf_request_team_verification

Request Team Verification

Ask GrowSurf to verify the team bound to the API key or OAuth connection. Verification is required before a program can email participants. Calling this again while a request is pending does not create a duplicate. Returns the team with its updated `verificationStatus`. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

無需輸入參數。

growsurf_resend_team_owner_verification_email

Resend Team Owner Verification Email

Resend the email-verification message to the bound team's owner. The response never reveals the owner's email address. A `200` with `status: SENT` is returned only when an email was sent. Returns `400` if the email is already verified and `429` if one was sent too recently. Requires `GROWSURF_API_KEY`; does not require `GROWSURF_CAMPAIGN_ID`.

無需輸入參數。

growsurf_get_campaign_analytics

Get Program Analytics

Fetch analytics for your GrowSurf program: participants, referrals, impressions, per-channel shares, and affiliate revenue, commission, and payout metrics when applicable. Pass `interval` (`day`, `week`, or `month`) for a per-period `series`. Pass comma-separated `include` values for `previousPeriod`, `statusCounts`, `rates`, `email`, or `engagement`. `engagement` groups unique active, sharing, repeat, and retained participants by when portal views and share actions occurred. Its `coverageStartAt`, `state`, and `reason` distinguish measured zeroes from partial or unavailable history. Scope the timeframe with `days` (default 365, max 1825) or an explicit `startDate`/`endDate` window. Explicit dates must both be positive Unix timestamps in milliseconds, with `endDate` >= `startDate` and a maximum span of 1825 days. `timezone` and `platform` apply to engagement only. Targets `campaignId` if passed, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數daysendDateincludeintervalplatformtimezonestartDatecampaignId必填

growsurf_get_campaign_activation_analytics

Get Activation Analytics

Fetch strict activation for eligible participants in one enrollment cohort. Referral programs group by `enrolledAsAdvocateAt`; affiliate programs group by `approvedAsAffiliateAt`. The ordered stages are `ELIGIBLE`, `PORTAL_VIEWED`, `SHARE_ACTION`, `UNIQUE_REFERRAL_VISIT`, `LEAD`, and `CREDITED_REFERRAL`. Each participant gets the selected 7- or 30-day observation window. Omit both cohort bounds for the latest fully matured cohort. Read `coverageStartAt`, `state`, and `reason` before interpreting a null or zero; unavailable history does not mean an action never happened. Targets `campaignId` if passed, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數cohortTotimezonecampaignId必填cohortFromcohortIntervalobservationWindowDays

growsurf_list_integrations

List Integrations

List the integrations available to your GrowSurf program, including Stripe, PayPal, Wise, Mailchimp, Slack, Zapier, and Webhooks. Each entry includes `connected` (credentials stored), `enabled` (working), `autoDisabled` (delivery stopped after repeated failures until the user reconnects), and `connectUrl` (dashboard connection link). Integrations that do not apply to the program type are omitted, such as Wise on a referral program. Read-only. Account connection takes place in the GrowSurf dashboard and is not available through the API. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數campaignId必填

growsurf_list_campaign_webhooks

List Webhooks

List your GrowSurf program's webhooks (secrets are never returned). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填

growsurf_create_campaign_webhook

Create Webhook

Add a webhook to your GrowSurf program. `payloadUrl` is required. `events` is the list of events this webhook is subscribed to. Omit it to subscribe the webhook to every event its program type offers, or send `[]` for none. An event the program type does not offer returns `400`. A program can have up to 5 webhooks, counting the primary webhook, so you can create up to 4. Creating another returns `400`. `secret` is write-only — GrowSurf uses it to sign deliveries (the GrowSurf-Signature HMAC header) and never returns it. A program can have only one saved Bask Health webhook across all `bask.ninja` hosts and paths, including disabled webhooks. A second Bask Health webhook returns `400`. A concurrent change to webhook settings can return `409`; reload the webhooks before retrying. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數eventssecretisEnabledcampaignId必填payloadUrl必填

growsurf_update_campaign_webhook

Update Webhook

Update a webhook on your GrowSurf program by id (`webhookId` is `primary` for the program's primary webhook). Only the fields you send are changed. `secret` is write-only and never returned. A program can have only one saved Bask Health webhook across all `bask.ninja` hosts and paths, including disabled webhooks. An update that leaves more than one Bask Health webhook returns `400`. A concurrent change to webhook settings can return `409`; reload the webhooks before retrying. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數eventssecretisEnabledwebhookId必填campaignId必填payloadUrl

growsurf_delete_campaign_webhook

Delete Webhook

Remove a webhook from your GrowSurf program by id. Returns { id, success }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數webhookId必填campaignId必填

growsurf_test_campaign_webhook

Send Test Webhook

Send a live test event to a webhook on your GrowSurf program using its stored URL and secret. Optionally pass `event` to choose which event type to simulate; when omitted, the webhook's first enabled event is used (returns 400 if the webhook has no enabled events). Returns the mock payload and the receiving endpoint's response. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數eventwebhookId必填campaignId必填

growsurf_list_participants

List Participants

List participants in your GrowSurf program, newest page first. `limit` is 1-100 (default 10). Pass response `nextId` into the next call to continue paging. Pass `metadata` to return only participants whose stored metadata matches every given key and value exactly, for example `{ "customerId": "12345" }` to look someone up by your own customer ID; filtered results are ordered by participant ID. Results include participant IDs. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數limitnextIdgroupIdmetadatacampaignId必填

growsurf_get_participant

Get Participant

Fetch a single participant by GrowSurf participant ID or email address. `referralStatus` describes credit to their referrer; `referralCount` counts referrals this participant generated, so zero is consistent with `CREDIT_AWARDED`. In `rewards`, `approved` records approval; `status`, `isFulfilled`, and `fulfilledAt` record fulfillment marking, not confirmation of delivery. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填participantIdparticipantEmail

growsurf_add_participant

Add Participant

Add or fetch a participant by email. If the email already exists, the existing participant is returned unchanged. One exception: if that participant claimed an offer in the Claim Offer Popup and the signup is not complete yet, this call completes the signup with the original referrer and saves any non-blank `firstName`, `lastName`, and `metadata` you send. This is trusted direct enrollment and bypasses the public application review flow for affiliates. For affiliate programs, set `isAffiliate` to `true` to enroll a new participant as approved or `false` to create a non-affiliate. If you omit it, a valid `referredBy` creates a referred non-affiliate; without a valid referrer, the new participant is enrolled as approved. A valid `referredBy` can be combined with `isAffiliate: true`. Targets `campaignId` if you pass it, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數email必填groupIdlanguagelastNamemetadatafirstNameipAddresscampaignId必填referredAtreferredByfingerprintisAffiliate另有 2 個

growsurf_update_participant

Update Participant

Update a participant by GrowSurf participant ID or email. Only the fields you send are changed; read-only fields such as counters, `isAffiliate`, `origin`, and fraud state are rejected with a `400`. In affiliate programs, `affiliateStatus` accepts `APPROVED`, `SUSPENDED`, or `BANNED`; `APPROVED` enrolls the participant, while `SUSPENDED` and `BANNED` require an existing affiliate. Affiliate enrollment cannot be removed through REST. `notes` is freeform internal notes (never shown to participants). Targets `campaignId` if you pass it, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數emailnotesgroupIdlanguagelastNamemetadatafirstNamecampaignId必填referredByvanityKeysunsubscribedparticipantId另有 3 個

growsurf_bulk_delete_participants

Bulk Delete Participants

Bulk delete participants from your GrowSurf program in one request. DESTRUCTIVE: deletion is permanent and cannot be undone. Successful rows lose participant access immediately; related record cleanup completes automatically, subject to required financial record retention. Each entry in `participants` is a GrowSurf participant ID or an email address (mixed lists are allowed), up to 200 entries per request — chunk larger lists across multiple calls. Returns a `summary` (total, deletedCount, notFoundCount, duplicateCount, errorCount) plus per-row `results` in request order, each with `status` DELETED, NOT_FOUND, DUPLICATE (resolves to the same participant as an earlier entry), or ERROR — both `200` and `202` responses can include NOT_FOUND or ERROR rows, and the summary reports these outcomes. A `202` response includes `analyticsErasure` when analytics erasure is pending. `DELETED` means participant access was removed; reports can retain the participant until cleanup completes. Do not repeat successful rows to finish cleanup. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填participants必填

growsurf_bulk_move_participants

Bulk Move Participants

Move participants in your GrowSurf program to a group, or to Default with `groupId: null`. Each entry in `participants` is a GrowSurf participant ID or an email address (mixed lists are allowed), up to 200 entries per request. All found participants move together: if the move fails, no one moves. A move is a manual placement, so the groups' email and domain rules do not override it later. A move applies to new referrals only; rewards already earned keep their amounts. Returns a `summary` (total, groupId, movedCount, notFoundCount, duplicateCount, errorCount) plus per-row `results` in request order, each with `status` MOVED, NOT_FOUND, DUPLICATE, or ERROR. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數groupId必填campaignId必填participants必填

growsurf_email_participant

Email Participant

Send an email to a participant (by GrowSurf participant ID or email). Provide EITHER `emailType` to trigger one of the program's configured email templates, OR `subject` + `body` for a free-form email (optionally `preheader`). For programs with `settings.design.layoutMode` set to `INLINE`, `body` must include `{{emailFooter}}`; `{{emailHeader}}` is optional. Free-form emails are sent with the same compliance handling (company name, postal address, and an unsubscribe link are added automatically, and unsubscribed participants are suppressed). Sending requires the team to be verified by GrowSurf and a verified custom email domain on the program (set up in *Program Editor > 3. Emails > Email Settings*). Returns 400 until one is verified. The email is accepted for delivery. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數bodysubjectemailTypepreheadercampaignId必填participantIdparticipantEmail

growsurf_get_participant_analytics

Get Participant Analytics

Fetch analytics for one participant by GrowSurf participant ID or email. The base response includes all-time engagement, rank, share, and applicable affiliate revenue, commission, and payout metrics. Add `activation` to `include` for the program-specific eligibility anchor and covered first milestones, including `firstPortalViewedAt` and `firstShareChannel`. A null milestone with a partial or unavailable `state` is unknown, not proof that the action never happened. Request both `activation` and `series` for covered `portalViews` and `shareActions` buckets. Filter optional series and email data with `days` (up to 1825) or both `startDate` and `endDate` as positive Unix timestamps in milliseconds. `endDate` must be at or after `startDate`, and the range can span at most 1825 days. These date parameters do not filter the base response or activation milestones. Targets `campaignId` if passed, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數daysendDateincludeintervalstartDatecampaignId必填participantIdparticipantEmail

growsurf_get_participant_activity_logs

Get Participant Activity Logs

List a participant's activity logs (by GrowSurf participant ID or email), most recent first, offset/limit paginated. `limit` is 1-100 (default 20); `offset` skips logs. The response `offset` is the cursor for the next page (null when there are no more). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數limitoffsetcampaignId必填participantIdparticipantEmail

growsurf_trigger_referral

Trigger Referral

Trigger referral credit for a referred participant (use when your trigger is Sign up + Qualifying Action). Optionally pass delayInDays (1-90) to hold the credit for N days before awarding it (e.g. to cover a refund window). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填delayInDaysparticipantIdparticipantEmail

growsurf_cancel_delayed_referral

Cancel Delayed Referral

Cancel a pending delayed referral trigger for a participant before the delay elapses (e.g. on refund/cancellation). Returns { success, message }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填participantIdparticipantEmail

growsurf_get_participant_payout_destination

Get Payout Destination

Get a participant's payout-destination status (by GrowSurf participant ID or email) across every payout provider enabled for the program (PayPal, Venmo, or Wise). For each provider it reports the current `status`, the confirmed payout email, the legal recipient type, and — when a delivery bounced or a recipient was invalidated — the repair reason. `activeProvider` is the provider that currently gets paid, or null until the participant confirms one. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數campaignId必填participantIdparticipantEmail

growsurf_request_participant_payout_destination_confirmation

Request Payout Destination Confirmation

Ask a participant to confirm their payout destination for a provider (by GrowSurf participant ID or email). Sends them a one-time confirmation link for the chosen `provider`; only the participant can open the link and confirm — this just triggers the message, and the provider must be enabled for the program. Returns { status, provider, providerDisplayName, expiresAt }. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數provider必填campaignId必填participantIdparticipantEmail

growsurf_record_sale

Record Sale

Record a sale/transaction for an affiliate program. Use webhooks to know when commissions are added. Requires at least one transaction identifier (externalId, transactionId, orderId, paymentId, invoiceId, paymentIntentId, or chargeId) so repeated calls are de-duplicated instead of double-paying the referrer; reuse the same one when refunding. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

輸入參數paidAtorderIdchargeIdcurrency必填testModeinvoiceIdnetAmountpaymentIdtaxAmountamountPaidcampaignId必填customerId另有 16 個

growsurf_refund_transaction

Record Affiliate Refund or Chargeback

Record a refund, partial refund, or chargeback for a previously recorded affiliate transaction in GrowSurf and reverse or adjust the referrer's commission. This records the amendment without sending a refund through the payment provider. Requires the same transaction identifier as the original sale. Omitted `amountRefunded` means a full refund. Already-paid commissions are not clawed back and are recorded for tax only. Targets `campaignId` if supplied, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數amountorderIdchargeIdcurrencyrefundIdtestModeinvoiceIdpaymentIdcampaignId必填externalIddescriptionrefundAmount另有 9 個

growsurf_create_mobile_participant_token

Create Mobile Participant Token

Create or fetch a participant, then create a participant-scoped mobile SDK token via GrowSurf REST. Participant creation is trusted direct enrollment and bypasses the public application review flow for affiliates. Targets `campaignId` if you pass it, otherwise `GROWSURF_CAMPAIGN_ID`.

輸入參數email必填languagelastNamemetadatafirstNameipAddresscampaignId必填referredAtreferredByfingerprintisAffiliatereferralStatus另有 1 個

growsurf_participant_auth_hash

Compute Participant Auth Hash

Compute a SHA-256 HMAC using the caller-supplied `participantAuthSecret`. Server environment secrets are never used. Use a test secret during implementation; keep production signing in your backend. `affiliateJoin` requires permission for this signed-in user to join the affiliate program directly.

輸入參數email必填affiliateJoinparticipantAuthSecret必填

growsurf_webhook_normalize

Normalize Webhook Payload

Validate/normalize a GrowSurf webhook payload and generate a best-effort idempotency key for dedupe.

輸入參數payload必填

growsurf_client_snippets

Generate Browser JavaScript Snippets

Generate Markdown browser JavaScript and CSS examples for referral tracking, embeddable elements, and the GrowSurf Window, with placement guidance. Does not install code or change a program. Use `growsurf_embeddable_element_snippet` for one HTML element, `growsurf_grsf_config_snippet` for `window.grsfConfig`, or `growsurf_api_library_snippets` for backend REST code.

輸入參數programTypesinglePageAppreferralTriggerincludeUnreadBadgeincludeGrowSurfWindowparticipantAuthEnabledincludeEmbeddableElementsincludeEventSubscriptions

growsurf_embeddable_element_snippet

Generate Embeddable Element HTML

Generate one embeddable element's HTML as Markdown. Choose `element`; optionally include participant authentication attributes. Does not install the element or change a program. Use `growsurf_client_snippets` for a broader browser integration or `growsurf_grsf_config_snippet` for page-level participant auto authentication.

輸入參數element必填participantwithAuthAttributes

growsurf_grsf_config_snippet

Generate Participant Auto Authentication Code

Generate the HTML code for GrowSurf Participant Auto Authentication using `window.grsfConfig`. The generated code belongs in `<head>`, before the GrowSurf Universal Code.

輸入參數hashemailcampaignIdaffiliateJoinuseCampaignIdPlaceholderenableParticipantAutoAuthincludeAutoAuthCommentHeader

版本歷史

29
  1. v0.19.32最新Nov 12, 2026
  2. v0.19.31Nov 8, 2026
  3. v0.19.30Nov 8, 2026
  4. v0.19.29Nov 7, 2026
  5. v0.19.28Nov 4, 2026
  6. v0.19.27Nov 3, 2026
  7. v0.19.26Nov 3, 2026
  8. v0.19.24Oct 24, 2026
  9. v0.19.23Oct 21, 2026
  10. v0.19.22Oct 20, 2026
  11. v0.19.21Oct 20, 2026
  12. v0.19.20Oct 20, 2026
  13. v0.19.19Oct 19, 2026
  14. v0.19.17Oct 19, 2026
  15. v0.19.16Oct 18, 2026
  16. v0.19.15Oct 15, 2026
  17. v0.19.14Oct 15, 2026
  18. v0.19.13Oct 9, 2026
  19. v0.19.12Oct 8, 2026
  20. v0.19.11Oct 8, 2026
  21. v0.19.10Oct 7, 2026
  22. v0.19.9Oct 3, 2026
  23. v0.19.8Oct 1, 2026
  24. v0.19.7Sep 30, 2026
  25. v0.19.2Sep 29, 2026
  26. v0.19.1Sep 23, 2026
  27. v0.18.1Sep 21, 2026
  28. v0.16.0Sep 17, 2026
  29. v0.15.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分