Catalog API returning 9 discounts while Dashboard shows only 2

Hi Square team,

We are seeing a discrepancy between the Square Dashboard and the Catalog API when retrieving DISCOUNT objects.

On the *Square Dashboard, we can currently see only 2 discounts. However, when we retrieve the discounts through the Catalog API, the API returns *9 discount objects.

The additional 7 discounts appear to be old/historical discounts that are no longer visible as active discounts in the Dashboard.

All 9 objects returned by the API have:

json
“is_deleted”: false

and most also have:

json
“present_at_all_locations”: true

For example, the API is returning older discounts such as:
{ “type”: “DISCOUNT”, “id”: “DAFY2YYPIGAF7XCWA7IOQCFH”, “discount_data”: { “name”: “opening discount”, “discount_type”: “FIXED_PERCENTAGE”, “percentage”: “25.0”, “application_method”: “MANUALLY_APPLIED” } }

  • opening discount
  • A$5.00 off entire sale
  • A$10.00 off entire sale
  • Get 10% off an item… — LUNCH10
  • Get $5 off the next time you visit!
  • CAMPHILL2026
  • Get 10% off the next time you visit!

while only 2 discounts are currently visible on our Dashboard.

Could you please clarify:

  1. Why are these old/inactive discounts still returned by the Catalog API?
  2. Does is_deleted: false mean the discount is considered active, even when it is no longer shown on the Dashboard?
  3. Is there an API filter or field we should use to retrieve only the currently active/visible discounts?
  4. Should these old discounts be explicitly deleted through the API/Dashboard rather than simply being unassigned or made inactive?

We can provide the complete Catalog API response if needed.

Thanks!

Welcome to the Developer Forum!

Thanks for the detailed explanation. I can confirm that your observation is correct. Please find answer in-line:

  1. Why are these old/inactive discounts still returned by the Catalog API?
    1. The Catalog API returns all non-deleted CatalogDiscount objects, including backing objects created for Marketing coupons, campaigns, Loyalty rewards, and pricing rules. (you can find them in its respective page. For instance, Customers > Marketing > Coupon). These can remain for historical or product relationships even when no longer shown on the Discounts page.
  2. Does is_deleted: false mean the discount is considered active, even when it is no longer shown on the Dashboard?
    1. No. It only means the catalog object has not been deleted. It does not guarantee that it is currently redeemable, seller-managed, or visible in the Dashboard.
  3. Is there an API filter or field we should use to retrieve only the currently active/visible discounts?
    1. No. The public API has no field or filter that reproduces Dashboard visibility. Related pricing rules, Loyalty tiers, and coupon records can identify some backing discounts, but not reliably classify all of them.
  4. Should these old discounts be explicitly deleted through the API/Dashboard rather than simply being unassigned or made inactive?
    1. Generally, no. They might support Marketing coupons, Loyalty rewards, or pricing rules. Manage them through the owning Dashboard feature instead; direct deletion could break your workflows.

Hope this helps!