# GrowSurf (npm · @growsurfteam/growsurf-mcp)

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

- Trust score: 90/100 (high trust)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-20

## Components

- remote · `mcp.growsurf.com`: 36/100, [markdown](https://verifymcp.io/servers/com-growsurf-growsurf/mcp.md), [page](https://verifymcp.io/servers/com-growsurf-growsurf/mcp)
- npm · `@growsurfteam/growsurf-mcp`: 90/100 (this document), [markdown](https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp.md), [page](https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp)

## Channel facts

- Registry: `npm`
- Package: `@growsurfteam/growsurf-mcp`
- Version: `0.16.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-20.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 97 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to growsurf/growsurf-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 70/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 15055 tokens (~235/item across 64 items; 63 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 87/100
  - Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 82/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 37% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 97/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 7 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "growsurf_agent_program_creation_eval" implies "eval" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 65 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the GrowSurf MCP server?

GrowSurf runs locally as an npm package, launched with npx -y @growsurfteam/growsurf-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add com-growsurf-growsurf -- npx -y @growsurfteam/growsurf-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-growsurf-growsurf": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@growsurfteam/growsurf-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-growsurf-growsurf --command npx --arg -y --arg @growsurfteam/growsurf-mcp
```

### Hermes

```yaml
mcp_servers:
  com-growsurf-growsurf:
    command: "npx"
    args: ["-y", "@growsurfteam/growsurf-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "com-growsurf-growsurf": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-growsurf-growsurf -t stdio -c npx -a -y @growsurfteam/growsurf-mcp
```

### Other

```json
{
  "mcpServers": {
    "com-growsurf-growsurf": {
      "command": "npx",
      "args": [
        "-y",
        "@growsurfteam/growsurf-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-20 (score 90, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 89, +1)

- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.73 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional] Package version: 0.15.1 → 0.16.0

### 2026-09-15 (score 88, +16)

- [security improvement] Malware scan: unverified → pass

### 2026-09-14 (score 72, −14)

- [security regression] Malware scan: pass → unverified
- [security regression] Known CVEs: pass → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.63 → unverified
- [functional regression] Schema quality: 182 → 233
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Dependency health: 0.84 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Tool coverage: 26% → 37%
- [functional] Package version: 0.12.2 → 0.15.1
- [functional] Package version: 0.12.2 → 0.15.0

### 2026-09-12 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-08 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-06 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (63)

### `growsurf_integration_guide` (~70 tokens)

Integration Guide

Generate a guided, happy-path GrowSurf integration plan (referral + affiliate).

Input parameters:

- `participantAuthEnabled` (boolean)
- `programType` (string)
- `referralTrigger` (string)
- `singlePageApp` (boolean)
- `webhookSecurity` (string)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_agent_program_creation_eval` (~63 tokens)

Program Creation Evals

Generate one-shot GrowSurf program-creation eval prompts and acceptance checks for agent steering: starter content review, conservative rewards, configuration review, and frontend install proof.

Input parameters:

- `includeOneShotPrompts` (boolean)
- `programType` (string)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_program_design_advisor` (~695 tokens)

Program Design Advisor

Use for program designs, benchmarks, typical rewards, and metric definitions, including participant-to-referral and lead-to-referral ratios. Read-only; call with known context before asking questions. Returns a short draft, complete `benchmarkFacts` to quote, exact `configurationPlan` tool calls, and unresolved `decisions`. Preserve the calls and leave unresolved incentives open. Use the default summary for first designs and configuration drafts; use `detail: full` when the user requests detailed benchmark tables or a specific figure absent from the summary. Hosted figures describe GrowSurf's high-performing programs; without a bundle, guidance is documentation-based. Use `programType: AFFILIATE` for affiliates and `industry: other` for local services, pets, hospitality, or agencies. All inputs are optional.

Input parameters:

- `audience` (string): Who refers whom.
- `businessModel` (string): One line on what the business sells and how. Also set `salesMotion` when the buying process is known.
- `companyName` (string): Used in the heading and proposed program name; omit it when unknown.
- `currencyISO` (string): ISO 4217 code. Non-USD advice omits the dollar reward bands. No exchange rate or equivalent-currency benchmark is available.
- `detail` (string): Use summary for a first design or configuration draft, including a reward structure recommendation. Use full only for requested detailed benchmark tables or specific figures absent from the summary,…
- `goal` (string): What a successful referral means for the business. `paid_conversions` and `leads` imply a qualifying action; `signups`, `subscribers`, and `waitlist` count the signup unless a separate `qualifyingAct…
- `includeRules` (boolean): Append guidance on applying the recommendations. Off by default.
- `industry` (string): Closest industry segment: `financial_services_fintech` (banking, lending, investing, insurance, payments, crypto), `saas_ai` (software sold to businesses, developer tools, AI products), `media_newsle…
- `programType` (string)
- `qualifyingAction` (string): The action a referred friend must complete, in the customer's words.
- `rewardBudgetPerReferral` (number): The customer's spending limit per successful referral, in major currency units. A budget does not select an incentive amount or commission rate. Budget comparisons omit the mixed-currency reward amou…
- `salesMotion` (string): Use `sales_led` for demos, sales calls, negotiated pricing, or signed contracts; use `self_service` when customers buy directly. This selects the reward structure. Omit when unknown.

Output parameters:

- `benchmarkFacts` (array): Complete benchmark statements with metric units, median, Q1, Q3, sample, and source. Quote each statement intact. Empty when no suitable figures are available.
- `configurationPlan` (array): Proposed calls using the listed tools' argument shapes. Preserve each tool and arguments object when presenting the plan; replace <new-program-id> with the creation response's id before execution.
- `decisions` (object): Use one qualifying action throughout the draft. Unresolved choices require a customer decision before configuration.
- `markdown` (string): The requested summary or full advice, including the same configuration calls and their conditions.

### `growsurf_troubleshoot_referral_tracking` (~347 tokens)

Troubleshoot Referral Tracking

Call first for a program problem, even without a program or participant ID. It returns initial checks; ask for IDs before reading records. Covers referrals not credited, participant emails not sending, rewards not issued, participants not added, Universal Code not detected, an integration or CRM (HubSpot, Mailchimp, and others) not syncing, Zapier errors, fraud flags, analytics 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; unknown keys return the available symptoms; a `description` is matched only when it contains a symptom's label or alias verbatim, otherwise the symptom list is returned.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `description` (string): The problem in the customer's words, when `symptom` is unknown.
- `participantEmail` (string): Affected participant email, when the id is unknown.
- `participantId` (string): Affected participant id, echoed into participant-level checks.
- `symptom` (string): The symptom to diagnose. Known keys: `participant_emails_not_sending`, `reward_not_issued`, `referral_not_credited`, `participants_not_added`, `universal_code_not_detected`, `platform_specific_instal…

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_mobile_sdk_guide` (~105 tokens)

Mobile SDK Guide

Generate native iOS/Android SDK 0.4.0 guidance, including attribution, shareUrl sharing, trackShare, and the native GrowSurf Window.

Input parameters:

- `attributionProvider` (string)
- `campaignId` (string)
- `includeInstallSnippets` (boolean)
- `mobilePublicKey` (string)
- `participantState` (string)
- `platform` (string)
- `serverVerifiedQualifyingAction` (boolean)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_api_library_snippets` (~84 tokens)

API Library Snippets

Generate official REST API library snippets for TypeScript, Python, PHP, Ruby, and Java, including Create Mobile Participant Token.

Input parameters:

- `campaignId` (string)
- `email` (string)
- `language` (string)
- `participantIdOrEmail` (string)
- `referredBy` (string)
- `workflow` (string)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_get_campaign` (~125 tokens)

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; read the affected participant for earned reward records. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `currencyISO` (string|null): The program currency as an ISO 4217 code (e.g. `USD`).
- `id` (string): The program's unique id.
- `impressionCount` (integer): Total referral-link views across participants.
- `inviteCount` (integer): Total invites sent by participants.
- `name` (string): The program name (internal only, never shown to participants).
- `participantCount` (integer): Total participants.
- `referralCount` (integer): Total referrals.
- `rewardEvidence` (object): What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.
- `rewards` (array): The program's reward configs (`CampaignReward`). Item shape is documented on the `growsurf_list_campaign_rewards` tool.
- `status` (string): The program status.
- `type` (string): The program type.
- `winnerCount` (integer): Participants with at least one approved reward.

### `growsurf_list_campaigns` (~60 tokens)

List Programs

List the GrowSurf programs available to the bound team. Use this first when you need to choose a `campaignId` before calling campaign-scoped tools. Deleted programs are not returned. Does NOT require GROWSURF_CAMPAIGN_ID.

Output parameters:

- `campaigns` (array): Programs available to the API key's bound team.

### `growsurf_create_campaign` (~514 tokens)

Create Program

Create a new GrowSurf program (campaign) pre-populated with type-appropriate starter content, optionally with inline rewards. Starter content includes Design, Emails, Options, Installation, and GrowSurf Window defaults. Only `type` is required; the program is created in `DRAFT` status owned by the credential's bound team. `currencyISO` sets the program's currency (defaults to `USD`) and is immutable after creation. Pass `goal` so the share settings suit the audience; it is set here or not at all. Ask the person for the incentive rather than choosing one: leave `rewards` out unless they named an amount, and tell them the program starts with GrowSurf's starter rewards switched off so it awards nothing yet. Editor-tab config (design, emails, options, installation) is not accepted here. Fetch and review those config sub-resources after creation, then patch only what needs to change. Does NOT require GROWSURF_CAMPAIGN_ID. The response includes the new program `id`; pass it as `campaignId` to the other tools (or set GROWSURF_CAMPAIGN_ID) to configure and operate the program.

Input parameters:

- `companyLogoImageUrl` (string)
- `companyName` (string)
- `currencyISO` (string)
- `goal` (string): What the program is for, which seeds share settings that suit that audience. Programs selling to businesses (`CUSTOMERS`, `USERS`, `B2B_SAAS_SELF_SERVICE`, `B2B_SAAS_ENTERPRISE`) start with the Linke…
- `name` (string)
- `rewards` (array): Rewards to create with the program. Include this only when the person told you the amount and who funds it. Omit it and the program is seeded with starter rewards that are switched off, awarding noth…
- `type` (string, required)

### `growsurf_update_campaign` (~258 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `companyLogoImageUrl` (string)
- `companyName` (string)
- `name` (string)
- `status` (string): Lifecycle transition. IN_PROGRESS publishes/resumes the program; COMPLETE ends it. These are the only accepted targets — DRAFT/PENDING/CANCELLED are rejected by the API.

### `growsurf_clone_campaign` (~114 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

### `growsurf_list_campaign_rewards` (~125 tokens)

List Campaign Rewards

List your GrowSurf program's configured rewards. These settings do not establish that a participant earned or received a reward; inspect their `rewards` with `growsurf_get_participant`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `rewardEvidence` (object): What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.
- `rewards` (array): The program's active, visible, and enabled reward configs.

### `growsurf_create_campaign_reward` (~548 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `commissionStructure` (object): Affiliate commission structure (AFFILIATE rewards only). Provide a positive `amount` (+ optional `amountISO`) for a FIXED commission, or `percent` for a PERCENT commission. CLICK and LEAD commissions…
- `conversionsRequired` (integer)
- `couponCode` (string)
- `description` (string)
- `event` (string): The referral event that earns this Campaign Reward. Use `LEAD` for a referred signup or `CONVERSION` for a qualifying action. A `LEAD` reward requires a later custom conversion trigger. Referral rewa…
- `imageUrl` (string)
- `isUnlimited` (boolean)
- `isVisible` (boolean)
- `limit` (integer)
- `limitDuration` (string)
- `metadata` (object)
- `nextMilestonePrefix` (string)
- `nextMilestoneSuffix` (string)
- `numberOfWinners` (integer)
- `order` (integer)
- `referralCouponCode` (string)
- `referralDescription` (string)
- `referredRewardUpfront` (boolean)
- `referredValue` (object): Tax valuation for the referred friend's side of a double-sided reward. `taxCharacter` is the reason the recipient earns the reward. For configurable non-commission rewards, `null` inherits the progra…
- `title` (string)
- `type` (string, required)
- `value` (object): Tax valuation for the reward (the referrer's side of a double-sided reward). `fairMarketValueUSD` is the manual fair-market value in USD (major units). `taxCharacter` is the reason the recipient earn…

### `growsurf_update_campaign_reward` (~547 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `campaignRewardId` (string, required)
- `commissionStructure` (object): Affiliate commission structure (AFFILIATE rewards only). Provide a positive `amount` (+ optional `amountISO`) for a FIXED commission, or `percent` for a PERCENT commission. CLICK and LEAD commissions…
- `conversionsRequired` (integer)
- `couponCode` (string)
- `description` (string)
- `event` (string): The referral event that earns this Campaign Reward. Use `LEAD` for a referred signup or `CONVERSION` for a qualifying action. A `LEAD` reward requires a later custom conversion trigger. Referral rewa…
- `imageUrl` (string)
- `isUnlimited` (boolean)
- `isVisible` (boolean)
- `limit` (integer)
- `limitDuration` (string)
- `metadata` (object)
- `nextMilestonePrefix` (string)
- `nextMilestoneSuffix` (string)
- `numberOfWinners` (integer)
- `order` (integer)
- `referralCouponCode` (string)
- `referralDescription` (string)
- `referredRewardUpfront` (boolean)
- `referredValue` (object): Tax valuation for the referred friend's side of a double-sided reward. `taxCharacter` is the reason the recipient earns the reward. For configurable non-commission rewards, `null` inherits the progra…
- `title` (string)
- `value` (object): Tax valuation for the reward (the referrer's side of a double-sided reward). `fairMarketValueUSD` is the manual fair-market value in USD (major units). `taxCharacter` is the reason the recipient earn…

### `growsurf_delete_campaign_reward` (~151 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `campaignRewardId` (string, required)

Output parameters:

- `id` (string): The deleted campaign reward id.
- `success` (boolean): Whether the campaign reward was deleted.

### `growsurf_list_program_resources` (~107 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `resources` (array): The program's resources in participant display order, including drafts.

### `growsurf_prepare_program_resource_file` (~335 tokens)

Prepare Program Resource File

Prepare a local file for a `FILE` Program Resource. Pass the safe file name, matching supported MIME type, and padded base64 bytes (10 MB maximum). GrowSurf requests a one-time ticket and uploads only to the secure HTTPS destination selected by GrowSurf. The result contains only `uploadTicket` and `uploadResult`; pass both unchanged to `growsurf_create_program_resource` or `growsurf_update_program_resource`. The tool does not accept upload URLs or credentials and never retries an ambiguous upload. This tool is the only source of `uploadTicket` and `uploadResult`, and it needs `GROWSURF_UPLOAD_ALLOWED_ORIGINS` set on the server; without it, `FILE` resources are unavailable and only `LINK` and `TEXT` resources can be created. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `fileBase64` (string, required): Canonical padded base64 file bytes only. Do not include a data-URL prefix or whitespace.
- `fileName` (string, required): A safe base name with an allowed extension: jpg/jpeg/png/gif/webp/pdf/csv/zip/doc/docx/xls/xlsx/ppt/pptx.
- `mimeType` (string, required): The supported MIME type matching fileName's extension.

Output parameters:

- `uploadResult` (object): The minimal signed upload confirmation. Pass it unchanged to create/update.
- `uploadTicket` (string): The one-time GrowSurf ticket. Pass it unchanged to create/update.

### `growsurf_create_program_resource` (~273 tokens)

Create Program Resource

Create a `FILE`, `LINK`, or `TEXT` resource for participants. `LINK` requires an HTTPS `url`. `TEXT` requires plain `text`. For a `FILE` up to 10 MB, call `growsurf_prepare_program_resource_file` first and pass its `uploadTicket` and `uploadResult` unchanged. New resources default to draft unless you set `isPublished`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `category` (string|null)
- `description` (string|null)
- `isPublished` (boolean)
- `text` (string): Used only with `TEXT`.
- `title` (string, required)
- `type` (string, required)
- `uploadResult` (object): The unmodified result returned by the secure upload flow. Used only with `FILE`.
- `uploadTicket` (string): The one-time upload ticket. Used only with `FILE`.
- `url` (string): Used only with `LINK`.

### `growsurf_update_program_resource` (~257 tokens)

Update Program Resource

Update at least one participant resource field, or move it to a zero-based `position`. Only sent fields change. To replace a `FILE`, call `growsurf_prepare_program_resource_file` first and pass its `uploadTicket` and `uploadResult` unchanged. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `category` (string|null)
- `description` (string|null)
- `isPublished` (boolean)
- `position` (integer)
- `resourceId` (string, required)
- `text` (string): Used with `TEXT`.
- `title` (string)
- `type` (string)
- `uploadResult` (object): The unmodified result returned by the secure upload flow for a replacement `FILE`.
- `uploadTicket` (string): The one-time upload ticket for a replacement `FILE`.
- `url` (string): Used with `LINK`.

### `growsurf_delete_program_resource` (~115 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `resourceId` (string, required)

Output parameters:

- `id` (string): The deleted resource id.
- `success` (boolean): Whether the resource was deleted.

### `growsurf_get_campaign_design` (~226 tokens)

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, participant sign-in copy under `login`, payout-destination confirmation page copy under `payoutDestinationConfirmation`, and country-name overrides under `countryLabels`. `participantAvatarStyle` is `CHARACTERS`, `INITIALS`, `ANIMALS`, or `GRADIENT`; missing or unknown values mean `INITIALS`. 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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `affiliateSummary` (object): Affiliate programs only. The affiliate's row of summary tiles (clicks, revenue, payouts).
- `commissions` (object): Affiliate programs only. The Commissions section of the participant portal.
- `countryLabels` (object): Participant-facing country-name overrides keyed by ISO 3166-1 alpha-2 code (for example `GB`). Each label replaces the default country name wherever participants pick a country, such as payout and ta…
- `header` (object): Header content for participants (`postText`) and non-participants (`preText`).
- `landingPages` (object): Portal and landing pages: company info, `content`, `styles`, third-party script ids, and SEO meta tags.
- `leaderboard` (object): The leaderboard section: labels, selectors, and name masking.
- `login` (object): The returning-participant sign-in form plus its success, resend, validation, and error text.
- `participantAvatarStyle` (string): How participant avatars appear in the GrowSurf Window. New programs use `CHARACTERS`; missing or unknown stored values return `INITIALS`.
- `participantSettings` (object): The participant's account settings area (logout, PayPal and Wise payout confirmation/status messages, tax details).
- `payoutDestinationConfirmation` (object): Customizable text for the payout-destination confirmation page opened from payout integration cards. One shared set applies to every enabled payout provider. Provider-aware text may use `{{payoutProv…
- `payouts` (object): Affiliate programs only. The Payouts section of the participant portal.
- `referralStatus` (object): The section listing who a participant invited and each invite's progress.
- `referralSummary` (object): Referral programs only. The participant's row of summary tiles (clicks, leads, referrals, rewards).
- `referredExperience` (object): The banner, headline, and Claim Offer Popup shown to a visitor who arrives through a referral link. The popup is available for referral and affiliate programs.
- `resources` (object): Participant Resources presentation settings: visibility, title, link and copy labels, the message shown when nothing is published, and the section icon. Resource items use the program Resource tools.
- `rewards` (object): Heading, icon, and empty-state text of the rewards panel.
- `share` (object): Share channels, invite settings, and share-button styling.
- `signup` (object): Signup form fields, GDPR consent, and button and login text.
- `stats` (object): The participant's referral-progress stats panel. Only `title` is editable.
- `theme` (object): Visual theme styling (colors, shadows, and similar).
- `window` (object): Layout of the GrowSurf window (`navigationMode`: `TABS` or `LIST`).

### `growsurf_update_campaign_design` (~220 tokens)

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, participant sign-in copy under `login`, and payout-destination confirmation page copy under `payoutDestinationConfirmation`. `participantAvatarStyle` accepts `CHARACTERS`, `INITIALS`, `ANIMALS`, or `GRADIENT`. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Fetch the configuration first, preserve starter content unless the user asked to change it, then pass just the fields you want to change under `fields`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `fields` (object, required)

### `growsurf_get_campaign_emails` (~128 tokens)

Get Program Emails

Fetch the Emails tab configuration for your GrowSurf program (participant and admin email templates and settings). 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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `affiliateApplicationApproved` (object): Tells an applicant their affiliate application was approved. Affiliate programs only. Transactional; its toggle cannot be changed.
- `affiliateApplicationDenied` (object): Tells an applicant their affiliate application was not approved. Affiliate programs only. Transactional; its toggle cannot be changed.
- `affiliateApplicationEmailCorrection` (object): Asks an applicant to confirm a corrected email address. Its body must contain `{{identityVerificationLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.
- `affiliateApplicationReceived` (object): Confirms an affiliate application was received and is under review. Affiliate programs only. Transactional; its toggle cannot be changed.
- `affiliateApplicationStatusLink` (object): Sends an applicant a secure link to view their application status. Its body must keep `{{applicationStatusLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.
- `affiliateEmailChangeVerification` (object): Asks an affiliate to confirm a new account email address. Its body must contain `{{identityVerificationLink}}`. Affiliate programs only. Transactional; its toggle cannot be changed.
- `campaignEndedNonWinners` (object): Sent to non-winners when the program ends. Referral programs only.
- `campaignEndedWinners` (object): Sent to reward winners when the program ends. Referral programs only.
- `commissionAdjusted` (object): Sent when a commission is adjusted after a refund or chargeback. Affiliate programs only.
- `commissionGenerated` (object): Sent to an affiliate when they earn a new commission. Affiliate programs only.
- `goalAchieved` (object): Sent when a participant unlocks a reward. Referral programs only.
- `invite` (object): The invitation email a participant sends to friends. `useCompanyReplyTo` sets who receives replies.
- `inviteAffiliate` (object): Invites a prospective affiliate to join the program. Its body must keep `{{affiliateInviteLink}}`. Affiliate programs only. Promotional; its toggle can be changed.
- `loginLink` (object): One-time sign-in link for returning participants. Transactional; its toggle cannot be changed.
- `offerClaimed` (object): Sent when a referred visitor saves an offer through the Claim Offer Popup. Referral and affiliate programs. Promotional; its toggle can be changed.
- `payoutDestinationChanged` (object): Tells a participant their payout destination changed. Its body must keep `{{payoutDestinationMaskedEmail}}`. Referral and affiliate programs. Transactional; its toggle cannot be changed.
- `payoutDestinationConfirmation` (object): Asks a participant to confirm the payout destination where they will receive payouts, such as a PayPal or Wise email address. Its body may use `{{payoutProvider}}` and must keep `{{payoutDestinationC…
- `payoutPending` (object): Sent when a payout is on the way. Affiliate programs only.
- `payoutSentSuccess` (object): Sent when a payout completes. Affiliate programs only.
- `progressUpdateMonthly` (object): Month-end progress recap for participants. Referral and affiliate programs.
- `referralLinkUsed` (object): Sent to a referrer when they earn referral credit. Referral programs only.
- `referralLinkViewedFirstTime` (object): Sent the first time a participant's referral link is viewed. Referral and affiliate programs.
- `referredSignup` (object): Sent to a referrer each time someone signs up using their link. Referral and affiliate programs.
- `settings` (object): Sender (`sender`), physical contact address (`contact`), and shared design (`design`) settings. The design object includes `unsubscribeAffiliateInvite` for direct affiliate invitation emails.
- `taxInfoApproved` (object): Tells a participant their tax form is complete and approved. Transactional; its toggle cannot be changed.
- `taxInfoMissing` (object): Asks a participant to submit required tax information. Transactional; its toggle cannot be changed.
- `taxInfoReceived` (object): Confirms submitted tax information was received. Transactional; its toggle cannot be changed.
- `taxInfoRejected` (object): Tells a participant their tax information needs to be resubmitted. Transactional; its toggle cannot be changed.
- `welcomeNonReferred` (object): Welcome email for a participant who joins without being referred. Referral and affiliate programs.
- `welcomeReferred` (object): Welcome email for someone who signs up through a referral link. Referral programs only.

### `growsurf_update_campaign_emails` (~165 tokens)

Update Program Emails

Update the Emails tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Pass just the fields you want to change under `fields`. To see the full object with every field and its current value, fetch the tab first, then send back only what you want to change. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `fields` (object, required)

### `growsurf_get_campaign_options` (~167 tokens)

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, 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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `affiliateApplicationMode` (string): Affiliate programs only. How public signups join the program. `OPEN_ENROLLMENT` enrolls them directly; `MANUAL_REVIEW` collects an application you approve or deny; `AUTO_APPROVE` collects the applica…
- `affiliateApplicationReviewEstimateBusinessDays` (integer|null): Affiliate programs only. Optional review-time expectation shown to pending applicants, in business days (1-60). `null` clears it.
- `affiliateReapplicationCooldownDays` (integer): Affiliate programs only. How many days a denied applicant waits before they can apply again (1-365, default 30). Only used when `affiliateReapplicationPolicy` is `AFTER_COOLDOWN`.
- `affiliateReapplicationPolicy` (string): Affiliate programs only. Whether a denied applicant may apply again. `AFTER_COOLDOWN` (the default) allows a new application once `affiliateReapplicationCooldownDays` has passed; `DISABLED` never all…
- `autoBlockFraud` (boolean): Automatically block signups flagged as high fraud risk.
- `autoFulfillRewards` (boolean): Referral programs only. Automatically mark earned rewards as fulfilled. `false` permits manual fulfillment and does not establish a delivery failure.
- `blockPaidAdsTraffic` (boolean): Do not attribute referrals from visitors who arrived through paid ads.
- `enforceGdprCompliance` (boolean): Store only the minimum participant data (no IP addresses, fingerprints, or mobile instance ids).
- `fraud` (object): Anti-fraud settings: `blockedEmails`/`blockedIps`/`blockedCountries` and matching allow lists, `blockBurnerEmails`, `blockDataCenterIps`, `blockHighRiskReferrers`, `autoBlockHighRiskIps`, per-IP sign…
- `notificationEmails` (object): Owner notification settings: `recipients` plus per-event `events` toggles.
- `payoutThreshold` (integer|null): Affiliate programs only. Minimum payout in minor currency units (e.g. cents). `0` or `null` means no minimum.
- `referralCookieWindowDays` (integer): How long a referral-link click is remembered in the visitor's browser, in days.
- `referralCreditWindowDays` (integer|null): How long a referred friend has to complete the qualifying action, in days. `null` means the credit never expires.
- `requireManualFraudApproval` (boolean): Flag suspected fraud for review instead of blocking signups automatically.
- `requireManualRewardApproval` (boolean): Referral programs only. Hold each earned reward for manual approval before it unlocks.
- `requireParticipantAuth` (boolean): Require returning participants to authenticate. Affiliate programs require `true`.
- `rewardEvidence` (object): What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.
- `taxDocumentation` (object): Affiliate programs only. Company billing details (name, address, VAT number) used on affiliate payout invoices and for VAT handling.

### `growsurf_update_campaign_options` (~164 tokens)

Update Program Options

Update the Options tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). Pass just the fields you want to change under `fields`. To see the full object with every field and its current value, fetch the tab first, then send back only what you want to change. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `fields` (object, required)

### `growsurf_get_campaign_installation` (~127 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `allowedUrls` (array): Every additional browser origin where the GrowSurf Window or SDK may run, including development origins such as `http://localhost:3000`. Preserve the full array when patching it. An origin absent fro…
- `mobile` (object): GrowSurf iOS and Android SDK settings.
- `referralTrigger` (string): Referral programs only. `ON_SIGNUP` counts a referral as soon as the friend signs up; `CUSTOM` also requires a qualifying action.
- `shareUrl` (string): The landing page referred friends reach from a referral link. Set this before adding other origins to `allowedUrls`.
- `signup` (object): Custom signup-form settings (used with `FORM_DETECTION`).
- `signupEvent` (string): The signup tracking method: automatic form detection, or participants added via the SDKs and REST API.
- `useGrowSurfHostedLinks` (boolean): Use GrowSurf-hosted referral links that route clicks by the visitor's device. Mainly for mobile apps.

### `growsurf_update_campaign_installation` (~337 tokens)

Update Program Installation

Update the Installation tab configuration for your GrowSurf program. Only the fields you send are changed; anything you leave out is untouched (arrays replace wholesale). To let GrowSurf run on another origin, such as `http://localhost:3000`, add that origin to `allowedUrls` and preserve the rest of the array; a browser origin missing from both `shareUrl` and `allowedUrls` can return `403`. Leave `shareUrl` out of the patch unless the customer asked for a different landing page: every referral link already shared points at the current one. A patch that would replace a Share URL that is already set is refused until you confirm it with the customer and resend with `replaceExistingShareUrl: true`. Fetch the tab first, then pass just the fields you want to change under `fields`. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `fields` (object, required): Installation fields to patch. Common keys include `shareUrl`, `allowedUrls`, `signupEvent`, `referralTrigger`, and `signup`. Arrays replace wholesale.
- `replaceExistingShareUrl` (boolean): Set this to `true` only after the customer confirms they want a different landing page. Without it, a patch that would replace a Share URL that is already set is refused.

### `growsurf_capture_referral_flow_screenshots` (~160 tokens)

Capture Referral Flow Screenshots

Capture temporary GrowSurf preview screenshots after the user explicitly asks for screenshots or screenshot proof. Returns short-lived URLs for the controlled referrer Window and referred-friend experience for this program. This does not prove the user's installed site; use browser automation for that. This tool does not accept arbitrary URLs, HTML, JavaScript, or external screenshot targets. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `expiresAt` (string): When the signed URLs stop working (ISO 8601).
- `generatedAt` (string): When the screenshots were captured (ISO 8601).
- `screenshots` (array): One entry per captured view.

### `growsurf_create_account` (~404 tokens)

Create GrowSurf Account

Create a brand-new GrowSurf account and return an API key. Call this tool only after the authorized owner explicitly approves account creation and accepts GrowSurf's Terms of Service (https://growsurf.com/terms) and Privacy Policy (https://growsurf.com/privacy). This is the only tool that does not require `GROWSURF_API_KEY`. The account starts a 14-day Business trial without a credit card. The endpoint returns the new key once in `apiKey`. A lost key cannot be recovered through this API, so do not create an account here unless you can store the key somewhere that outlives the current conversation. If you cannot, ask the account owner to connect GrowSurf's hosted MCP server at `https://mcp.growsurf.com` instead, which keeps the credential with your tool rather than in chat. The key is locked until the account owner's email address is verified. Until then, program and resource endpoints return a `403` with error code `EMAIL_NOT_VERIFIED_ERROR`. Create the account, tell the owner to click the link in the verification email, then retry until that error clears. Use `growsurf_resend_team_owner_verification_email` if the email was lost. The welcome email also contains a set-password link for dashboard access. Accounts whose email is never verified are deleted automatically after 7 days. Verification unlocks the same key you were given, so keep it and retry rather than asking for a replacement. Separately, the API key is replaced the first time the account owner signs in to the GrowSurf dashboard; after that the previous key returns a `403` with error code `NOT_AUTHORIZED_ERROR`. Some actions, such as emailing participants, also require GrowSurf to verify the team. Personal and disposable email addresses are not accepted.

Input parameters:

- `company` (string)
- `email` (string, required)
- `firstName` (string)
- `lastName` (string)

Output parameters:

- `apiKey` (string): An API key for the new account. Shown once, locked (`403` `EMAIL_NOT_VERIFIED_ERROR`) until the account's email is verified, and rotated when the owner first signs in to the dashboard.
- `email` (string): Email address for the new account.
- `verificationStatus` (string): Team verification state for the new account.

### `growsurf_get_team` (~80 tokens)

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`.

Output parameters:

- `name` (string): The team's display name.
- `verificationRequestedAt` (integer|null): When verification was last requested, as a Unix timestamp in milliseconds.
- `verificationStatus` (string): Team verification state. `VERIFIED` is required before a program can send participant emails.

### `growsurf_update_team` (~72 tokens)

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`.

Input parameters:

- `name` (string, required): The team's display name.

Output parameters:

- `name` (string): The team's display name.
- `verificationRequestedAt` (integer|null): When verification was last requested, as a Unix timestamp in milliseconds.
- `verificationStatus` (string): Team verification state. `VERIFIED` is required before a program can send participant emails.

### `growsurf_request_team_verification` (~84 tokens)

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`.

Output parameters:

- `name` (string): The team's display name.
- `verificationRequestedAt` (integer|null): When verification was last requested, as a Unix timestamp in milliseconds.
- `verificationStatus` (string): Team verification state. `VERIFIED` is required before a program can send participant emails.

### `growsurf_resend_team_owner_verification_email` (~99 tokens)

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`.

Output parameters:

- `status` (string): Status of the verification email request.
- `success` (boolean): Whether the verification email request was accepted.

### `growsurf_get_campaign_analytics` (~461 tokens)

Get Program Analytics

Fetch analytics for your GrowSurf program: participants, referrals, impressions, per-channel shares, and affiliate revenue, commission, and payout metrics when applicable. For what impressions, unique impressions, leads, and referrals mean, or why counts differ from another analytics tool, call `growsurf_troubleshoot_referral_tracking` with symptom `numbers_do_not_match` rather than guessing. 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 (Unix ms). `timezone` and `platform` apply to engagement only. Targets `campaignId` if passed, otherwise `GROWSURF_CAMPAIGN_ID`.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `days` (integer)
- `endDate` (integer): End of the timeframe, Unix timestamp in ms.
- `include` (string): Comma-separated optional data: `previousPeriod`, `statusCounts`, `rates`, `email`, and `engagement`. Combine values when the question needs more than one view.
- `interval` (string): day/week/month adds a per-period `series`; total (default) returns totals only.
- `platform` (string): Client-platform filter for engagement. Defaults to `ALL`.
- `startDate` (integer): Start of the timeframe, Unix timestamp in ms. Use with endDate instead of days.
- `timezone` (string): IANA timezone for engagement interval and distinct-day calculations. Used with `include=engagement`.

Output parameters:

- `analytics` (object): Analytics totals: `invites`, `impressions`, `uniqueImpressions`, `participants`, `referrals`, `referralCreditPendings`, `referralCreditExpireds`, per-channel share counts (`emailShares`, `twitterShar…
- `email` (object): Sent, delivered, opened, clicked, bounced, and spam complaint metrics for program emails in the requested window.
- `endDate` (integer): End of the analytics timeframe, as a Unix timestamp in milliseconds.
- `engagement` (object): Opt-in participant engagement grouped by when activity occurred.
- `previousPeriod` (object): Totals for the equal-length window immediately before the requested one (`analytics`, `startDate`, `endDate`). Present only when `include` contains `previousPeriod`.
- `rates` (object): Derived referral rates, each a ratio from 0 to 1. Present only when `include` contains `rates`.
- `series` (array): Per-period totals in ascending order. Present only when `interval` is `day`, `week`, or `month`.
- `startDate` (integer): Start of the analytics timeframe, as a Unix timestamp in milliseconds.
- `statusCounts` (object): Status-count breakdowns: dashboard-aligned reward counts, and for affiliate programs `affiliateStatus`, `commissionStatus`, and `payoutStatus` (counts and amounts in minor currency units (e.g. cents)…

### `growsurf_get_campaign_activation_analytics` (~334 tokens)

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`.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `cohortFrom` (integer): Inclusive eligibility-cohort start, Unix timestamp in ms. Use with `cohortTo`.
- `cohortInterval` (string): Bucket size for `cohorts`. Defaults to `day`.
- `cohortTo` (integer): Exclusive eligibility-cohort end, Unix timestamp in ms. Must be greater than `cohortFrom`.
- `observationWindowDays` (integer): Days after eligibility in which stages can count. Defaults to `30`.
- `timezone` (string): IANA timezone used to advance cohort boundaries. Defaults to `UTC`.

Output parameters:

- `aggregate` (object): Strict activation metrics for one exact enrollment cohort.
- `cohortInterval` (string): Bucket size for `cohorts`.
- `cohorts` (array): Selected range split into exact half-open eligibility-cohort buckets.
- `coverageStartAt` (integer|null): Earliest expected complete activation capture time (Unix ms), or `null` until coverage begins.
- `metricContractVersion` (integer): Shared activation and engagement metric version.
- `observationWindowDays` (integer): Days after eligibility in which stages count.
- `portalViewedHelperText` (string): Display definition for a qualifying signed-in portal view.
- `portalViewedLabel` (string): Program-specific display label for the stable `PORTAL_VIEWED` stage.
- `programType` (string): Program eligibility model.
- `timezone` (string): IANA timezone used to advance cohort boundaries.

### `growsurf_list_integrations` (~264 tokens)

List Integrations

List every integration your GrowSurf program can connect (Stripe, PayPal, Wise, Mailchimp, Slack, Zapier, Webhooks, and more) with its current state, so you can check whether an integration is connected before you act on it. Each entry has `connected` (credentials are stored), `enabled` (switched on and working), `autoDisabled` (GrowSurf switched it off after repeated delivery failures — the credentials are still stored, but nothing is delivered until the user reconnects it), and `connectUrl` (the dashboard link to hand the user). Integrations that do not apply to the program type are omitted (for example, Wise on a referral program). Read-only: connecting an integration happens in the GrowSurf dashboard, not through the API — call `growsurf_get_integration_connect_link` for the link to hand the user. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `integrations` (array): Every integration this program can connect, in the order the GrowSurf dashboard lists them.

### `growsurf_list_campaign_webhooks` (~103 tokens)

List Webhooks

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

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…

Output parameters:

- `webhooks` (array): Webhooks configured for the program.

### `growsurf_create_campaign_webhook` (~194 tokens)

Create Webhook

Add a webhook to your GrowSurf program. `payloadUrl` is required. `events` is the list of events this webhook is subscribed to (omit to subscribe it to no events). `secret` is write-only — GrowSurf uses it to sign deliveries (the GrowSurf-Signature HMAC header) and never returns it. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `events` (array)
- `isEnabled` (boolean)
- `payloadUrl` (string, required)
- `secret` (string): Write-only. Signs deliveries; never returned.

### `growsurf_update_campaign_webhook` (~172 tokens)

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. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `events` (array)
- `isEnabled` (boolean)
- `payloadUrl` (string)
- `secret` (string): Write-only.
- `webhookId` (string, required)

### `growsurf_delete_campaign_webhook` (~113 tokens)

Delete Webhook

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

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `webhookId` (string, required)

Output parameters:

- `id` (string): Id of the webhook that was deleted.
- `success` (boolean): Whether the webhook was deleted.

### `growsurf_test_campaign_webhook` (~171 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `event` (string)
- `webhookId` (string, required)

Output parameters:

- `payload` (object): The mock event payload that was sent.
- `response` (object): Response returned by the webhook endpoint during the test.
- `success` (boolean): Whether the test webhook request completed.

### `growsurf_list_participants` (~255 tokens)

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. Use this when you need a participant ID before calling participant-scoped tools. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `limit` (integer)
- `metadata` (object): Exact-match filter on participant metadata, up to 3 keys, for example `{ "customerId": "12345" }`. Values compare as strings.
- `nextId` (string): Participant ID returned as `nextId` from the previous page.

Output parameters:

- `limit` (integer): Maximum number of participants requested for this page.
- `nextId` (string|null): Participant id to pass as `nextId` for the next page, or `null` when there are no more results.
- `participants` (array): Participants returned for this page.
- `rewardEvidence` (object): What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.

### `growsurf_get_participant` (~203 tokens)

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. Use `growsurf_list_participants` first if you need to find a participant ID. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `participantEmail` (string)
- `participantId` (string)

Output parameters:

- `affiliateEnrollmentSource` (string|null): Affiliate programs only. How the affiliate enrolled (`OPEN_ENROLLMENT`, `APPLICATION`, `PARTICIPANT_AUTH`, `INVITE`, `REST_API`, `CSV`, or `DASHBOARD`). `null` when not recorded.
- `affiliateStatus` (string|null): Affiliate programs only. The enrolled affiliate's status (`APPROVED`, `SUSPENDED`, or `BANNED`). `null` for participants who are not affiliates.
- `allMatchingFraudsters` (array): Other participants flagged as matching this participant during anti-fraud checks.
- `createdAt` (integer): When the participant joined, as a Unix timestamp in milliseconds.
- `email` (string): The participant's email address.
- `fingerprint` (string|null): Browser identifier recorded for the participant, or `null`.
- `firstName` (string|null): The participant's first name.
- `fraudReasonCode` (string): Reason code behind `fraudRiskLevel` (e.g. `UNIQUE_IDENTITY`, `DUPLICATE_EMAIL`, `MANUAL_UPDATE`).
- `fraudRiskLevel` (string): The participant's fraud risk level.
- `id` (string): The participant's unique id.
- `impressionCount` (integer): Total views of the participant's referral link.
- `inviteCount` (integer): Invites sent by the participant.
- `ipAddress` (string|null): IP address recorded for the participant, or `null`.
- `isAffiliate` (boolean): Affiliate programs only. Whether this participant is an enrolled affiliate. A referred customer who has not joined the program is `false`.
- `isNew` (boolean): `true` when the request created the participant. Returned by participant creation calls.
- `isWinner` (boolean): `true` once the participant has earned at least one reward.
- `lastName` (string|null): The participant's last name.
- `metadata` (object): Custom key/value metadata (single level).
- `mobileInstanceId` (string|null): App-install scoped identifier supplied by a native app, or `null`.
- `monthlyRank` (integer): Current-month leaderboard rank (resets monthly).
- `monthlyReferralCount` (integer): Referrals credited this month (resets monthly).
- `monthlyReferrals` (array): Ids of participants they successfully referred this month (100 most recent).
- `notes` (string|null): Internal notes. Never shown to participants.
- `payoutSettings` (object): Actions the participant must complete before a payout can be released. Always present.
- `paypalEmailAddress` (string): PayPal email address on file, used for affiliate or PayPal reward payouts.
- `prevMonthlyRank` (integer): Previous-month leaderboard rank.
- `prevMonthlyReferralCount` (integer): Referrals credited the previous month.
- `rank` (integer): All-time leaderboard rank.
- `referralCount` (integer): All-time referrals credited to the participant.
- `referralSource` (string): How the participant joined the program.
- `referralStatus` (string): The referrer's credit status for this participant. Present only when the participant was referred.
- `referrals` (array): Ids of participants they successfully referred (100 most recent).
- `referredBy` (string): Id of the referrer. Present only when the participant was referred.
- `referrer` (object|null): Summary of the participant's referrer (same core fields as a participant). Present only when the participant was referred.
- `rewardEvidence` (object): What this response establishes about rewards. Combine with other reads; unknown here does not override evidence elsewhere.
- `rewards` (array): Rewards the participant has earned.
- `shareCount` (object): Share counts keyed by channel (e.g. `email`, `facebook`, `twitter`, `copyRefLink`, `iosNativeShare`).
- `shareUrl` (string): The participant's unique referral link. Omitted for affiliate program participants who are not approved affiliates.
- `uniqueImpressionCount` (integer): Unique views of the participant's referral link.
- `unreadCommissionsCount` (integer): Commissions the participant has not yet viewed. Affiliate programs only.
- `unreadPayoutsCount` (integer): Payouts the participant has not yet viewed. Affiliate programs only.
- `unsubscribed` (boolean): `true` if the participant unsubscribed from program emails.
- `vanityKeys` (array): The participant's vanity keys.

### `growsurf_add_participant` (~327 tokens)

Add Participant

Add or fetch a participant by email. Existing participants are returned unchanged. This is trusted direct enrollment; do not use it for a public application when the program requires affiliate review. 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`.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `email` (string, required)
- `fingerprint` (string)
- `firstName` (string)
- `ipAddress` (string)
- `isAffiliate` (boolean): Affiliate programs only. Controls affiliate enrollment for a new participant. `true` enrolls the participant with `affiliateStatus: APPROVED`; `false` creates a non-affiliate without `affiliateStatus…
- `lastName` (string)
- `metadata` (object)
- `mobileInstanceId` (string)
- `referralStatus` (string)
- `referredBy` (string)

### `growsurf_update_participant` (~360 tokens)

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`.

Input parameters:

- `affiliateStatus` (string): Affiliate programs only. Sets the affiliate status. `APPROVED` also enrolls a participant who is not yet an affiliate. `SUSPENDED` and `BANNED` are rejected for non-affiliates.
- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `email` (string): Change the participant's email address.
- `firstName` (string)
- `lastName` (string)
- `metadata` (object)
- `notes` (string): Freeform internal notes (internal only, never exposed to participants).
- `participantEmail` (string)
- `participantId` (string)
- `referralStatus` (string)
- `referredBy` (string)
- `unsubscribed` (boolean)
- `vanityKeys` (array)

### `growsurf_bulk_delete_participants` (~321 tokens)

Bulk Delete Participants

Bulk delete participants from your GrowSurf program in one request. DESTRUCTIVE: deletion is permanent, cannot be undone, and removes the participants' referrals, rewards, commissions, and payout records. 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, so check the summary. A `202` response includes `analyticsErasure` when analytics erasure is pending. `DELETED` means participant cleanup completed; reports can retain the participant until analytics erasure completes. Do not repeat successful rows to finish analytics erasure. Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `participants` (array, required): GrowSurf participant IDs and/or email addresses to delete (1-200 entries; mixed lists allowed).

Output parameters:

- `analyticsErasure` (object): Analytics erasure is pending. Reports can retain removed participants until erasure completes. Do not repeat successful deletions.
- `results` (array): One entry per submitted identifier, in request order.
- `summary` (object): Counts across all submitted entries.

### `growsurf_email_participant` (~525 tokens)

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`). 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 *Campaign 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.

Input parameters:

- `body` (string): Free-form HTML body. You can personalize it with dynamic text, inserting `{{...}}` tokens like `{{firstName}}` or `{{shareUrl}}`. See [Guide to using dynamic text in GrowSurf emails](https://support.…
- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `emailType` (string): The program email template to trigger. Send the camelCase key; the available types depend on the program type. The template's `isEnabled` setting controls automatic sends only, so this tool can trigg…
- `participantEmail` (string)
- `participantId` (string)
- `preheader` (string)
- `subject` (string): Free-form subject. Supports dynamic text (`{{...}}` tokens), the same as the body.

Output parameters:

- `status` (string): The email was accepted for delivery.
- `success` (boolean): Whether the email request was accepted.

### `growsurf_get_participant_analytics` (~374 tokens)

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. Date-window parameters filter optional series and email data, not the base response or activation milestones. Targets `campaignId` if passed, otherwise `GROWSURF_CAMPAIGN_ID`.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `days` (integer): Number of days for optional `series` and `email` analytics. Does not filter the all-time base response.
- `endDate` (integer): End of the optional-data timeframe, Unix timestamp in ms. Use with `startDate`.
- `include` (string): Comma-separated optional data. Current values are `series`, `email`, and `activation`; the API returns `400` for unknown values.
- `interval` (string): Bucket size for `series` and email series. Defaults to `day`.
- `participantEmail` (string)
- `participantId` (string)
- `startDate` (integer): Start of the optional-data timeframe, Unix timestamp in ms. Use with `endDate` instead of `days`.

Output parameters:

- `activation` (object): Opt-in covered eligibility and first-milestone analytics for one participant.
- `analytics` (object): All-time participant analytics totals. Date-window parameters do not filter these fields.
- `email` (object): Sent, delivered, opened, clicked, bounced, and spam complaint metrics for program emails in the requested window.
- `endDate` (integer): Window end (Unix ms). Present with `series` or `email`.
- `ranks` (object): Leaderboard ranks for this participant.
- `series` (array): This participant's per-period activity. Present when `include` contains `series`.
- `shareCount` (object): Per-channel share counts (e.g. `email`, `facebook`, `twitter`).
- `startDate` (integer): Window start (Unix ms). Present with `series` or `email`.

### `growsurf_get_participant_activity_logs` (~183 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `limit` (integer)
- `offset` (integer)
- `participantEmail` (string)
- `participantId` (string)

Output parameters:

- `activityLogs` (array): Activity log entries for the participant.
- `limit` (integer): Number of activity logs returned per page.
- `offset` (integer|null): Offset for the next page, or `null` when there are no more logs.

### `growsurf_trigger_referral` (~163 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `delayInDays` (integer)
- `participantEmail` (string)
- `participantId` (string)

Output parameters:

- `message` (string): Human-readable result message. Present when credit was not awarded immediately.
- `success` (boolean): Whether referral credit was awarded, scheduled, or cancelled.

### `growsurf_cancel_delayed_referral` (~134 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `participantEmail` (string)
- `participantId` (string)

Output parameters:

- `message` (string): Human-readable result message. Present when credit was not awarded immediately.
- `success` (boolean): Whether referral credit was awarded, scheduled, or cancelled.

### `growsurf_get_participant_payout_destination` (~195 tokens)

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 and/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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `participantEmail` (string)
- `participantId` (string)

Output parameters:

- `activeProvider` (string|null): The payout provider currently selected, or `null` until the participant confirms one. Provider identifiers are open-ended; current examples include `PAYPAL` and `WISECOM`.
- `destinations` (array): One entry per enabled payout provider describing the participant's destination for it.
- `enabledProviders` (array): Payout provider identifiers enabled for this program. Values are open-ended; current examples include `PAYPAL` and `WISECOM`.

### `growsurf_request_participant_payout_destination_confirmation` (~196 tokens)

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.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `participantEmail` (string)
- `participantId` (string)
- `provider` (string, required): The payout provider the participant should confirm a destination for.

Output parameters:

- `expiresAt` (integer|null): When the confirmation link expires, as a Unix timestamp in milliseconds.
- `provider` (string): The payout provider identifier the participant was asked to confirm. Values are open-ended; current examples include `PAYPAL` and `WISECOM`.
- `providerDisplayName` (string): The customer-facing provider name (e.g. "PayPal", "Wise").
- `status` (string): Confirms the message was requested (`CONFIRMATION_REQUESTED`).

### `growsurf_record_sale` (~459 tokens)

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.

Input parameters:

- `amountCashNet` (integer)
- `amountPaid` (integer)
- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `chargeId` (string)
- `currency` (string, required)
- `customerId` (string)
- `description` (string)
- `externalId` (string)
- `grossAmount` (integer, required)
- `invoiceId` (string)
- `invoiceSubtotalExcludingTax` (integer)
- `invoiceTotal` (integer)
- `invoiceTotalExcludingTax` (integer)
- `netAmount` (integer)
- `orderId` (string)
- `paidAt` (integer)
- `participantEmail` (string)
- `participantId` (string)
- `paymentId` (string)
- `paymentIntentId` (string)
- `paymentProvider` (string): Connected provider for this payment. Requires `transactionId` and `testMode`. Supply matching `grossAmount` and `currency`; other payment IDs and tax or net-amount overrides are not accepted. GrowSur…
- `subscriptionId` (string)
- `taxAmount` (integer)
- `testMode` (boolean): Required with `paymentProvider`: `true` for test or `false` for live. Otherwise omit.
- `totalTaxAmount` (integer)
- `totalTaxAmounts` (array)
- `totalTaxes` (array)
- `transactionId` (string)

Output parameters:

- `commissionsCreated` (integer): Commissions created by this duplicate request.
- `duplicate` (boolean): `true` when the sale matched an existing transaction.
- `duplicateFields` (array): Identifier fields that matched an existing transaction.
- `firstSale` (boolean): Whether this was the referred customer's first recorded sale.
- `matchingCommissionIds` (array): Commission ids that matched the submitted identifiers.
- `message` (string): Human-readable result message.
- `success` (boolean): `true` when the sale was recorded; `false` when it matched an existing transaction.

### `growsurf_refund_transaction` (~581 tokens)

Refund Transaction

Record an amendment (refund, partial refund, or chargeback) against a previously recorded affiliate transaction; reverses or adjusts the referrer's commission. The inverse of growsurf_record_sale. Identify the original transaction with the same identifier you sent when recording it (omit amountRefunded for a full refund). Already-paid commissions are not clawed back (recorded for tax only). Targets `campaignId` if you pass it, otherwise GROWSURF_CAMPAIGN_ID.

Input parameters:

- `amendmentType` (string)
- `amount` (integer)
- `amountRefunded` (integer)
- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `chargeId` (string)
- `currency` (string)
- `description` (string)
- `externalId` (string)
- `invoiceId` (string)
- `orderId` (string)
- `participantEmail` (string)
- `participantId` (string)
- `paymentId` (string)
- `paymentIntentId` (string)
- `paymentProvider` (string): Connected provider for the original payment. Requires its `transactionId` and `testMode`. This amends GrowSurf records without sending a refund through the provider.
- `refundAmount` (integer): Positive amount for this individual refund, no greater than the sale amount, in the sale currency's minor unit. Send it with `refundId` on each original refund to support cancellations and out-of-ord…
- `refundHistoryComplete` (boolean): Set true only after reconciling and recording every original refundId and refundAmount, including refunds later canceled. This confirmation resolves previously incomplete history. Omit during ordinar…
- `refundId` (string): Stable per-refund identifier. Required when canceling a refund or changing the refunded total after a cancellation. Reuse the original refund's identifier for its cancellation. An amendment without e…
- `refundStatus` (string)
- `testMode` (boolean): Original payment mode: `true` for test or `false` for live. Requires `paymentProvider`.
- `transactionId` (string)

Output parameters:

- `adjusted` (integer): Commissions partially adjusted.
- `amendmentType` (string): Amendment type that was processed.
- `deleted` (integer): Pending commissions deleted by the amendment.
- `matched` (integer): Commissions found for the provided identifiers.
- `matchingCommissionIds` (array): Commission ids that matched the submitted identifiers.
- `message` (string): Human-readable result message.
- `notFound` (boolean): Present and `true` when no commission matched the provided identifiers.
- `reversed` (integer): Commissions reversed (set to zero amount).
- `success` (boolean): `true` when the amendment was processed; `false` when no matching transaction was found.

### `growsurf_create_mobile_participant_token` (~238 tokens)

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; do not use it for a public application when the program requires affiliate review. Targets `campaignId` if you pass it, otherwise `GROWSURF_CAMPAIGN_ID`.

Input parameters:

- `campaignId` (string): Target program (campaign) id for this call. Defaults to GROWSURF_CAMPAIGN_ID when omitted. Pass the `id` returned by growsurf_create_campaign to configure or operate a program you just created, witho…
- `email` (string, required)
- `fingerprint` (string)
- `firstName` (string)
- `ipAddress` (string)
- `isAffiliate` (boolean): Sets whether the participant is an affiliate. Use `true` only for trusted direct enrollment. Public applicants should follow the program's configured application flow.
- `lastName` (string)
- `metadata` (object)
- `mobileInstanceId` (string)
- `referralStatus` (string)
- `referredBy` (string)

Output parameters:

- `expiresIn` (integer): Token lifetime in seconds.
- `isNew` (boolean): Whether this request created a new participant.
- `participant` (object): The participant record (same shape as the `growsurf_get_participant` result).
- `participantToken` (string): Participant-scoped bearer token for GrowSurf mobile SDK participant endpoints.

### `growsurf_participant_auth_hash` (~68 tokens)

Compute Participant Auth Hash

Compute the server-side SHA-256 HMAC for GrowSurf Participant Auto Authentication. Set affiliateJoin only when this signed-in user may join the affiliate program directly.

Input parameters:

- `affiliateJoin` (boolean)
- `email` (string, required)
- `participantAuthSecret` (string)

Output parameters:

- `hash` (string): The computed hash. Pass it to the GrowSurf client as the participant's `hash` value.

### `growsurf_webhook_normalize` (~39 tokens)

Normalize Webhook Payload

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

Input parameters:

- `payload` (required)

Output parameters:

- `envelope` (object): The normalized webhook envelope. Present only when `ok` is `true`.
- `error` (string): Why the payload failed validation. Present only when `ok` is `false`.
- `idempotencyKey` (string): A deterministic key for ignoring duplicate deliveries. Present only when `ok` is `true`.
- `ok` (boolean): Whether the payload is a valid GrowSurf webhook envelope.

### `growsurf_client_snippets` (~121 tokens)

Client Snippets

Generate copy-pasteable client-side snippets for GrowSurf referral tracking, embeddable elements, and the GrowSurf Window (JS + CSS), with placement guidance for app UI work.

Input parameters:

- `includeEmbeddableElements` (boolean)
- `includeEventSubscriptions` (boolean)
- `includeGrowSurfWindow` (boolean)
- `includeUnreadBadge` (boolean)
- `participantAuthEnabled` (boolean)
- `programType` (string)
- `referralTrigger` (string)
- `singlePageApp` (boolean)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_embeddable_element_snippet` (~55 tokens)

Embeddable Element Snippet

Generate the HTML snippet for a GrowSurf embeddable element (with optional auth attributes).

Input parameters:

- `element` (string, required)
- `participant` (object)
- `withAuthAttributes` (boolean)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_grsf_config_snippet` (~98 tokens)

Participant Auto-Auth Snippet

Generate the <head> snippet for participant auto-auth using window.grsfConfig (place before the GrowSurf Universal Code).

Input parameters:

- `affiliateJoin` (boolean)
- `campaignId` (string)
- `email` (string)
- `enableParticipantAutoAuth` (boolean)
- `hash` (string)
- `includeAutoAuthCommentHeader` (boolean)
- `useCampaignIdPlaceholder` (boolean)

Output parameters:

- `markdown` (string): The generated guidance as a markdown document.

### `growsurf_get_integration_connect_link` (~364 tokens)

Get Integration Connect Link

Return a dashboard link that opens a specific integration's connect panel in the GrowSurf Program Editor (Options > Integrations). Use this whenever a user says they want to connect an integration, for example "connect Stripe", "set up PayPal or Wise payouts", "send Tango Card gift cards", or "sync signups to Mailchimp": call it with the `integration` key and give the user the returned `url` to open. Connecting an integration happens in the dashboard, not through the API. GrowSurf cannot link a Stripe, PayPal, Wise, or other account on the user's behalf, so hand them the link. `integration` must be one of the supported keys (some are camelCase, e.g. `constantContact`, `helpScout`). The link points at GROWSURF_CAMPAIGN_ID; pass `campaignId` to target a different program. The program is checked before the link is returned, and the result also reports whether the integration is already `connected`, `enabled`, or `autoDisabled`, so you can skip handing over a link the user does not need. If that check cannot run, `programVerified` comes back `false` and you still get a working production link. Tango Card, Tremendous, and Bask Health apply to referral programs only. Wise applies to affiliate programs only.

Input parameters:

- `campaignId` (string): Target program for the link. Defaults to GROWSURF_CAMPAIGN_ID.
- `integration` (string, required): The integration to connect. Must exactly match one of the supported keys (for example `wisecom`; some are camelCase, e.g. `constantContact`, `campaignMonitor`, `helpScout`, `pabblyConnect`, `baskHeal…

Output parameters:

- `affiliateOnly` (boolean): `true` when the integration applies to affiliate programs only.
- `autoDisabled` (boolean): Whether GrowSurf switched the integration off after repeated delivery failures. Present only when `programVerified` is `true`.
- `category` (string): The integration's category.
- `connected` (boolean): Whether the program has stored credentials for this integration. Present only when `programVerified` is `true`.
- `enabled` (boolean): Whether the integration is switched on and currently working. Present only when `programVerified` is `true`.
- `integration` (string): The integration key that was requested.
- `label` (string): Human-readable integration name.
- `note` (string): Instructions to relay to the user.
- `programVerified` (boolean): `true` when the program's live integration list was read, so the program id is confirmed and the three state fields below are present and current. `false` when that read was unavailable, for example…
- `referralOnly` (boolean): `true` when the integration applies to referral programs only.
- `url` (string): Dashboard link that opens the integration's connect panel.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp#diagnostics

## Score history

- 2026-09-20: 90
- 2026-09-19: 89
- 2026-09-18: 89
- 2026-09-17: 89
- 2026-09-16: 88
- 2026-09-15: 88
- 2026-09-14: 72
- 2026-09-13: 86
- 2026-09-12: 86
- 2026-09-11: 85
- 2026-09-10: 85
- 2026-09-09: 84
- 2026-09-08: 84
- 2026-09-07: 83
- 2026-09-06: 83
- 2026-09-05: 82
- 2026-09-04: 82
- 2026-09-03: 82
- 2026-09-02: 81
- 2026-09-01: 78
- 2026-08-31: 78
- 2026-08-30: 78
- 2026-08-29: 78
- 2026-08-28: 78
- 2026-08-27: 78
- 2026-08-26: 78
- 2026-08-25: 76

## Common questions

### What is the GrowSurf MCP server?

GrowSurf is an MCP server listed in the public MCP registry as com.growsurf/growsurf. Build and manage GrowSurf referral and affiliate programs through AI assistants. This page covers its npm package (@growsurfteam/growsurf-mcp).

### Is the GrowSurf MCP server safe to use?

GrowSurf scores 90 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the GrowSurf MCP server expose?

GrowSurf exposes 63 tools: growsurf_integration_guide, growsurf_agent_program_creation_eval, growsurf_program_design_advisor, growsurf_troubleshoot_referral_tracking, growsurf_mobile_sdk_guide, and 58 more. Their descriptions and schemas cost roughly 14,397 tokens of context every time the server is loaded.

### Is the GrowSurf MCP server still maintained?

GrowSurf is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the GrowSurf MCP server under?

GrowSurf declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@growsurfteam/growsurf-mcp
- Socket report: https://socket.dev/npm/package/@growsurfteam/growsurf-mcp
- Repository: https://github.com/growsurf/growsurf-mcp
- Website: https://docs.growsurf.com/build-with-ai
- Changelog RSS feed: https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-growsurf-growsurf/growsurfteam-growsurf-mcp
