Overview
Spade’s realtime action triggers allow you to register rules that trigger custom actions when transactions match your criteria. When a transaction matches one of your registered triggers, the enrichment response includes your customaction data.
Common use cases:
- Merchant rewards: Identify transactions at specific merchants to trigger reward multipliers
- Transaction flagging: Flag transactions for review based on merchant or category
- Program-scoped triggers: Register different trigger rules per program — for example, an issuer with both corporate and consumer cards can register distinct merchant action triggers for each program without duplicating them across every user or card
Coming soon: Category-based triggers will allow you to trigger actions based on Spade categories (e.g., “Crypto”, “Gambling”).
Quick Start
- Ensure the actions feature is enabled - Contact your Spade representative if you need access
- Register your triggers using the PUT endpoint with your trigger configuration
- Wait for registration to complete - Check the GET endpoint until status is
succeeded - Enrich transactions - Matched triggers appear in the
actionsfield
Registration Scopes
Action triggers can be registered at four different scopes, with higher scopes cascading down to lower scopes:| Scope | Endpoint | Applies To | Limit |
|---|---|---|---|
| Account | /merchant-action-triggers | All transactions for all users in your account | 100,000 triggers per request |
| Program | /programs/{programId}/merchant-action-triggers | All enrichment requests where programId matches this program | 100,000 triggers per request |
| User | /users/{userId}/merchant-action-triggers | All transactions for all cards belonging to that user | 100 triggers per request |
| Card | /users/{userId}/cards/{cardId}/merchant-action-triggers | Only transactions for that specific card | 100 triggers per request |
programId, userId, and cardId will check:
- Card-level triggers (for that card)
- User-level triggers (for that user)
- Program-level triggers (for that program)
- Account-level triggers (for your account)
What is a program?
A program is a freeform identifier you define — it requires no upfront configuration. You supply aprogramId string on your enrichment requests to group transactions however makes sense for your business (e.g., by card product, customer, or business line).
programId, userId, and cardId each have a maximum length of 512 characters.Registering merchant action triggers
Use the PUT endpoint to register merchant action triggers for action matching.Two matching modes for merchant action triggers:
- Location-level: (default) Applies triggers to a specific physical location (e.g. one specific Costco location)
- Corporation-level: Applies triggers to a whole brand (e.g. Costco in general)
Example: Register Merchant Action Triggers at the Account Scope
The example below registers triggers at the account scope. To register at other scopes, replace the URL path accordingly — for example, use
/programs/{programId}/merchant-action-triggers for program scope.See the API reference for full endpoint details.Response
Checking Registration Status
Use the GET endpoint to check the status of your action trigger registration.Status Values
| Status | Description |
|---|---|
pending | Registration received, processing not yet started |
running | Registration is being processed (for batch registrations) |
succeeded | Registration complete, triggers are now active |
failed | Registration failed, check your request and retry |
Example: Check Status
Batch Registrations (Account and Program Scope)
Account-scope and program-scope registrations with more than 100 merchant action triggers are processed asynchronously as a batch job. Batch processing workflow:- Submit your account-scope or program-scope registration via PUT - returns immediately with
status: "pending" - Poll the GET endpoint to monitor progress
- Status changes from
pending→running→succeeded(orfailed) - Once
succeeded, triggers are active for new enrichment requests
For large account-scope or program-scope trigger lists, we recommend implementing a polling loop with exponential backoff. Most batch registrations complete within a few minutes.
Example: Polling for Completion
python
Clearing Triggers
Use the DELETE endpoint to clear all triggers at a given scope.DELETE creates a new version with an empty trigger list. The version number is incremented, not reset.
Example: Clear an Account-Scoped Trigger
Receiving Triggered Actions
When a transaction matches one or more of your registered triggers, the enrichment response includes theactions field.
Triggered Action Response Fields
| Field | Description |
|---|---|
id | Your trigger ID (as provided during registration) |
type | The type of trigger that matched (e.g., merchant_trigger) |
action | Your custom action data from registration |
scope | The scope at which this trigger was registered (account, program, user, or card) |
Example: Enrichment Response with Triggered Actions
The
actions field is null when no triggers match, and is omitted entirely if your account does not have the actions feature enabled.Best Practices
Unique Trigger IDs
Trigger IDs must be unique within each scope. A scope is defined by the URL path you register against (account, program, user, or card level).- Within a single request: All trigger IDs must be unique. Duplicate IDs in the same request will return a
400error. - Across requests in the same scope: Submitting a trigger with an ID that already exists in that scope will replace the previous registration (upsert). This applies to both
PUT(full replacement) andPATCH addoperations. - Across different scopes: The same trigger ID can be used independently in different scopes. For example,
"starbucks-reward"can exist in both a user-level and a program-level scope without conflict.
Action Structure
Design youraction schema upfront. This is your custom data - use it to store reward amounts, offer IDs, or any information you need when processing matched transactions.
The type field is required. There is currently one reserved keyword:
REWARD- For reward-based actions (e.g., cashback, points multipliers)
Scope Selection
- Use account scope for triggers that apply to all users (e.g., card-linked offer partners)
- Use program scope for triggers scoped to a specific program (e.g., a subset of customers or product line)
- Use user scope for user-specific preferences
- Use card scope for card-specific rules (e.g., category-specific rewards cards)
- Triggers cascade downward — for example, an account-level trigger will match transactions for all programs, users, and cards. A program-level trigger will match all users and cards that send enrichments with that
programId, but won’t affect other programs
Choosing PUT vs. PATCH
- Use PUT when replacing your full set of triggers (e.g., initial setup or a periodic full sync)
- Use PATCH when adding or removing a small number of merchants relative to your total trigger list
- A PATCH
addwith 10 merchants against a list of 50,000 only processes those 10 — a PUT with the same intent would reprocess all 50,000
Error Handling
- Implement retry logic for 5xx errors
- Handle 409 Conflict by waiting for the in-progress registration to complete
- Validate your trigger data before submission to avoid 400 errors

