Skip to main content
Glama

How To Make Money On Snapchat

get_rule_changes

Read-onlyIdempotent

FACT. Use this when you need what changed in Snap's monetization rules since a date: previous value, new value, source, and the date we detected the change. Do not use it for the current rule list (get_monetization_requirements) or for a creator's gap (calculate_gap).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNoInclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 90 days before the request's UTC date. until defaults to the UTC date of the request. The response echoes both dates at the top level and inside query.
untilNoInclusive upper bound on that same change date. Default: the UTC date of the request.
cursorNoOpaque pagination cursor from a previous response.
programNoProgram 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.
include_baselineNoWhen true, also return baseline records in baseline. Baseline records are never included in changes.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
toolYes
queryYesFilters applied to this response, including defaults. Top-level since and until stay for older clients.
sinceYes
untilYes
noticeYesNon-affiliation notice included in every response.
changesYes
sourcesYes
baselineNoInitial-load records. Present only when include_baseline is true. Never included in changes or in change counts.
warningsNoPlain 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.
api_versionYes
next_cursorYes
generated_atYes
catalog_scopeNoCounts 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.
data_freshnessYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / since / default
      Removed value: -"2024-01-01"
    • changedInput schema / properties / since / description
      Previous value: -"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 2024-01-01, the same default as the rule-changes page. until defaults to the UTC date of the request. The response echoes both dates at the top level and inside query."New value: +"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 90 days before the request's UTC date. until defaults to the UTC date of the request. The response echoes both dates at the top level and inside query."
  2. Changed1 schema field changed
    • 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"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / since / description
      Previous value: -"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 2024-01-01, the same default as the rule-changes page. The response echoes the date used."New value: +"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 2024-01-01, the same default as the rule-changes page. until defaults to the UTC date of the request. The response echoes both dates at the top level and inside query."
  4. Changed3 schema fields changed
    • addedInput schema / properties / since / default
      Added value: +"2024-01-01"
    • changedInput schema / properties / since / description
      Previous value: -"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at."New value: +"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. Omitted on GET, POST, and MCP means 2024-01-01, the same default as the rule-changes page. The response echoes the date used."
    • removedInput schema / required
      Removed value: -[
      -  "since"
      -]
  5. Changed4 schema fields changed
    • changedInput schema / description
      Previous value: -"FACT tool. Lists changes to Snap monetization rules detected since a date: previous value, new value, source, detected date. Only changes approved for publication are returned."New value: +"FACT tool. Lists approved changes to Snap monetization rules. A change is a record that supersedes an approved earlier record and differs in value, status, or source, or a record with an explicit approved change block (added or retired). Baseline records (no supersedes and no change block) are omitted unless include_baseline is true, and they are never included in changes or in change counts. since and until filter on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at. They do not filter on verified_at."
    • addedInput schema / properties / include_baseline
      Added value: +{
      +  "default": false,
      +  "description": "When true, also return baseline records in baseline. Baseline records are never included in changes.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / since / description
      Added value: +"Inclusive lower bound on the change date: effective_date, else changed_before, else the last day of effective_month, else detected_at."
    • addedInput schema / properties / until / description
      Added value: +"Inclusive upper bound on that same change date. Default: the UTC date of the request."
  6. First observed

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully carried by structured data. The description adds the 'FACT' retrieval framing and clarifies scope (change history vs current state), but discloses no pagination limits, default lookback window, or result volume — those live only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words, and the positive use case is front-loaded before the exclusions. Every clause carries routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description still names the returned fields. The gaps it leaves — baseline vs changes distinction, pagination behavior, default 90-day window — are covered by the schema, so the definition is sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already documents since/until filtering semantics, program validation, cursor, and limit. The description itself contributes no parameter-level detail beyond the date-window concept, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('what changed in Snap's monetization rules') and enumerates the returned fields (previous value, new value, source, detection date), which distinguishes it from a current-state query. An agent can identify this tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger ('when you need what changed ... since a date') and two explicit when-NOT cases with named alternatives: get_monetization_requirements for the current rule list and calculate_gap for a creator's gap. This is full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources