changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$id": "https://howtomakemoneyonsnapchat.com/schemas/v1/get_rule_changes.output.schema.json",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "additionalProperties": false,
+ "allOf": [
+ {
+ "description": "Fields present in every successful tool output.",
+ "properties": {
+ "api_version": {
+ "const": "v1"
+ },
+ "data_freshness": {
+ "additionalProperties": false,
+ "properties": {
+ "generated_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "newest_verified_at": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "oldest_verified_at": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "policy": {
+ "description": "Human-readable freshness policy, e.g. 'Sources are re-checked daily; rules not re-verified within 7 days are listed as stale.'",
+ "type": "string"
+ },
+ "rules_db_version": {
+ "description": "Monotonic version of the published rules set. Pattern YYYY-MM-DD.n",
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]+$",
+ "type": "string"
+ },
+ "stale_rule_ids": {
+ "description": "Rules in this response whose verified_at is older than the staleness window stated in `policy`.",
+ "items": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "rules_db_version",
+ "generated_at",
+ "oldest_verified_at",
+ "newest_verified_at",
+ "stale_rule_ids",
+ "policy"
+ ],
+ "type": "object"
+ },
+ "generated_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "notice": {
+ "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.",
+ "description": "Non-affiliation notice included in every response.",
+ "type": "string"
+ },
+ "sources": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "publisher": {
+ "type": "string"
+ },
+ "supports_rule_ids": {
+ "items": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "title": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "url": {
+ "format": "uri",
+ "type": "string"
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ }
+ },
+ "required": [
+ "url",
+ "publisher",
+ "verified_at",
+ "supports_rule_ids"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "tool": {
+ "type": "string"
+ },
+ "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.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "tool",
+ "api_version",
+ "notice",
+ "generated_at",
+ "sources",
+ "data_freshness"
+ ],
+ "type": "object"
+ }
+ ],
+ "properties": {
+ "api_version": {
+ "const": "v1"
+ },
+ "baseline": {
+ "description": "Initial-load records. Present only when include_baseline is true. Never included in changes or in change counts.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "change_type": {
+ "const": "baseline"
+ },
+ "changed_after": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "changed_before": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "current": {
+ "additionalProperties": false,
+ "properties": {
+ "claim": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "current",
+ "historical",
+ "unverified"
+ ],
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": [
+ "number",
+ "string",
+ "boolean",
+ "null"
+ ]
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "version": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "value",
+ "unit",
+ "status",
+ "verified_at"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "date_confidence": {
+ "description": "stated_by_snap, bounded_by_archives, or unknown. Null on records that predate the field.",
+ "enum": [
+ "stated_by_snap",
+ "bounded_by_archives",
+ "unknown",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "date_display": {
+ "description": "Rendered public date line: Snap's date, an archive window with evidence URLs, or unknown, plus the day first recorded by us.",
+ "type": "string"
+ },
+ "date_note": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "detected_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "effective_date": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "effective_date_note": {
+ "const": "not published by Snap",
+ "description": "Present when effective_date is null because Snap did not publish a date. effective_date stays null."
+ },
+ "effective_month": {
+ "pattern": "^[0-9]{4}-[0-9]{2}$",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "evidence_urls": {
+ "description": "Wayback captures or Snap URLs that support the date. Empty when there are none.",
+ "items": {
+ "format": "uri",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "first_recorded_by_us": {
+ "description": "Day this project first recorded the change. Null when the record has no such date. Not Snap's date.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "label": {
+ "const": "FACT"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "previous": {
+ "additionalProperties": false,
+ "properties": {
+ "claim": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "current",
+ "historical",
+ "unverified"
+ ],
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": [
+ "number",
+ "string",
+ "boolean",
+ "null"
+ ]
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "version": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "value",
+ "unit",
+ "status",
+ "verified_at"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "program": {
+ "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.",
+ "pattern": "^[a-z0-9_]{2,64}$",
+ "type": "string"
+ },
+ "rule_id": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "snap_announced_date": {
+ "description": "Day Snap announced the rule. Null when Snap did not state an announcement day.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "snap_effective_date": {
+ "description": "Day Snap stated the rule took effect. Null when Snap did not state one.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "source_url": {
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "rule_id",
+ "program",
+ "change_type",
+ "previous",
+ "current",
+ "source_url",
+ "detected_at",
+ "effective_date"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "catalog_scope": {
+ "additionalProperties": false,
+ "description": "Counts computed from the approved rules database for one as-of date. mvp_in_force is the default requirements list. in_force_including_out_of_scope adds programs stored as out of scope. mvp_including_historical is every in-scope record, which is what the rule-change log lists.",
+ "properties": {
+ "approved_total": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "in_force_including_out_of_scope": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "mvp_in_force": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "mvp_including_historical": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "out_of_scope_programs": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "summary": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "mvp_in_force",
+ "in_force_including_out_of_scope",
+ "mvp_including_historical",
+ "approved_total",
+ "out_of_scope_programs",
+ "summary"
+ ],
+ "type": "object"
+ },
+ "changes": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "change_type": {
+ "description": "How this record differs from the approved record it supersedes, or the type on an explicit change block. Baseline records are returned only in baseline.",
+ "enum": [
+ "added",
+ "value_changed",
+ "status_changed",
+ "retired",
+ "source_changed",
+ "baseline"
+ ],
+ "type": "string"
+ },
+ "changed_after": {
+ "description": "Inclusive start of an observed change window when the source does not state a single effective_date. Null when unknown. Additive.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "changed_before": {
+ "description": "Inclusive end of an observed change window when the source does not state a single effective_date. Null when unknown. Additive.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "current": {
+ "additionalProperties": false,
+ "properties": {
+ "claim": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "current",
+ "historical",
+ "unverified"
+ ],
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": [
+ "number",
+ "string",
+ "boolean",
+ "null"
+ ]
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "version": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "value",
+ "unit",
+ "status",
+ "verified_at"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "date_confidence": {
+ "description": "stated_by_snap, bounded_by_archives, or unknown. Null on records that predate the field.",
+ "enum": [
+ "stated_by_snap",
+ "bounded_by_archives",
+ "unknown",
+ null
+ ],
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "date_display": {
+ "description": "Rendered public date line: Snap's date, an archive window with evidence URLs, or unknown, plus the day first recorded by us.",
+ "type": "string"
+ },
+ "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"
+ ]
+ },
+ "detected_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "effective_date": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "effective_date_note": {
+ "const": "not published by Snap",
+ "description": "Present when effective_date is null because Snap did not publish a date. effective_date stays null."
+ },
+ "effective_month": {
+ "description": "Month-only announcement when Snap did not publish a day, YYYY-MM. Null when the change has a day or no month.",
+ "pattern": "^[0-9]{4}-[0-9]{2}$",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "evidence_urls": {
+ "description": "Wayback captures or Snap URLs that support the date. Empty when there are none.",
+ "items": {
+ "format": "uri",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "first_recorded_by_us": {
+ "description": "Day this project first recorded the change. Null when the record has no such date. Not Snap's date.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "label": {
+ "const": "FACT"
+ },
+ "notes": {
+ "type": "string"
+ },
+ "previous": {
+ "additionalProperties": false,
+ "properties": {
+ "claim": {
+ "type": "string"
+ },
+ "status": {
+ "enum": [
+ "current",
+ "historical",
+ "unverified"
+ ],
+ "type": "string"
+ },
+ "unit": {
+ "type": "string"
+ },
+ "value": {
+ "anyOf": [
+ {
+ "type": [
+ "number",
+ "string",
+ "boolean",
+ "null"
+ ]
+ },
+ {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ },
+ "version": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "version",
+ "value",
+ "unit",
+ "status",
+ "verified_at"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "program": {
+ "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.",
+ "pattern": "^[a-z0-9_]{2,64}$",
+ "type": "string"
+ },
+ "rule_id": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "snap_announced_date": {
+ "description": "Day Snap announced the rule. Null when Snap did not state an announcement day.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "snap_effective_date": {
+ "description": "Day Snap stated the rule took effect. Null when Snap did not state one.",
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "source_url": {
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "required": [
+ "label",
+ "rule_id",
+ "program",
+ "change_type",
+ "previous",
+ "current",
+ "source_url",
+ "detected_at",
+ "effective_date"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "data_freshness": {
+ "additionalProperties": false,
+ "properties": {
+ "generated_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "newest_verified_at": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "oldest_verified_at": {
+ "format": "date",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "policy": {
+ "description": "Human-readable freshness policy, e.g. 'Sources are re-checked daily; rules not re-verified within 7 days are listed as stale.'",
+ "type": "string"
+ },
+ "rules_db_version": {
+ "description": "Monotonic version of the published rules set. Pattern YYYY-MM-DD.n",
+ "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]+$",
+ "type": "string"
+ },
+ "stale_rule_ids": {
+ "description": "Rules in this response whose verified_at is older than the staleness window stated in `policy`.",
+ "items": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "rules_db_version",
+ "generated_at",
+ "oldest_verified_at",
+ "newest_verified_at",
+ "stale_rule_ids",
+ "policy"
+ ],
+ "type": "object"
+ },
+ "generated_at": {
+ "format": "date-time",
+ "type": "string"
+ },
+ "next_cursor": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "notice": {
+ "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.",
+ "description": "Non-affiliation notice included in every response.",
+ "type": "string"
+ },
+ "query": {
+ "additionalProperties": false,
+ "description": "Filters applied to this response, including defaults. Top-level since and until stay for older clients.",
+ "properties": {
+ "cursor": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "include_baseline": {
+ "type": "boolean"
+ },
+ "limit": {
+ "type": "integer"
+ },
+ "program": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "since": {
+ "format": "date",
+ "type": "string"
+ },
+ "until": {
+ "format": "date",
+ "type": "string"
+ }
+ },
+ "required": [
+ "since",
+ "until",
+ "program",
+ "limit",
+ "include_baseline",
+ "cursor"
+ ],
+ "type": "object"
+ },
+ "since": {
+ "format": "date",
+ "type": "string"
+ },
+ "sources": {
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "publisher": {
+ "type": "string"
+ },
+ "supports_rule_ids": {
+ "items": {
+ "maxLength": 120,
+ "pattern": "^[a-z0-9_]+(\\.[a-z0-9_]+)+$",
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "title": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "url": {
+ "format": "uri",
+ "type": "string"
+ },
+ "verified_at": {
+ "format": "date",
+ "type": "string"
+ }
+ },
+ "required": [
+ "url",
+ "publisher",
+ "verified_at",
+ "supports_rule_ids"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "tool": {
+ "const": "get_rule_changes"
+ },
+ "until": {
+ "format": "date",
+ "type": "string"
+ },
+ "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.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "tool",
+ "api_version",
+ "notice",
+ "generated_at",
+ "sources",
+ "data_freshness",
+ "since",
+ "until",
+ "query",
+ "changes",
+ "next_cursor"
+ ],
+ "title": "get_rule_changes output",
+ "type": "object"
+}