---
title: "Create mobile participant token"
method: POST
path: "/campaign/{id}/mobile-participant-token"
tags: ["Participants"]
---

# Create mobile participant token

`POST /campaign/{id}/mobile-participant-token`

Creates or returns a participant using the same input behavior as Add Participant, then returns a participant-scoped token for GrowSurf mobile SDK participant endpoints. Use this endpoint from your backend after your mobile app authenticates a signed-in user. The program must have mobile SDK access enabled.

## Path parameters

- `id` string, required

## Request body

- CreateParticipantRequest
  - `email` string, email, required
  - `referredBy` string — Referrer participant ID or email address.
  - `referralStatus` 'CREDIT_PENDING' | 'CREDIT_AWARDED'
  - `firstName` string
  - `lastName` string
  - `ipAddress` string
  - `fingerprint` string
  - `mobileInstanceId` string — Optional app-install scoped identifier for native mobile anti-fraud. Recommended for mobile participant creation and mobile participant token flows. The official mobile SDKs generate this as a lowercase UUID.
  - `metadata` Metadata — Shallow custom metadata object.

## Response `200`

Participant and mobile participant token returned.

- MobileParticipantTokenResponse
  - `participantToken` string, required — Participant-scoped bearer token for GrowSurf mobile SDK participant endpoints.
  - `expiresIn` integer, required — Token lifetime in seconds.
  - `participant` Participant, required
    - `id` string, required
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `email` string, required
    - `paypalEmailAddress` string, email
    - `referralCount` integer, required
    - `monthlyReferralCount` integer, required
    - `prevMonthlyReferralCount` integer
    - `rank` integer, required
    - `monthlyRank` integer, required
    - `prevMonthlyRank` integer
    - `shareUrl` string, required
    - `createdAt` integer
    - `referralSource` 'DIRECT' | 'PARTICIPANT'
    - `referralStatus` 'CREDIT_PENDING' | 'CREDIT_AWARDED' | 'CREDIT_EXPIRED' | 'INVITE_SENT'
    - `referredBy` string
    - `fraudRiskLevel` 'LOW' | 'MEDIUM' | 'HIGH'
    - `fraudReasonCode` string
    - `isWinner` boolean
    - `shareCount` object
    - `impressionCount` integer
    - `uniqueImpressionCount` integer
    - `inviteCount` integer
    - `referrals` string[]
    - `monthlyReferrals` string[]
    - `referrer` ParticipantReferrer
      - `id` string
      - `firstName` string, nullable
      - `lastName` string, nullable
      - `email` string
      - `referralCount` integer
      - `monthlyReferralCount` integer
      - `prevMonthlyReferralCount` integer
      - `rank` integer
      - `monthlyRank` integer
      - `prevMonthlyRank` integer
      - `shareUrl` string
      - `createdAt` integer
      - `referralSource` 'DIRECT' | 'PARTICIPANT'
      - `referralStatus` 'CREDIT_PENDING' | 'CREDIT_AWARDED' | 'CREDIT_EXPIRED' | 'INVITE_SENT'
      - `fraudRiskLevel` 'LOW' | 'MEDIUM' | 'HIGH'
      - `fraudReasonCode` string
      - `isWinner` boolean
      - `shareCount` object
      - `impressionCount` integer
      - `uniqueImpressionCount` integer
      - `inviteCount` integer
      - `referrals` string[]
      - `monthlyReferrals` string[]
      - `ipAddress` string, nullable
      - `fingerprint` string, nullable
      - `metadata` Metadata — Shallow custom metadata object.
      - `unsubscribed` boolean
    - `ipAddress` string, nullable
    - `fingerprint` string, nullable
    - `mobileInstanceId` string, nullable — App-install scoped mobile identifier used for anti-fraud matching when provided by native mobile apps. The official mobile SDKs generate this as a lowercase UUID. Not stored when strict GDPR/CCPA mode is enabled.
    - `metadata` Metadata — Shallow custom metadata object.
    - `notes` string, nullable
    - `unsubscribed` boolean
    - `rewards` ParticipantReward[], required
      - `id` string, required
      - `rewardId` string, required
      - `status` 'PENDING' | 'FULFILLED', required
      - `unread` boolean
      - `approved` boolean
      - `approvedAt` integer, nullable
      - `fulfilledAt` integer, nullable
      - `isReferrer` boolean
      - `isAvailable` boolean
      - `isFulfilled` boolean
      - `referredId` string
      - `referrerId` string
      - `commissionStructure` CommissionStructure
        - `amount` integer, nullable
        - `event` string, nullable
        - `type` 'PERCENT' | 'AMOUNT' | 'null', nullable
        - `minPaidReferrals` integer, nullable
        - `holdDuration` integer, nullable
        - `duration` string, nullable
        - `durationInMonths` integer, nullable
        - `approvalRequired` boolean, nullable
        - `percent` number, nullable
        - `hasMaxAmount` boolean, nullable
        - `maxAmount` integer, nullable
        - `maxAmountISO` string, nullable
        - `hasIntro` boolean, nullable
        - `introType` string, nullable
        - `introPercent` number, nullable
        - `introAmount` integer, nullable
        - `introAmountISO` string, nullable
        - `introDuration` string, nullable
        - `introDurationInMonths` integer, nullable
    - `vanityKeys` string[]
    - `unreadCommissionsCount` integer
    - `unreadPayoutsCount` integer
    - `isNew` boolean
    - `allMatchingFraudsters` object[]
    - `payoutSettings` object — Payout-related actions the participant must complete before a payout can be released (e.g. confirming a PayPal email or submitting a W-9/W-8 tax form). Always present; the requiredActions array is empty when no action is required.
      - `requiredActions` string[]
  - `isNew` boolean, required — Whether this request created a new participant. Returns false when the participant already existed.

## Other responses

- `400` — Invalid request.
- `401` — Authorization is missing or invalid.
- `403` — The API key is not allowed to perform this action.
- `404` — Resource not found.
- `409` — Conflicting duplicate request.
- `422` — Participant was blocked or the endpoint is not available for this program type.
- `429` — Too many requests.

---

[API](https://skmtc.net/growsurf/apis/growsurf-rest-api.md) · [All operations](https://skmtc.net/growsurf/apis/growsurf-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/growsurf/growsurf-rest-api/revisions/26f06e273394/schema)
