curl --request PUT \
--url https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3,
"offerId": "travel-3x-promo"
}
}
]
}
'import requests
url = "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers"
payload = { "categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3,
"offerId": "travel-3x-promo"
}
}
] }
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
categoryTriggers: [
{
id: 'travel-reward-1',
categoryId: '020-001-000-000',
action: {type: 'REWARD', rewardPercent: 3, offerId: 'travel-3x-promo'}
}
]
})
};
fetch('https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'categoryTriggers' => [
[
'id' => 'travel-reward-1',
'categoryId' => '020-001-000-000',
'action' => [
'type' => 'REWARD',
'rewardPercent' => 3,
'offerId' => 'travel-3x-promo'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers"
payload := strings.NewReader("{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "succeeded",
"version": 1,
"categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3
}
}
],
"totalCount": 10
}{
"invalidField": [
"This field is required."
]
}{
"details": "Incorrect authentication credentials."
}{
"detail": "An action trigger registration is already in progress for this scope."
}{
"details": "Internal server error."
}Register category triggers at card scope
Register category action triggers at the card scope.
Card-level triggers apply only to transactions for the specified card.
Field requirements:
id,categoryId, andactionare required for each triggercategoryIdmust be a valid Spade category ID (useGET /categoriesto discover valid IDs)
Limit: A maximum of 300 categoryTriggers can be submitted per request. All registrations are processed synchronously.
Important: Triggers are only applied to enrichment responses when the status is succeeded.
To learn more about action triggers, please read the Category Action Triggers Guide.
curl --request PUT \
--url https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3,
"offerId": "travel-3x-promo"
}
}
]
}
'import requests
url = "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers"
payload = { "categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3,
"offerId": "travel-3x-promo"
}
}
] }
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
categoryTriggers: [
{
id: 'travel-reward-1',
categoryId: '020-001-000-000',
action: {type: 'REWARD', rewardPercent: 3, offerId: 'travel-3x-promo'}
}
]
})
};
fetch('https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'categoryTriggers' => [
[
'id' => 'travel-reward-1',
'categoryId' => '020-001-000-000',
'action' => [
'type' => 'REWARD',
'rewardPercent' => 3,
'offerId' => 'travel-3x-promo'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers"
payload := strings.NewReader("{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://east.sandbox.spade.com/users/{userId}/cards/{cardId}/category-action-triggers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"categoryTriggers\": [\n {\n \"id\": \"travel-reward-1\",\n \"categoryId\": \"020-001-000-000\",\n \"action\": {\n \"type\": \"REWARD\",\n \"rewardPercent\": 3,\n \"offerId\": \"travel-3x-promo\"\n }\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "succeeded",
"version": 1,
"categoryTriggers": [
{
"id": "travel-reward-1",
"categoryId": "020-001-000-000",
"action": {
"type": "REWARD",
"rewardPercent": 3
}
}
],
"totalCount": 10
}{
"invalidField": [
"This field is required."
]
}{
"details": "Incorrect authentication credentials."
}{
"detail": "An action trigger registration is already in progress for this scope."
}{
"details": "Internal server error."
}Authorizations
Path Parameters
Your unique identifier for the user
512Your unique identifier for the card
512Body
Request body for registering category action triggers.
List of category triggers to register for action matching. Each trigger must have a unique id.
Field requirements:
id,categoryId, andactionare always required
Limit: A maximum of 300 triggers across all scopes. All registrations are processed synchronously.
1 - 300 elementsShow child attributes
Show child attributes
Response
Registration created successfully
Response containing the status of a category action trigger registration.
The current status of the action trigger registration. Category trigger registrations are processed synchronously, so the status is always one of:
succeeded: Registration complete, triggers are now activefailed: Registration failed, check your request and retry
succeeded, failed "succeeded"
The version number of this registration. Increments with each PUT, PATCH, or DELETE request to this scope.
1
The list of active category triggers registered for this scope. Present on GET responses; omitted on PUT and PATCH responses.
Show child attributes
Show child attributes
The total number of active category triggers registered for this scope. Present on GET responses; omitted on PUT and PATCH responses.
10

