{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://howtomakemoneyonsnapchat.com/schemas/v1/check_eligibility.output.schema.json",
  "title": "check_eligibility output",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/howtomakemoneyonsnapchat-com-openapi.json#/components/schemas/check_eligibility.output.schema",
  "type": "object",
  "additionalProperties": false,
  "allOf": [
    {
      "$ref": "#/$defs/Envelope"
    }
  ],
  "required": [
    "tool",
    "api_version",
    "notice",
    "generated_at",
    "sources",
    "data_freshness",
    "program",
    "already_enrolled",
    "summary",
    "requirements",
    "ongoing_requirements",
    "unknowns",
    "facts"
  ],
  "properties": {
    "tool": {
      "const": "check_eligibility"
    },
    "api_version": {
      "const": "v1"
    },
    "notice": {
      "$ref": "#/$defs/Notice"
    },
    "generated_at": {
      "$ref": "#/$defs/DateTime"
    },
    "sources": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Source"
      }
    },
    "data_freshness": {
      "$ref": "#/$defs/DataFreshness"
    },
    "warnings": {
      "description": "Plain strings. Omitted when empty. Calculation tools add a string when followers is 0 and view_time_hours_28d or spotlight_view_time_hours_28d is above 0, and when view_time_hours_28d exceeds 28 days × 24 hours × followers × 0.5. Those warnings say the figure is unusually high for your follower count, please check for a typo, and that view time can come from non-followers. They are never an error. FACT GET aliases append ignored query parameter notices to this same array. Spotlight hours above total view hours are HTTP 400 VALUE_INCONSISTENT rather than a warning.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "program": {
      "$ref": "#/$defs/ProgramSlug"
    },
    "already_enrolled": {
      "type": "boolean"
    },
    "summary": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "published_criteria_status",
        "disclaimer",
        "pass_count",
        "fail_count",
        "unknown_count",
        "requires_confirmation_count"
      ],
      "description": "Entry requirements only. published_criteria_status rule: does_not_meet_published_criteria if any requirement is fail or user_denied; otherwise unknown if any is unknown or requires_user_confirmation; otherwise meets_published_criteria. There is deliberately no 'eligible' verdict.",
      "properties": {
        "published_criteria_status": {
          "type": "string",
          "enum": [
            "meets_published_criteria",
            "does_not_meet_published_criteria",
            "unknown"
          ]
        },
        "disclaimer": {
          "type": "string",
          "enum": [
            "Meets the published criteria; invitation to the Monetization Program is at Snap's discretion.",
            "Does not meet the published criteria based on the inputs provided; invitation to the Monetization Program is at Snap's discretion.",
            "Cannot determine whether the published criteria are met from the inputs provided (some requirements are unknown or need the creator's confirmation); invitation to the Monetization Program is at Snap's discretion."
          ]
        },
        "pass_count": {
          "type": "integer",
          "minimum": 0
        },
        "fail_count": {
          "type": "integer",
          "minimum": 0
        },
        "unknown_count": {
          "type": "integer",
          "minimum": 0
        },
        "requires_confirmation_count": {
          "type": "integer",
          "minimum": 0
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "published_criteria_status": {
                "const": "meets_published_criteria"
              }
            }
          },
          "then": {
            "properties": {
              "disclaimer": {
                "const": "Meets the published criteria; invitation to the Monetization Program is at Snap's discretion."
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "published_criteria_status": {
                "const": "does_not_meet_published_criteria"
              }
            }
          },
          "then": {
            "properties": {
              "disclaimer": {
                "const": "Does not meet the published criteria based on the inputs provided; invitation to the Monetization Program is at Snap's discretion."
              }
            }
          }
        },
        {
          "if": {
            "properties": {
              "published_criteria_status": {
                "const": "unknown"
              }
            }
          },
          "then": {
            "properties": {
              "disclaimer": {
                "const": "Cannot determine whether the published criteria are met from the inputs provided (some requirements are unknown or need the creator's confirmation); invitation to the Monetization Program is at Snap's discretion."
              }
            }
          }
        }
      ]
    },
    "ongoing_requirements": {
      "description": "null unless already_enrolled=true.",
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "required": [
        "note",
        "requirements"
      ],
      "properties": {
        "note": {
          "$ref": "#/$defs/OngoingNote"
        },
        "requirements": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "label",
              "rule_id",
              "rule_version",
              "claim",
              "rule_status",
              "outcome",
              "threshold",
              "input_value"
            ],
            "properties": {
              "label": {
                "const": "CALCULATION"
              },
              "rule_id": {
                "$ref": "#/$defs/RuleId"
              },
              "rule_version": {
                "type": "integer"
              },
              "claim": {
                "type": "string"
              },
              "rule_status": {
                "type": "string",
                "enum": [
                  "current",
                  "unverified"
                ]
              },
              "metric": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/MetricName"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "operator": {
                "type": [
                  "string",
                  "null"
                ],
                "enum": [
                  "gte",
                  "gt",
                  "lte",
                  "lt",
                  "eq",
                  "in",
                  "is_true",
                  null
                ]
              },
              "threshold": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "value",
                  "unit"
                ],
                "properties": {
                  "value": {
                    "anyOf": [
                      {
                        "type": [
                          "number",
                          "string",
                          "boolean",
                          "null"
                        ]
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    ]
                  },
                  "unit": {
                    "type": "string"
                  }
                }
              },
              "input_value": {
                "type": [
                  "number",
                  "string",
                  "boolean",
                  "null"
                ]
              },
              "outcome": {
                "type": "string",
                "enum": [
                  "pass",
                  "fail",
                  "unknown",
                  "requires_user_confirmation",
                  "user_confirmed",
                  "user_denied"
                ]
              },
              "explanation": {
                "type": "string",
                "maxLength": 300
              }
            }
          }
        }
      }
    },
    "requirements": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "label",
          "rule_id",
          "rule_version",
          "claim",
          "rule_status",
          "outcome",
          "threshold",
          "input_value"
        ],
        "properties": {
          "label": {
            "const": "CALCULATION"
          },
          "rule_id": {
            "$ref": "#/$defs/RuleId"
          },
          "rule_version": {
            "type": "integer"
          },
          "claim": {
            "type": "string"
          },
          "rule_status": {
            "type": "string",
            "enum": [
              "current",
              "unverified"
            ]
          },
          "metric": {
            "anyOf": [
              {
                "$ref": "#/$defs/MetricName"
              },
              {
                "type": "null"
              }
            ]
          },
          "operator": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "gte",
              "gt",
              "lte",
              "lt",
              "eq",
              "in",
              "is_true",
              null
            ]
          },
          "threshold": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "value",
              "unit"
            ],
            "properties": {
              "value": {
                "anyOf": [
                  {
                    "type": [
                      "number",
                      "string",
                      "boolean",
                      "null"
                    ]
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                ]
              },
              "unit": {
                "type": "string"
              }
            }
          },
          "input_value": {
            "type": [
              "number",
              "string",
              "boolean",
              "null"
            ]
          },
          "outcome": {
            "type": "string",
            "enum": [
              "pass",
              "fail",
              "unknown",
              "requires_user_confirmation",
              "user_confirmed",
              "user_denied"
            ]
          },
          "explanation": {
            "type": "string",
            "maxLength": 300
          }
        }
      }
    },
    "unknowns": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Unknown"
      }
    },
    "facts": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/RuleFact"
      }
    }
  },
  "$defs": {
    "DataFreshness": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "rules_db_version",
        "generated_at",
        "oldest_verified_at",
        "newest_verified_at",
        "stale_rule_ids",
        "policy"
      ],
      "properties": {
        "rules_db_version": {
          "description": "Monotonic version of the published rules set. Pattern YYYY-MM-DD.n",
          "type": "string",
          "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]+$"
        },
        "generated_at": {
          "$ref": "#/$defs/DateTime"
        },
        "oldest_verified_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date"
        },
        "newest_verified_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date"
        },
        "oldest_last_checked_at": {
          "description": "Earliest last_checked_at among rules in this response. Omitted when none of those rules have an unchanged-source check. Does not replace oldest_verified_at.",
          "type": "string",
          "format": "date-time"
        },
        "newest_last_checked_at": {
          "description": "Latest last_checked_at among rules in this response. Omitted when none of those rules have an unchanged-source check. Does not replace newest_verified_at.",
          "type": "string",
          "format": "date-time"
        },
        "stale_rule_ids": {
          "description": "Rules in this response whose later of verified_at and last_checked_at is older than the staleness window stated in `policy`. A missing last_checked_at does not count.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/RuleId"
          }
        },
        "policy": {
          "type": "string",
          "description": "Human-readable freshness policy, e.g. 'Sources are re-checked daily; a rule is listed as stale when the later of verified_at and last_checked_at is more than 7 days before the response date.'"
        }
      }
    },
    "Date": {
      "type": "string",
      "format": "date"
    },
    "DateTime": {
      "type": "string",
      "format": "date-time"
    },
    "EffectiveDateNote": {
      "description": "Present when effective_date is null because Snap did not publish a date. effective_date stays null.",
      "const": "not published by Snap"
    },
    "Envelope": {
      "description": "Fields present in every successful tool output.",
      "type": "object",
      "required": [
        "tool",
        "api_version",
        "notice",
        "generated_at",
        "sources",
        "data_freshness"
      ],
      "properties": {
        "tool": {
          "type": "string"
        },
        "api_version": {
          "const": "v1"
        },
        "notice": {
          "$ref": "#/$defs/Notice"
        },
        "generated_at": {
          "$ref": "#/$defs/DateTime"
        },
        "sources": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "data_freshness": {
          "$ref": "#/$defs/DataFreshness"
        },
        "warnings": {
          "description": "Plain strings. Omitted when empty. Calculation tools add a string when followers is 0 and view_time_hours_28d or spotlight_view_time_hours_28d is above 0, and when view_time_hours_28d exceeds 28 days × 24 hours × followers × 0.5. Those warnings say the figure is unusually high for your follower count, please check for a typo, and that view time can come from non-followers. They are never an error. FACT GET aliases append ignored query parameter notices to this same array. Spotlight hours above total view hours are HTTP 400 VALUE_INCONSISTENT rather than a warning.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "IsoCountry": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "snap_name",
        "alpha2",
        "alpha3",
        "numeric"
      ],
      "properties": {
        "snap_name": {
          "type": "string"
        },
        "alpha2": {
          "type": "string"
        },
        "alpha3": {
          "type": "string"
        },
        "numeric": {
          "type": "string"
        }
      }
    },
    "MetricName": {
      "description": "Closed vocabulary of creator metrics the engines understand.",
      "type": "string",
      "enum": [
        "followers",
        "view_time_hours_28d",
        "spotlight_view_time_hours_28d",
        "meets_age_requirement",
        "country",
        "is_snap_star",
        "posts_per_month",
        "active_posting_days_28d"
      ]
    },
    "Notice": {
      "description": "Non-affiliation notice included in every response.",
      "type": "string",
      "const": "HowToMakeMoneyOnSnapchat.com is an independent third party and is not affiliated with, endorsed by, or sponsored by Snap Inc. Snapchat is a trademark of Snap Inc."
    },
    "OngoingNote": {
      "const": "Ongoing requirements apply only to creators already enrolled in the Monetization Program. Snap says the 100-hour Spotlight view-time requirement is needed to qualify for maximum Creator Rewards; Snap does not say that rewards stop below it."
    },
    "ProgramSlug": {
      "description": "Program identifier. Validated at runtime against programs present in the rules database; unknown values return UNKNOWN_PROGRAM. Examples: unified_monetization_program, snap_star, creator_subscriptions, brand_partnerships, payouts, tax, recommendation_eligibility, creator_monetization_policy, public_profile, lens_creator_rewards.",
      "type": "string",
      "pattern": "^[a-z0-9_]{2,64}$"
    },
    "RuleFact": {
      "description": "FACT: a rule record as stored in the versioned rules database (approved records only).",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "label",
        "rule_id",
        "version",
        "program",
        "claim",
        "value",
        "unit",
        "status",
        "source_url",
        "publisher",
        "verified_at",
        "effective_date",
        "requires_user_confirmation",
        "applies_to",
        "requirement_phase",
        "mvp_scope",
        "notes"
      ],
      "properties": {
        "label": {
          "const": "FACT"
        },
        "rule_id": {
          "$ref": "#/$defs/RuleId"
        },
        "version": {
          "type": "integer",
          "minimum": 1
        },
        "program": {
          "$ref": "#/$defs/ProgramSlug"
        },
        "claim": {
          "type": "string"
        },
        "value": {
          "anyOf": [
            {
              "type": [
                "number",
                "string",
                "boolean",
                "null"
              ]
            },
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          ]
        },
        "unit": {
          "type": "string"
        },
        "metric": {
          "type": [
            "string",
            "null"
          ]
        },
        "operator": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "gte",
            "gt",
            "lte",
            "lt",
            "eq",
            "in",
            "is_true",
            null
          ]
        },
        "window_days": {
          "type": [
            "integer",
            "null"
          ]
        },
        "rule_type": {
          "description": "Role of the rule, copied from the rules database. Omitted by older clients. Used to group answer pages.",
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "eligibility_threshold",
            "eligibility_condition",
            "ongoing_condition",
            "payout_term",
            "tax_term",
            "content_policy",
            "program_fact",
            "program_status",
            "supplementary_note",
            null
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "current",
            "historical",
            "unverified"
          ]
        },
        "source_url": {
          "type": "string",
          "format": "uri"
        },
        "publisher": {
          "type": "string"
        },
        "verified_at": {
          "$ref": "#/$defs/Date"
        },
        "last_checked_at": {
          "description": "ISO-8601 timestamp of the latest automated check that found this rule's official source text unchanged. Omitted when no such check is recorded. Does not replace verified_at and is not a rule value.",
          "type": "string",
          "format": "date-time"
        },
        "effective_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date"
        },
        "effective_date_note": {
          "$ref": "#/$defs/EffectiveDateNote"
        },
        "changed_after": {
          "description": "Inclusive start of an observed change window when the source does not state a single effective_date. Null when unknown. Additive.",
          "type": [
            "string",
            "null"
          ],
          "format": "date"
        },
        "changed_before": {
          "description": "Inclusive end of an observed change window when the source does not state a single effective_date. Null when unknown. Additive.",
          "type": [
            "string",
            "null"
          ],
          "format": "date"
        },
        "date_note": {
          "description": "How changed_after and changed_before were established. Null when there is no window note. Not a substitute for source_url.",
          "type": [
            "string",
            "null"
          ]
        },
        "iso_countries": {
          "description": "ISO 3166-1 codes for each name in a country list, from the reviewed country map. Omitted unless this fact is a country list.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/IsoCountry"
          }
        },
        "requires_user_confirmation": {
          "type": "boolean"
        },
        "supersedes": {
          "type": [
            "string",
            "null"
          ]
        },
        "applies_to": {
          "type": "string",
          "enum": [
            "entry",
            "enrolled_creators",
            "all",
            "not_applicable"
          ]
        },
        "requirement_phase": {
          "type": "string",
          "enum": [
            "entry",
            "ongoing",
            "entry_and_ongoing",
            "not_applicable"
          ]
        },
        "mvp_scope": {
          "type": "string",
          "enum": [
            "in_scope",
            "out_of_scope"
          ]
        },
        "related_rule_ids": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "notes": {
          "type": "string"
        }
      }
    },
    "RuleId": {
      "type": "string",
      "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
      "maxLength": 120
    },
    "Source": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "url",
        "publisher",
        "verified_at",
        "supports_rule_ids"
      ],
      "properties": {
        "url": {
          "type": "string",
          "format": "uri"
        },
        "publisher": {
          "type": "string"
        },
        "title": {
          "type": [
            "string",
            "null"
          ]
        },
        "verified_at": {
          "$ref": "#/$defs/Date"
        },
        "last_checked_at": {
          "description": "ISO-8601 timestamp of the latest automated check that found this source's official text unchanged. Omitted when no such check is recorded. Does not replace verified_at.",
          "type": "string",
          "format": "date-time"
        },
        "supports_rule_ids": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/RuleId"
          }
        }
      }
    },
    "Unknown": {
      "description": "A requirement we could not evaluate, with the reason and what would resolve it.",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "rule_id",
        "reason",
        "how_to_resolve"
      ],
      "properties": {
        "rule_id": {
          "$ref": "#/$defs/RuleId"
        },
        "reason": {
          "type": "string",
          "enum": [
            "missing_input",
            "rule_unverified",
            "requires_user_confirmation",
            "not_computable_from_metrics",
            "rule_value_not_numeric"
          ]
        },
        "missing_metric": {
          "anyOf": [
            {
              "$ref": "#/$defs/MetricName"
            },
            {
              "type": "null"
            }
          ]
        },
        "how_to_resolve": {
          "type": "string"
        }
      }
    }
  }
}