{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/growsurf-com/json-schema/growsurf-com-participant-schema.json",
  "title": "Participant",
  "description": "Detailed information about a program participant.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/growsurf-com-openapi.json#/components/schemas/Participant",
  "type": "object",
  "required": [
    "id",
    "referralCount",
    "monthlyReferralCount",
    "rank",
    "monthlyRank",
    "rewards",
    "email"
  ],
  "properties": {
    "id": {
      "type": "string",
      "readOnly": true,
      "description": "The unique identifier of the participant."
    },
    "isAffiliate": {
      "type": "boolean",
      "readOnly": true,
      "description": "Affiliate programs only. Whether this participant is an enrolled affiliate. A referred customer who has not joined the program is `false`."
    },
    "affiliateStatus": {
      "type": [
        "string",
        "null"
      ],
      "readOnly": true,
      "description": "Affiliate programs only. The enrolled affiliate's status (`APPROVED`, `SUSPENDED`, or `BANNED`). `null` for participants who are not affiliates."
    },
    "affiliateEnrollmentSource": {
      "type": [
        "string",
        "null"
      ],
      "readOnly": true,
      "description": "Affiliate programs only. How the affiliate enrolled (`OPEN_ENROLLMENT`, `APPLICATION`, `PARTICIPANT_AUTH`, `INVITE`, `REST_API`, `CSV`, or `DASHBOARD`). `null` when not recorded."
    },
    "firstName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The first name of the participant."
    },
    "lastName": {
      "type": [
        "string",
        "null"
      ],
      "description": "The last name of the participant."
    },
    "email": {
      "type": "string",
      "description": "The email of the participant."
    },
    "paypalEmailAddress": {
      "type": "string",
      "format": "email",
      "readOnly": true,
      "description": "The PayPal email address on file for the participant, used for affiliate or PayPal reward payouts."
    },
    "referralCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of referrals made by the participant."
    },
    "monthlyReferralCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of referrals made this month by the participant (resets at the end of the month)."
    },
    "prevMonthlyReferralCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of referrals made the previous month by the participant."
    },
    "leadCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The number of pending referrals the participant made that have not converted into successful referrals yet. Not cumulative: it goes down when a lead converts."
    },
    "rank": {
      "type": "integer",
      "readOnly": true,
      "description": "The rank of the participant."
    },
    "monthlyRank": {
      "type": "integer",
      "readOnly": true,
      "description": "The monthly rank of the participant. This rank resets to 0 at the end of each month."
    },
    "prevMonthlyRank": {
      "type": "integer",
      "readOnly": true,
      "description": "The previous monthly rank of the participant. Not returned if the participant did not exist in your program during the previous month."
    },
    "shareUrl": {
      "type": "string",
      "readOnly": true,
      "description": "The unique share URL of the participant. Omitted for affiliate program\nparticipants who are not approved affiliates."
    },
    "createdAt": {
      "type": "integer",
      "format": "int64",
      "readOnly": true,
      "description": "The date the participant was added to the program (UTC milliseconds)."
    },
    "referralSource": {
      "$ref": "#/$defs/ReferralSource",
      "readOnly": true,
      "description": "The source of how the participant joined the program."
    },
    "referralStatus": {
      "$ref": "#/$defs/ReferralStatus",
      "description": "If the participant was referred, the referrer's status in receiving the referral credit. Only applicable if the participant was referred into the program."
    },
    "referredBy": {
      "type": "string",
      "description": "The ID of the referrer. Only applicable if the participant was referred into the program."
    },
    "referralLeadQualifiedAt": {
      "type": [
        "integer",
        "null"
      ],
      "format": "int64",
      "readOnly": true,
      "description": "When this referred signup counted as a lead for the referrer, in Unix milliseconds. Set only when the program's `referralTrigger` is `CUSTOM`. Lead-event Campaign Rewards and commissions use it."
    },
    "fraudRiskLevel": {
      "$ref": "#/$defs/FraudRiskLevel",
      "readOnly": true,
      "description": "A value that represents the integrity of the participant."
    },
    "fraudReasonCode": {
      "type": "string",
      "readOnly": true,
      "description": "Machine-readable label for the participant's `fraudRiskLevel`. The label identifies broad\noutcomes such as unique or duplicate participant data, suspicious referral activity,\nconfigured access rules, or a manual update.\n\nCurrent labels include `UNIQUE_IDENTITY`, `DUPLICATE_EMAIL`, `DUPLICATE_IDENTITY`,\n`DUPLICATE_IDENTITY_EXCESSIVE`, `EMAIL_FRAUD`, `SIMILAR_EMAIL`, `SIMILAR_FIRST_NAME`,\n`SIMILAR_LAST_NAME`, `REFERRAL_EMAIL_PATTERN`, `REFERRAL_CHAIN_FRAUD`,\n`REFERRAL_VELOCITY_FRAUD`, `DOMAIN_CLUSTERING_FRAUD`, `MANUAL_UPDATE`, `WHITELISTED`,\n`BLACKLIST_MATCH`, `BLOCKED_IP`, and `REFERRER_HIGH_RISK`. Treat this as a diagnostic\nlabel because GrowSurf can add labels without notice."
    },
    "isWinner": {
      "type": "boolean",
      "readOnly": true,
      "description": "`true` if the participant has earned one or more rewards."
    },
    "shareCount": {
      "type": "object",
      "readOnly": true,
      "additionalProperties": {
        "type": "integer"
      },
      "description": "An object containing counts of how many times the participant has shared their referral link, keyed by channel. Standard web channels include `email`, `facebook`, and `twitter`; SDK/native-share channels include `iosNativeShare` and `androidNativeShare`."
    },
    "impressionCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of impressions the participant has made."
    },
    "uniqueImpressionCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of unique impressions the participant has made."
    },
    "inviteCount": {
      "type": "integer",
      "readOnly": true,
      "description": "The total number of invites the participant has sent."
    },
    "referrals": {
      "type": "array",
      "readOnly": true,
      "items": {
        "type": "string"
      },
      "description": "A list of `Participant` IDs who were successfully referred by the participant. Limited to the 100 most recently referred friends."
    },
    "monthlyReferrals": {
      "type": "array",
      "readOnly": true,
      "items": {
        "type": "string"
      },
      "description": "A list of `Participant` IDs successfully referred by the participant this month (resets at the end of the month). Limited to the 100 most recent."
    },
    "referrer": {
      "readOnly": true,
      "oneOf": [
        {
          "$ref": "#/$defs/ParticipantReferrer"
        },
        {
          "type": "null"
        }
      ],
      "description": "An object containing the participant's referrer information. Only applicable if the participant was referred into the program."
    },
    "ipAddress": {
      "type": [
        "string",
        "null"
      ],
      "description": "The IP address recorded for the participant, or `null` when unavailable."
    },
    "fingerprint": {
      "type": [
        "string",
        "null"
      ],
      "description": "The browser identifier recorded for the participant, or `null` when unavailable."
    },
    "mobileInstanceId": {
      "type": [
        "string",
        "null"
      ],
      "description": "App-install scoped identifier supplied by a native app, or `null` when unavailable. The official mobile SDKs generate a lowercase UUID. Not stored when strict GDPR/CCPA mode is enabled."
    },
    "metadata": {
      "$ref": "#/$defs/Metadata",
      "description": "An object containing any custom key-value data, useful for saving additional data for the participant (e.g., `company`, `companySize`). Metadata is never used by GrowSurf and usage is optional. Metadata is returned only in REST API calls, and never in JavaScript Web API calls. See [API Guidelines](https://docs.growsurf.com/developer-tools/rest-api/api-guidelines)."
    },
    "notes": {
      "type": [
        "string",
        "null"
      ],
      "description": "Internal notes about the participant, added via the [GrowSurf Dashboard](https://growsurf.com/dashboard)."
    },
    "unsubscribed": {
      "type": "boolean",
      "description": "`true` if the participant has unsubscribed from program emails."
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "es",
        "fr",
        "de",
        "it",
        "pt-BR",
        "nl",
        "pl",
        "sv",
        "tr",
        "ja",
        "ko",
        "zh-CN",
        "id",
        "da",
        "nb",
        "nn",
        "fi",
        "is",
        "cs",
        "sk",
        "hu",
        "ro",
        "hr",
        "sl",
        "et",
        "lv",
        "lt",
        "el",
        "bg",
        "uk",
        "ru",
        "pt-PT",
        "ca",
        "vi",
        "ms",
        "fil",
        "af",
        "sw",
        "zh-TW",
        "es-419"
      ],
      "description": "The language of the participant's portal and program emails. The program's base language unless the participant (or you) picked another of the program's languages."
    },
    "rewards": {
      "type": "array",
      "readOnly": true,
      "items": {
        "$ref": "#/$defs/ParticipantReward"
      },
      "description": "A list of the rewards the participant has earned."
    },
    "vanityKeys": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The list of vanity keys that the participant has."
    },
    "unreadCommissionsCount": {
      "type": "integer",
      "readOnly": true,
      "description": "Affiliate programs only. The number of commissions the participant has not yet viewed."
    },
    "unreadPayoutsCount": {
      "type": "integer",
      "readOnly": true,
      "description": "Affiliate programs only. The number of payouts the participant has not yet viewed."
    },
    "isNew": {
      "type": "boolean",
      "readOnly": true,
      "description": "Whether this participant was newly created by the request. Returned by participant creation calls; `false` when the participant already existed."
    },
    "allMatchingFraudsters": {
      "type": "array",
      "readOnly": true,
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "A list of other participant IDs associated with this participant's fraud status."
    },
    "payoutSettings": {
      "type": "object",
      "readOnly": true,
      "description": "Payout-related actions the participant must complete before a payout can be released (e.g. configuring a payout destination or submitting a W-9/W-8 tax form). Always present; the requiredActions array is empty when no action is required.",
      "properties": {
        "requiredActions": {
          "description": "Actions the participant must complete before payouts can be sent.",
          "type": "array",
          "readOnly": true,
          "items": {
            "type": "string",
            "enum": [
              "PAYOUT_DESTINATION",
              "TAX_INFO"
            ]
          }
        }
      }
    }
  },
  "$defs": {
    "CommissionStructure": {
      "type": "object",
      "description": "The commission configuration for an affiliate reward. Present only for affiliate programs.",
      "properties": {
        "amount": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1,
          "maximum": 999999999999,
          "description": "Fixed commission amount in the currency's smallest denomination, used when `type` is `FIXED`. The maximum is `100000000` (1,000,000.00) for USD, EUR, and GBP. `null` for percentage-based commissions."
        },
        "amountISO": {
          "type": [
            "string",
            "null"
          ],
          "description": "ISO 4217 currency code for the fixed `amount`. Defaults to the program's currency when omitted. Must match the campaign `currencyISO` when provided. `null` for percentage-based commissions."
        },
        "event": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "CLICK",
            "LEAD",
            "SALE",
            null
          ],
          "description": "The event that generates a commission. Missing legacy values read as `SALE`."
        },
        "type": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "PERCENT",
            "FIXED",
            null
          ],
          "description": "How the commission is calculated: `PERCENT` (a percentage of the sale) or `FIXED` (a fixed `amount`)."
        },
        "minPaidReferrals": {
          "type": [
            "integer",
            "null"
          ],
          "description": "The minimum number of paid referrals required before commissions are earned."
        },
        "holdDuration": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of days a commission is held before it can be paid out."
        },
        "duration": {
          "type": [
            "string",
            "null"
          ],
          "description": "How long commissions continue to be earned for a referred customer: `FOREVER`, `REPEATING`, or `ONCE`. Only applies when `event` is `SALE`. `null` for `CLICK` and `LEAD` commissions, which pay once per event."
        },
        "durationInMonths": {
          "type": [
            "integer",
            "null"
          ],
          "description": "When `duration` is `REPEATING`, the number of months over which commissions are earned. `null` otherwise."
        },
        "approvalRequired": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "`true` if commissions require manual approval before they can be paid out."
        },
        "percent": {
          "type": [
            "number",
            "null"
          ],
          "description": "The commission percentage, used when `type` is `PERCENT`."
        },
        "hasMaxAmount": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "`true` if a maximum commission amount cap is configured."
        },
        "maxAmount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "The maximum commission amount cap in the currency's smallest denomination. `null` if no cap is set."
        },
        "maxAmountISO": {
          "type": [
            "string",
            "null"
          ],
          "description": "The [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code for `maxAmount`. Must match the campaign `currencyISO` when provided."
        },
        "hasIntro": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "`true` if an introductory commission rate is configured. Only applies when `event` is `SALE`. Always `false` for `CLICK` and `LEAD` commissions, whose `intro*` fields are `null`."
        },
        "introType": {
          "type": [
            "string",
            "null"
          ],
          "description": "How the introductory commission is calculated: `PERCENT` or `FIXED`."
        },
        "introPercent": {
          "type": [
            "number",
            "null"
          ],
          "description": "The introductory commission percentage, used when `introType` is `PERCENT`."
        },
        "introAmount": {
          "type": [
            "integer",
            "null"
          ],
          "description": "The introductory commission amount in the currency's smallest denomination, used when `introType` is `FIXED`."
        },
        "introAmountISO": {
          "type": [
            "string",
            "null"
          ],
          "description": "The [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code for `introAmount`. Must match the campaign `currencyISO` when provided."
        },
        "introDuration": {
          "type": [
            "string",
            "null"
          ],
          "description": "How long the introductory rate applies."
        },
        "introDurationInMonths": {
          "type": [
            "integer",
            "null"
          ],
          "description": "When `introDuration` is repeating, the number of months the introductory rate applies."
        }
      },
      "additionalProperties": false
    },
    "FraudRiskLevel": {
      "type": "string",
      "enum": [
        "LOW",
        "MEDIUM",
        "HIGH"
      ]
    },
    "Metadata": {
      "type": "object",
      "description": "Shallow custom metadata object.",
      "additionalProperties": true
    },
    "Participant": {
      "type": "object",
      "description": "Detailed information about a program participant.",
      "required": [
        "id",
        "referralCount",
        "monthlyReferralCount",
        "rank",
        "monthlyRank",
        "rewards",
        "email"
      ],
      "properties": {
        "id": {
          "type": "string",
          "readOnly": true,
          "description": "The unique identifier of the participant."
        },
        "isAffiliate": {
          "type": "boolean",
          "readOnly": true,
          "description": "Affiliate programs only. Whether this participant is an enrolled affiliate. A referred customer who has not joined the program is `false`."
        },
        "affiliateStatus": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true,
          "description": "Affiliate programs only. The enrolled affiliate's status (`APPROVED`, `SUSPENDED`, or `BANNED`). `null` for participants who are not affiliates."
        },
        "affiliateEnrollmentSource": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true,
          "description": "Affiliate programs only. How the affiliate enrolled (`OPEN_ENROLLMENT`, `APPLICATION`, `PARTICIPANT_AUTH`, `INVITE`, `REST_API`, `CSV`, or `DASHBOARD`). `null` when not recorded."
        },
        "firstName": {
          "type": [
            "string",
            "null"
          ],
          "description": "The first name of the participant."
        },
        "lastName": {
          "type": [
            "string",
            "null"
          ],
          "description": "The last name of the participant."
        },
        "email": {
          "type": "string",
          "description": "The email of the participant."
        },
        "paypalEmailAddress": {
          "type": "string",
          "format": "email",
          "readOnly": true,
          "description": "The PayPal email address on file for the participant, used for affiliate or PayPal reward payouts."
        },
        "referralCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of referrals made by the participant."
        },
        "monthlyReferralCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of referrals made this month by the participant (resets at the end of the month)."
        },
        "prevMonthlyReferralCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of referrals made the previous month by the participant."
        },
        "leadCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The number of pending referrals the participant made that have not converted into successful referrals yet. Not cumulative: it goes down when a lead converts."
        },
        "rank": {
          "type": "integer",
          "readOnly": true,
          "description": "The rank of the participant."
        },
        "monthlyRank": {
          "type": "integer",
          "readOnly": true,
          "description": "The monthly rank of the participant. This rank resets to 0 at the end of each month."
        },
        "prevMonthlyRank": {
          "type": "integer",
          "readOnly": true,
          "description": "The previous monthly rank of the participant. Not returned if the participant did not exist in your program during the previous month."
        },
        "shareUrl": {
          "type": "string",
          "readOnly": true,
          "description": "The unique share URL of the participant. Omitted for affiliate program\nparticipants who are not approved affiliates."
        },
        "createdAt": {
          "type": "integer",
          "format": "int64",
          "readOnly": true,
          "description": "The date the participant was added to the program (UTC milliseconds)."
        },
        "referralSource": {
          "$ref": "#/$defs/ReferralSource",
          "readOnly": true,
          "description": "The source of how the participant joined the program."
        },
        "referralStatus": {
          "$ref": "#/$defs/ReferralStatus",
          "description": "If the participant was referred, the referrer's status in receiving the referral credit. Only applicable if the participant was referred into the program."
        },
        "referredBy": {
          "type": "string",
          "description": "The ID of the referrer. Only applicable if the participant was referred into the program."
        },
        "referralLeadQualifiedAt": {
          "type": [
            "integer",
            "null"
          ],
          "format": "int64",
          "readOnly": true,
          "description": "When this referred signup counted as a lead for the referrer, in Unix milliseconds. Set only when the program's `referralTrigger` is `CUSTOM`. Lead-event Campaign Rewards and commissions use it."
        },
        "fraudRiskLevel": {
          "$ref": "#/$defs/FraudRiskLevel",
          "readOnly": true,
          "description": "A value that represents the integrity of the participant."
        },
        "fraudReasonCode": {
          "type": "string",
          "readOnly": true,
          "description": "Machine-readable label for the participant's `fraudRiskLevel`. The label identifies broad\noutcomes such as unique or duplicate participant data, suspicious referral activity,\nconfigured access rules, or a manual update.\n\nCurrent labels include `UNIQUE_IDENTITY`, `DUPLICATE_EMAIL`, `DUPLICATE_IDENTITY`,\n`DUPLICATE_IDENTITY_EXCESSIVE`, `EMAIL_FRAUD`, `SIMILAR_EMAIL`, `SIMILAR_FIRST_NAME`,\n`SIMILAR_LAST_NAME`, `REFERRAL_EMAIL_PATTERN`, `REFERRAL_CHAIN_FRAUD`,\n`REFERRAL_VELOCITY_FRAUD`, `DOMAIN_CLUSTERING_FRAUD`, `MANUAL_UPDATE`, `WHITELISTED`,\n`BLACKLIST_MATCH`, `BLOCKED_IP`, and `REFERRER_HIGH_RISK`. Treat this as a diagnostic\nlabel because GrowSurf can add labels without notice."
        },
        "isWinner": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the participant has earned one or more rewards."
        },
        "shareCount": {
          "type": "object",
          "readOnly": true,
          "additionalProperties": {
            "type": "integer"
          },
          "description": "An object containing counts of how many times the participant has shared their referral link, keyed by channel. Standard web channels include `email`, `facebook`, and `twitter`; SDK/native-share channels include `iosNativeShare` and `androidNativeShare`."
        },
        "impressionCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of impressions the participant has made."
        },
        "uniqueImpressionCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of unique impressions the participant has made."
        },
        "inviteCount": {
          "type": "integer",
          "readOnly": true,
          "description": "The total number of invites the participant has sent."
        },
        "referrals": {
          "type": "array",
          "readOnly": true,
          "items": {
            "type": "string"
          },
          "description": "A list of `Participant` IDs who were successfully referred by the participant. Limited to the 100 most recently referred friends."
        },
        "monthlyReferrals": {
          "type": "array",
          "readOnly": true,
          "items": {
            "type": "string"
          },
          "description": "A list of `Participant` IDs successfully referred by the participant this month (resets at the end of the month). Limited to the 100 most recent."
        },
        "referrer": {
          "readOnly": true,
          "oneOf": [
            {
              "$ref": "#/$defs/ParticipantReferrer"
            },
            {
              "type": "null"
            }
          ],
          "description": "An object containing the participant's referrer information. Only applicable if the participant was referred into the program."
        },
        "ipAddress": {
          "type": [
            "string",
            "null"
          ],
          "description": "The IP address recorded for the participant, or `null` when unavailable."
        },
        "fingerprint": {
          "type": [
            "string",
            "null"
          ],
          "description": "The browser identifier recorded for the participant, or `null` when unavailable."
        },
        "mobileInstanceId": {
          "type": [
            "string",
            "null"
          ],
          "description": "App-install scoped identifier supplied by a native app, or `null` when unavailable. The official mobile SDKs generate a lowercase UUID. Not stored when strict GDPR/CCPA mode is enabled."
        },
        "metadata": {
          "$ref": "#/$defs/Metadata",
          "description": "An object containing any custom key-value data, useful for saving additional data for the participant (e.g., `company`, `companySize`). Metadata is never used by GrowSurf and usage is optional. Metadata is returned only in REST API calls, and never in JavaScript Web API calls. See [API Guidelines](https://docs.growsurf.com/developer-tools/rest-api/api-guidelines)."
        },
        "notes": {
          "type": [
            "string",
            "null"
          ],
          "description": "Internal notes about the participant, added via the [GrowSurf Dashboard](https://growsurf.com/dashboard)."
        },
        "unsubscribed": {
          "type": "boolean",
          "description": "`true` if the participant has unsubscribed from program emails."
        },
        "language": {
          "type": "string",
          "enum": [
            "en",
            "es",
            "fr",
            "de",
            "it",
            "pt-BR",
            "nl",
            "pl",
            "sv",
            "tr",
            "ja",
            "ko",
            "zh-CN",
            "id",
            "da",
            "nb",
            "nn",
            "fi",
            "is",
            "cs",
            "sk",
            "hu",
            "ro",
            "hr",
            "sl",
            "et",
            "lv",
            "lt",
            "el",
            "bg",
            "uk",
            "ru",
            "pt-PT",
            "ca",
            "vi",
            "ms",
            "fil",
            "af",
            "sw",
            "zh-TW",
            "es-419"
          ],
          "description": "The language of the participant's portal and program emails. The program's base language unless the participant (or you) picked another of the program's languages."
        },
        "rewards": {
          "type": "array",
          "readOnly": true,
          "items": {
            "$ref": "#/$defs/ParticipantReward"
          },
          "description": "A list of the rewards the participant has earned."
        },
        "vanityKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The list of vanity keys that the participant has."
        },
        "unreadCommissionsCount": {
          "type": "integer",
          "readOnly": true,
          "description": "Affiliate programs only. The number of commissions the participant has not yet viewed."
        },
        "unreadPayoutsCount": {
          "type": "integer",
          "readOnly": true,
          "description": "Affiliate programs only. The number of payouts the participant has not yet viewed."
        },
        "isNew": {
          "type": "boolean",
          "readOnly": true,
          "description": "Whether this participant was newly created by the request. Returned by participant creation calls; `false` when the participant already existed."
        },
        "allMatchingFraudsters": {
          "type": "array",
          "readOnly": true,
          "items": {
            "type": "object",
            "additionalProperties": true
          },
          "description": "A list of other participant IDs associated with this participant's fraud status."
        },
        "payoutSettings": {
          "type": "object",
          "readOnly": true,
          "description": "Payout-related actions the participant must complete before a payout can be released (e.g. configuring a payout destination or submitting a W-9/W-8 tax form). Always present; the requiredActions array is empty when no action is required.",
          "properties": {
            "requiredActions": {
              "description": "Actions the participant must complete before payouts can be sent.",
              "type": "array",
              "readOnly": true,
              "items": {
                "type": "string",
                "enum": [
                  "PAYOUT_DESTINATION",
                  "TAX_INFO"
                ]
              }
            }
          }
        }
      }
    },
    "ParticipantReferrer": {
      "description": "The participant's referrer, returned within the `referrer` field of a `Participant`. It has the\nsame fields as a `Participant`. Its own `referrer` is always `null`.",
      "allOf": [
        {
          "$ref": "#/$defs/Participant"
        }
      ]
    },
    "ParticipantReward": {
      "type": "object",
      "description": "A reward that a participant has earned. This is different from a program `Reward` Object and contains information pertinent only to the participant that earned the reward.",
      "required": [
        "id",
        "rewardId",
        "status"
      ],
      "properties": {
        "id": {
          "type": "string",
          "readOnly": true,
          "description": "The unique identifier of the participant's reward. This is different for every new reward the participant earns."
        },
        "rewardId": {
          "type": "string",
          "readOnly": true,
          "description": "The ID of the program `Reward` (`CampaignReward`) that this participant has earned."
        },
        "status": {
          "$ref": "#/$defs/RewardStatus",
          "readOnly": true,
          "description": "The status of the participant's reward."
        },
        "unread": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the participant has not yet seen the reward in a GrowSurf window."
        },
        "approved": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the participant's reward has been approved."
        },
        "approvedAt": {
          "type": [
            "integer",
            "null"
          ],
          "format": "int64",
          "readOnly": true,
          "description": "The date and time the reward was approved for this participant (UTC milliseconds). `null` for unapproved rewards."
        },
        "fulfilledAt": {
          "type": [
            "integer",
            "null"
          ],
          "format": "int64",
          "readOnly": true,
          "description": "The date and time the reward was marked as sent for this participant (UTC milliseconds). `null` if it has not been marked as sent."
        },
        "isReferrer": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the participant earned the reward as the referrer; `false` if they earned it as the referred friend (only applicable for double-sided reward types)."
        },
        "isAvailable": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the reward is available for the participant to claim or redeem."
        },
        "isFulfilled": {
          "type": "boolean",
          "readOnly": true,
          "description": "`true` if the participant's reward has been marked as sent."
        },
        "referredId": {
          "type": "string",
          "readOnly": true,
          "description": "The ID of the friend that was referred."
        },
        "referrerId": {
          "type": "string",
          "readOnly": true,
          "description": "The ID of the participant that made the referral."
        },
        "amount": {
          "type": [
            "number",
            "null"
          ],
          "readOnly": true,
          "description": "What this reward is worth, in major units of `currencyISO`. GrowSurf reads the coupon, account credit, payout, or gift card that the connected provider confirmed for this reward. Without one, it uses the amount saved on the reward when it was earned (`rewardAmount`, or `referredRewardAmount` for a referred friend, from the Campaign Reward `metadata`). Later changes to the Campaign Reward or the integration do not change it. `null` for a percent-off coupon (see `percentOff`) and when the reward has no amount and currency pair."
        },
        "currencyISO": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true,
          "description": "The ISO 4217 currency code for `amount`. `null` whenever `amount` is `null`."
        },
        "percentOff": {
          "type": [
            "number",
            "null"
          ],
          "readOnly": true,
          "description": "The discount of a percent-off coupon, from `0` to `100` (for example, `20` for 20% off). `null` for every other reward. A reward has either `amount` or `percentOff`, never both."
        },
        "amountSource": {
          "readOnly": true,
          "oneOf": [
            {
              "$ref": "#/$defs/ParticipantRewardAmountSource"
            },
            {
              "type": "null"
            }
          ],
          "description": "Where `amount` or `percentOff` comes from. `METADATA` means the amount saved on the reward when it was earned. Any other value names the provider whose saved record supplied it. `null` when both `amount` and `percentOff` are `null`."
        },
        "commissionStructure": {
          "readOnly": true,
          "oneOf": [
            {
              "$ref": "#/$defs/CommissionStructure"
            },
            {
              "type": "null"
            }
          ],
          "description": "The commission structure associated with this reward. Present only for affiliate programs."
        }
      }
    },
    "ParticipantRewardAmountSource": {
      "type": "string",
      "description": "Where a participant reward's `amount` or `percentOff` comes from.",
      "enum": [
        "STRIPE",
        "CHARGEBEE",
        "RECURLY",
        "CHARGIFY",
        "PAYPAL",
        "VENMO",
        "TANGO_CARD",
        "TREMENDOUS",
        "XTRM",
        "METADATA"
      ]
    },
    "ReferralSource": {
      "type": "string",
      "enum": [
        "DIRECT",
        "PARTICIPANT",
        "DELETED_PARTICIPANT",
        "IMPORT",
        "MANUAL"
      ],
      "description": "How the participant joined the program. `DIRECT` means without a referrer, `PARTICIPANT` means through a participant referral, `IMPORT` means through a CSV import, `MANUAL` means through the dashboard, and `DELETED_PARTICIPANT` means the original referrer was later deleted."
    },
    "ReferralStatus": {
      "type": "string",
      "enum": [
        "CREDIT_PENDING",
        "CREDIT_AWARDED",
        "CREDIT_EXPIRED",
        "INVITE_SENT"
      ]
    },
    "RewardStatus": {
      "type": "string",
      "enum": [
        "PENDING",
        "FULFILLED",
        "CANCELLED"
      ],
      "description": "The reward lifecycle state. `CANCELLED` means an unpaid `LEAD` reward was reversed before fulfillment."
    }
  }
}