> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spade.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

<Update label="June 2026">
  ## Larger Action Trigger Registrations (up to 300k)

  Account-scope and program-scope action trigger registrations now support a total cap of **300,000 active triggers per scope**. The per-request limit remains **100,000 triggers**, so to register more than 100,000 triggers you split them into batches of up to 100,000 and submit them with **sequential PATCH `add` operations** — waiting for each batch to reach `succeeded` before sending the next (only one registration can be in progress per scope at a time).

  See [Registering large trigger sets](/reference/realtime-action-triggers-guide#registering-large-trigger-sets) for details.
</Update>

<Update label="May 2026">
  ## Microbatch Enrichment

  Batch enrichment endpoints now support **microbatching** — pass `?synchronous=true` to receive enriched results inline in the response. Use this feature if you need to enrich a small number of records quickly.

  ```bash theme={null}
  curl https://east.sandbox.spade.com/batches/transactions/universal/enrich?synchronous=true \
    -H "X-Api-Key: <YOUR_API_KEY>" \
    -d '{ "transactions": [ ... ] }'
  ```

  Microbatching is available on:

  * `POST /batches/merchants/enrich` — up to **50** merchants per microbatch
  * `POST /batches/transactions/cards/enrich` — up to **100** transactions per microbatch
  * `POST /batches/transactions/cards/enrich/parse` — up to **100** transactions per microbatch
  * `POST /batches/transactions/transfers/enrich` — up to **100** transactions per microbatch
  * `POST /batches/transactions/universal/enrich` — up to **100** transactions per microbatch

  Microbatching is not enabled by default. To request access, please contact us at [sales@spade.com](mailto:sales@spade.com).

  See the [Microbatch enrichment guide](/reference/microbatch-enrichment-guide) for details.
</Update>

<Update label="May 2026">
  ## Triggered Action `source` Field

  Triggered actions in enrichment responses now include a `source` field indicating whether the action was triggered by the matched `counterparty` or `third_party`. `source` is set to `null` when an `ALLOW_ONLY` action trigger was set up whose condition the current transaction did not meet (the `authRecommendation` in this case will be `BLOCK`).

  ```json theme={null}
  "actions": [
    {
      "id": "trigger-123",
      "type": "merchant_trigger",
      "action": { "type": "REWARD", "points": 100 },
      "scope": "account",
      "source": "counterparty"
    }
  ]
  ```

  Read the [Merchant Action Triggers Guide](/reference/merchant-action-triggers-guide) for details.
</Update>

<Update label="April 2026">
  ## Incremental Updates for Merchant Action Triggers

  You can now add and remove individual merchants from an action trigger registration without replacing your entire list. Previously, any change required re-submitting all triggers through PUT, which meant minutes of batch processing for large registrations.

  The new PATCH endpoint supports two operations:

  * **add**: Register new merchants or update existing ones. Existing merchants that aren't in the request are left untouched. Submitting a trigger ID that already exists replaces that registration (upsert).
  * **remove**: Remove merchants by trigger ID. Completes in under 100ms regardless of registration size.

  ```json theme={null}
  // Add merchants
  {
    "operation": "add",
    "merchantTriggers": [
      { "id": "trigger-123", "merchantName": "Starbucks", "action": { "type": "REWARD", "points": 100 } }
    ]
  }

  // Remove merchants
  {
    "operation": "remove",
    "triggerIds": ["trigger-123", "trigger-456"]
  }
  ```

  The GET endpoint now also returns the full list of active merchant triggers (`merchantTriggers` and `totalCount`) alongside the registration status and version.

  PATCH is available at all four scopes (account, program, user, card). Read the [Merchant Action Triggers Guide](/reference/merchant-action-triggers-guide) for details.
</Update>

<Update label="March 2026">
  ## Program-Scoped Merchant Action Triggers

  Merchant action triggers now support a program scope, allowing you to register triggers that apply to all transactions where the enrichment request includes a matching `programId`.

  The new endpoints follow the same PUT/PATCH/GET/DELETE pattern as the existing account, user, and card scopes:

  ```
  GET    /programs/{programId}/merchant-action-triggers
  PUT    /programs/{programId}/merchant-action-triggers
  PATCH  /programs/{programId}/merchant-action-triggers
  DELETE /programs/{programId}/merchant-action-triggers
  ```

  Program-scoped triggers are applied in addition to account-scoped triggers when `programId` is present in the enrichment request. Read the [Merchant Action Triggers Guide](/reference/merchant-action-triggers-guide) for details on scope inheritance.
</Update>

<Update label="February 2026">
  ## Merchant Action Triggers

  You can now register custom actions to be returned when a transaction matches a specific merchant. Merchant action triggers let you attach arbitrary data to a set of merchants — rewards, block/allow rules, custom metadata — and have that data returned automatically in enrichment responses when a transaction matches.

  Use the PUT endpoint to register a list of merchant triggers at a given scope (account, user, or card). Spade matches each submitted merchant against our database and returns your action data in the enrichment response when a transaction matches.

  ```json theme={null}
  // Register triggers at account scope
  PUT /merchant-action-triggers
  {
    "merchantTriggers": [
      {
        "id": "trigger-123",
        "merchantName": "Starbucks",
        "action": { "type": "REWARD", "points": 100 }
      }
    ]
  }
  ```

  ```json theme={null}
  // Matched trigger in enrichment response
  "actions": [
    {
      "id": "trigger-123",
      "type": "merchant_trigger",
      "action": { "type": "REWARD", "points": 100 },
      "scope": "account"
    }
  ]
  ```

  Registrations with more than 100 merchants at the account scope are processed asynchronously — poll the GET endpoint to monitor completion. User and card scopes are limited to 100 merchants per request.

  Two special action types are also supported: `BLOCK` and `ALLOW_ONLY`, which populate an `authRecommendation` field in the enrichment response for use in authorization decisioning.

  Read the [Merchant Action Triggers Guide](/reference/merchant-action-triggers-guide) to get started.
</Update>

<Update label="January 2026">
  ## New Category: Mortgage

  New year, new category! We now support classifying transactions as `Mortgage` transactions. This is a new Tier 3 category that falls under`Banking and Finance`:

  > `001-008-001-000` = `Banking and Finance -> Lending -> Mortgage`
  >
  > Example: United Wholesale Mortgage will be categorized as `Mortgage` moving forward.

  Our full industry list can be accessed via API (details [here](/api-reference/category-personalization/get-all-default-and-custom-integration-level-categories)).
</Update>

<Update label="October 2025">
  ## New Category: AI Services

  We’re excited to share an update to our merchant categorization system! We have added a Tier 3 industry `AI Services` under `Technology -> Software`:

  > `013-009-013-000` = `Technology -> Software -> AI Services`
  >
  > Example: OpenAI will be categorized as `AI Services` moving forward.

  Our full industry list can be accessed via API (details [here](/api-reference/category-personalization/get-all-default-and-custom-integration-level-categories)).
</Update>

<Update label="September 2025">
  ## Mobile App Data

  We've added an exciting new premium field to card transaction enrichment! We now support matching to mobile apps purchased through the Google Play Store and to in-app purchases made in these apps.

  If mobile app matching is part of your product package, you'll now have access to the `mobileAppInfo` object in your card enrichment responses when a transaction matches to a Google Play Store app.

  ```json theme={null}
  "mobileAppInfo": {
    "id": "0d1ef10f-2652-39bd-98f1-af34ae03a4a7",
    "name": "Artificial Life",
    "url": "https://play.google.com/store/apps/details?id=com.mooncoder.alife",
    "logo": null,
    "developerName": "Mooncoder",
    "developerId": "f6fdc9b1-f0ea-3dda-8e15-ead6fe5755fe",
    "category": "Education and Parenting",
    "hasGamblingOrRewards": false,
    "hasSimulatedGambling": false,
    "ageRating": "Children"
  },
  ```

  Learn more about mobile app data by reading our [Mobile App Data Guide](/reference/mobile-app-data).
</Update>

<Update label="August 2025">
  ## Third Party Websites

  Going forward, enrichments will include third party websites.

  ```json theme={null}
  "thirdParties": [
      {
          "id": "9063bc0f-0a3f-4b1f-bf64-4f9862e17002",
          "name": "PayPal",
          "type": "platform",
          "logo": "https://static.v2.spadeapi.com/logos/9063bc0f0a3f4b1fbf644f9862e17002/light.png",
          "website": "http://www.paypal.com/"
      }
  ],
  ```
</Update>

<Update label="March 2025">
  ## New Category: Golf Courses ⛳

  We’re excited to share another improvement to our merchant categorization system! We have added a Tier 3 industry 'Golf Courses' under `Entertainment -> Recreation`:

  > `004-002-013-000` = `Entertainment -> Recreation -> Golf Courses`
  >
  > Example: Canyon Springs Golf Club will be categorized as ‘Golf Courses’ moving forward.

  Our full industry list can be accessed via API (details [here](/api-reference/category-personalization/get-all-default-and-custom-integration-level-categories)).
</Update>

<Update label="January 2025">
  ## Spade Categorization Update

  We’re excited to share updates on improvements to our merchant categorization system! These changes focus on adding granularity to our category tree and enhancing differentiation for risky and ambiguous categories. Here's what’s new:

  1. **New categories and naming updates:** Please note that all newly added categories are tier 3 or tier 4 categories that fall under our existing category tree, ensuring compatibility with your integration. Contact [support@spade.com](mailto:support@spade.com) for the full file instead

  * **Cannabis:**
    * Renamed 011-013-001-000 Retail -> Specialty Retail -> Cannabis Dispensary to Retail -> Specialty Retail -> Cannabis (Category code stays the same)
    * New tier 4 categories under Cannabis:
      * `011-013-001-001 Retail -> Specialty Retail -> Cannabis -> Dispensary` (Example: Food4Thought, Houston, TX)
      * `011-013-001-002 Retail -> Specialty Retail -> Cannabis -> CBD and Unscheduled Cannabis Products` (Example: Drink Brez)
  * **Firearms:**
    * New tier 3 category Firearms under Retail -> Specialty Retail, and two new tier 4 categories under that:
      * `011-013-022-000 Retail -> Specialty Retail -> Firearms` (Example: Kroll International)
      * `011-013-022-001 Retail -> Specialty Retail -> Firearms -> Guns` (Example: Primary Arms)
      * `011-013-022-002 Retail -> Specialty Retail -> Firearms -> Ammo and Accessories` (Example: Lucky Gunner)
  * **Vitamins and Supplements:**
    * New tier 3 category Vitamins and Supplements under Retail -> Specialty Retail:
      * `011-013-023-000 Retail -> Specialty Retail -> Vitamins and Supplements` (Example: GNC)
  * **Firing Ranges and Clubs:**
    * New tier 3 category Firing Ranges and Clubs under Entertainment -> Recreation:
      * `004-002-012-000 Entertainment -> Recreation -> Firing Ranges and Clubs` (Example: Guntry Club Of Maryland)

  2. **Categorization Improvements:** in addition to adding new categories, we are rolling out improvements to existing categorizations:

  * **Adult Entertainment:** Enhanced categorization for merchants without a dedicated MCC, including online platforms (e.g., Chaturbate) and physical clubs (e.g., The Box NYC).
  * **Casinos and Gambling:** Better classification of online gambling games and sports betting merchants (e.g., Underdog Sports, Modo).
  * **Convenience Stores vs. Bodegas:** Improved differentiation between convenience stores and specialty food retailers (e.g., Chelsea Gourmet Deli categorized as Specialty Food).
  * **Cafes vs. Restaurants/Fast Food:** Refined categorization for cafes that often share MCCs with restaurants or fast food (e.g., Bluestone Lane categorized as Cafes, while Lisbon Cafe remains a Restaurant).

  We’re confident these updates will provide more precise categorization for your use cases. Let us know if you have any questions or feedback!
</Update>

<Update label="December 2024">
  ## Address Line 1 and 2

  Going forward, enrichments will include two new fields: `addressLine1` and `addressLine2`. This change will hopefully improve usability of our location data.

  The existing `address` field will continue to exist unchanged.

  ```json theme={null}
  "location": [
    {
      ...
      "address": "1234 W 5th Ave Suite 100",
      "addressLine1": "1234 W 5th Ave",
      "addressLine2": "Suite 100",
      ...
    }
  ]
  ```
</Update>
