{
  "id": "list_publisher_offers",
  "mcp_tool": "list_publisher_offers",
  "status": "approved",
  "source_system": "cake",
  "environment": [
    "staging",
    "prod"
  ],
  "sharded": false,
  "connections": {
    "admin": "cake_admin_ro"
  },
  "objects": [
    "Admin.lucos_ro_offer_catalogue",
    "Admin.lucos_ro_affiliate_offers",
    "Admin.lucos_ro_affiliate_directory"
  ],
  "parameters": {
    "affiliate_id": {
      "type": "int",
      "required": false
    },
    "publisher_id": {
      "type": "string",
      "required": false
    },
    "mapping_status": {
      "type": "int",
      "required": false,
      "description": "Optional filter on affiliate_offers_mappings.status for THIS publisher: 0=pending, 1=approved, 2=disapproved, 3=inactive. Omit to get the portal's Offers Available page, which lists every live offer including ones the publisher has not applied to."
    },
    "live_only": {
      "type": "int",
      "required": false,
      "default": 1
    },
    "limit": {
      "type": "int",
      "required": false,
      "default": 100
    }
  },
  "constraints": {
    "max_window_days": 1,
    "default_window_days": 1,
    "max_rows": 500,
    "timeout_ms": 60000
  },
  "allow_fields": [
    "affiliate_id",
    "affiliate_name",
    "offer_id",
    "mapping_status",
    "mapping_status_label",
    "adv_id",
    "adv_name",
    "offer_status",
    "category",
    "kpis",
    "conversion_point",
    "geo",
    "publisher_goal",
    "starting_rates",
    "attribution_model",
    "device_targeting",
    "lookback_window"
  ],
  "deny_fields": [
    "offer_custom_link",
    "is_emailed",
    "terms",
    "description",
    "approved_traffic_sources",
    "disapproved_traffic_sources",
    "rev_share"
  ],
  "post_processing": [
    "Exactly one of affiliate_id (AffiliateIDs.id) or publisher_id (exact AffiliateIDs.Affiliate / Affiliate.name). Unscoped offer dump is rejected.",
    "publisher_id resolves via lucos_ro_affiliate_directory (same identity hop as search_affiliates), then mappings are read from lucos_ro_affiliate_offers.",
    "Default mapping_status=1 (approved). 0=pending, 1=approved, 2=disapproved, 3=inactive.",
    "Default live_only=1 keeps publisher_advertiser_offers_from_accounts.status live (case-insensitive). Dummy 1-day window constraints exist because the catalog schema requires them; the executor does not apply a date filter.",
    "Assignment table, not CPC. Do not use get_campaign_affiliate_report for this question."
  ],
  "notes": "Answers 'list the active publisher offers for fatcoupon'. Requires DBA CREATE VIEW Admin.lucos_ro_affiliate_offers + GRANT SELECT to lucos_cake_ro. Do not adhoc onto affiliate_offers_mappings."
}
