curl --request PATCH \
--url https://api.scrip.dev/v1/programs/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"description": "Updated description",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "ASYNC",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"name": "Updated Program Name",
"on_unknown_participant": "REJECT",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"redemption_target_type": "LEDGER_ENTITY",
"status": "SUSPENDED"
}
'import requests
url = "https://api.scrip.dev/v1/programs/{id}"
payload = {
"description": "Updated description",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "ASYNC",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"name": "Updated Program Name",
"on_unknown_participant": "REJECT",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"redemption_target_type": "LEDGER_ENTITY",
"status": "SUSPENDED"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Updated description',
fulfillment_max_face_value_minor: 10000,
fulfillment_mode: 'ASYNC',
fulfillment_participant_max_amount_minor: 25000,
fulfillment_participant_max_count: 3,
fulfillment_participant_window_seconds: 86400,
name: 'Updated Program Name',
on_unknown_participant: 'REJECT',
pending_redemption_ttl: '24h',
redemption_target_entity_id: '550e8400-e29b-41d4-a716-446655440000',
redemption_target_type: 'LEDGER_ENTITY',
status: 'SUSPENDED'
})
};
fetch('https://api.scrip.dev/v1/programs/{id}', 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://api.scrip.dev/v1/programs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Updated description',
'fulfillment_max_face_value_minor' => 10000,
'fulfillment_mode' => 'ASYNC',
'fulfillment_participant_max_amount_minor' => 25000,
'fulfillment_participant_max_count' => 3,
'fulfillment_participant_window_seconds' => 86400,
'name' => 'Updated Program Name',
'on_unknown_participant' => 'REJECT',
'pending_redemption_ttl' => '24h',
'redemption_target_entity_id' => '550e8400-e29b-41d4-a716-446655440000',
'redemption_target_type' => 'LEDGER_ENTITY',
'status' => 'SUSPENDED'
]),
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://api.scrip.dev/v1/programs/{id}"
payload := strings.NewReader("{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.scrip.dev/v1/programs/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/programs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2024-01-15T10:30:00Z",
"deleted_at": "2024-06-01T00:00:00Z",
"description": "Quarterly sales incentive program",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "INSTANT",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Q1 Sales Bonus",
"on_unknown_participant": "CREATE",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440002",
"redemption_target_type": "SYSTEM_REDEMPTION",
"status": "ACTIVE",
"updated_at": "2024-01-15T10:30:00Z"
}{
"code": "bad_request",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Invalid request parameters"
}{
"code": "unauthorized",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Missing or invalid credentials"
}{
"code": "forbidden",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Insufficient permissions for this action"
}{
"code": "not_found",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource not found"
}{
"code": "conflict",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource already exists or state conflict"
}{
"code": "unsupported_media_type",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Content-Type must be application/json"
}{
"code": "unprocessable",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Business rule violation"
}{
"code": "internal_error",
"message": "An internal error occurred"
}Update a program
Partially update a program.
curl --request PATCH \
--url https://api.scrip.dev/v1/programs/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"description": "Updated description",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "ASYNC",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"name": "Updated Program Name",
"on_unknown_participant": "REJECT",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"redemption_target_type": "LEDGER_ENTITY",
"status": "SUSPENDED"
}
'import requests
url = "https://api.scrip.dev/v1/programs/{id}"
payload = {
"description": "Updated description",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "ASYNC",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"name": "Updated Program Name",
"on_unknown_participant": "REJECT",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440000",
"redemption_target_type": "LEDGER_ENTITY",
"status": "SUSPENDED"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Updated description',
fulfillment_max_face_value_minor: 10000,
fulfillment_mode: 'ASYNC',
fulfillment_participant_max_amount_minor: 25000,
fulfillment_participant_max_count: 3,
fulfillment_participant_window_seconds: 86400,
name: 'Updated Program Name',
on_unknown_participant: 'REJECT',
pending_redemption_ttl: '24h',
redemption_target_entity_id: '550e8400-e29b-41d4-a716-446655440000',
redemption_target_type: 'LEDGER_ENTITY',
status: 'SUSPENDED'
})
};
fetch('https://api.scrip.dev/v1/programs/{id}', 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://api.scrip.dev/v1/programs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Updated description',
'fulfillment_max_face_value_minor' => 10000,
'fulfillment_mode' => 'ASYNC',
'fulfillment_participant_max_amount_minor' => 25000,
'fulfillment_participant_max_count' => 3,
'fulfillment_participant_window_seconds' => 86400,
'name' => 'Updated Program Name',
'on_unknown_participant' => 'REJECT',
'pending_redemption_ttl' => '24h',
'redemption_target_entity_id' => '550e8400-e29b-41d4-a716-446655440000',
'redemption_target_type' => 'LEDGER_ENTITY',
'status' => 'SUSPENDED'
]),
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://api.scrip.dev/v1/programs/{id}"
payload := strings.NewReader("{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.scrip.dev/v1/programs/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/programs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Updated description\",\n \"fulfillment_max_face_value_minor\": 10000,\n \"fulfillment_mode\": \"ASYNC\",\n \"fulfillment_participant_max_amount_minor\": 25000,\n \"fulfillment_participant_max_count\": 3,\n \"fulfillment_participant_window_seconds\": 86400,\n \"name\": \"Updated Program Name\",\n \"on_unknown_participant\": \"REJECT\",\n \"pending_redemption_ttl\": \"24h\",\n \"redemption_target_entity_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"redemption_target_type\": \"LEDGER_ENTITY\",\n \"status\": \"SUSPENDED\"\n}"
response = http.request(request)
puts response.read_body{
"created_at": "2024-01-15T10:30:00Z",
"deleted_at": "2024-06-01T00:00:00Z",
"description": "Quarterly sales incentive program",
"fulfillment_max_face_value_minor": 10000,
"fulfillment_mode": "INSTANT",
"fulfillment_participant_max_amount_minor": 25000,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_window_seconds": 86400,
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Q1 Sales Bonus",
"on_unknown_participant": "CREATE",
"pending_redemption_ttl": "24h",
"redemption_target_entity_id": "550e8400-e29b-41d4-a716-446655440002",
"redemption_target_type": "SYSTEM_REDEMPTION",
"status": "ACTIVE",
"updated_at": "2024-01-15T10:30:00Z"
}{
"code": "bad_request",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Invalid request parameters"
}{
"code": "unauthorized",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Missing or invalid credentials"
}{
"code": "forbidden",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Insufficient permissions for this action"
}{
"code": "not_found",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource not found"
}{
"code": "conflict",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource already exists or state conflict"
}{
"code": "unsupported_media_type",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Content-Type must be application/json"
}{
"code": "unprocessable",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Business rule violation"
}{
"code": "internal_error",
"message": "An internal error occurred"
}name, description, on_unknown_participant, status, or redemption target configuration. Only include the fields you want to change; omitted fields are left unchanged.
Status can be set to ACTIVE, SUSPENDED, or ARCHIVED. A SUSPENDED program preserves all data but stops event processing: event submissions can still be accepted for async validation, then fail with program_inactive. An ARCHIVED program has the same event-processing behavior and is hidden from list results.
While a program is ARCHIVED, you can still update name and description, or reactivate the program by setting status to ACTIVE or SUSPENDED. Behavioral configuration changes are blocked while archived and return 409 with code program_archived. This includes on_unknown_participant, redemption_target_type, and redemption_target_entity_id.
Setting redemption_target_type to LEDGER_ENTITY requires redemption_target_entity_id in the same request. Setting it to SYSTEM_REDEMPTION or SYSTEM_BREAKAGE must omit redemption_target_entity_id and clears any existing reference. Changes only affect redemptions created after the update: existing redemptions and their reversals continue to use the target captured at the time they were created.
Gift-card limits
Set limits on card value and participant redemptions. For a program offering USD cards, this configuration allows up to USD 100.00 per card and three cards totaling USD 250.00 per participant in any 24-hour period:{
"fulfillment_max_face_value_minor": 10000,
"fulfillment_participant_window_seconds": 86400,
"fulfillment_participant_max_count": 3,
"fulfillment_participant_max_amount_minor": 25000
}
| Field | Behavior |
|---|---|
fulfillment_max_face_value_minor | Maximum value of one card in currency minor units. Unset means unlimited. |
fulfillment_participant_window_seconds | Rolling period for the participant limits, up to 365 days. Required when either participant limit is set. |
fulfillment_participant_max_count | Maximum number of pending, processing, awaiting-funds, and succeeded fulfillments per participant in the period. |
fulfillment_participant_max_amount_minor | Maximum total face value for those fulfillments per participant in the period, counted separately for each currency. |
| Error code | Meaning |
|---|---|
fulfillment_cap_window_required | A participant limit was set without a rolling period. |
fulfillment_cap_window_too_long | The rolling period exceeds 365 days. |
fulfillment_cap_window_invalid | A redemption encountered a stored period outside the allowed range. |
fulfillment_face_value_cap_exceeded | A redemption exceeds the value allowed for one card. |
fulfillment_participant_count_cap_exceeded | A participant has reached the number of cards allowed in the period. |
fulfillment_participant_amount_cap_exceeded | A participant has reached the total card value allowed in the period. |
422. See Gift cards for the redemption flow.Authorizations
API key passed in the X-API-Key header.
Path Parameters
Program ID
Body
Fields to update
Program description
1000"Updated description"
Maximum face value of one gift-card redemption, in fiat minor units. Send null to remove the limit.
10000
Default redemption behavior when capture is omitted
INSTANT, ASYNC "ASYNC"
Maximum total face value per participant in the rolling period, in fiat minor units. Counts the same order statuses as fulfillment_participant_max_count. Send null to remove the limit.
25000
Maximum gift-card redemptions per participant in the rolling period. Counts PENDING, PROCESSING, AWAITING_FUNDS, and SUCCEEDED orders. Send null to remove the limit.
3
Rolling period, in seconds, used for each participant's gift-card limits. Send null to clear it. Required if either limit remains set after this update.
86400
Program name
1 - 255"Updated Program Name"
How to handle events for unregistered participants
CREATE, REJECT "REJECT"
Optional program-specific bound between 60 seconds and one year. Explicit null clears it; without a request or program bound, pending redemptions default to 90 days.
"24h"
Target ledger entity ID. Required when redemption_target_type is LEDGER_ENTITY; must be omitted for the SYSTEM_* targets.
"550e8400-e29b-41d4-a716-446655440000"
Where redeemed value is posted. One of SYSTEM_REDEMPTION, SYSTEM_BREAKAGE, LEDGER_ENTITY. The paired example shows LEDGER_ENTITY because that is the only target type that pairs with redemption_target_entity_id; SYSTEM_* targets must omit it.
SYSTEM_REDEMPTION, SYSTEM_BREAKAGE, LEDGER_ENTITY "LEDGER_ENTITY"
Lifecycle state
ACTIVE, SUSPENDED, ARCHIVED "SUSPENDED"
Response
Updated program
When the program was created
"2024-01-15T10:30:00Z"
Set when the program is archived
"2024-06-01T00:00:00Z"
Optional program description
"Quarterly sales incentive program"
Maximum face value of one gift-card redemption, in fiat minor units. Absent means unlimited.
10000
Default redemption behavior when capture is omitted
INSTANT, ASYNC "INSTANT"
Maximum total face value per participant in the rolling period, in fiat minor units. Counts the same order statuses as fulfillment_participant_max_count. Absent means unlimited.
25000
Maximum gift-card redemptions per participant in the rolling period. Counts PENDING, PROCESSING, AWAITING_FUNDS, and SUCCEEDED orders. Absent means unlimited.
3
Rolling period, in seconds, used for each participant's gift-card limits. Present only when at least one limit is set.
86400
Program ID
"550e8400-e29b-41d4-a716-446655440000"
Program name
"Q1 Sales Bonus"
How events for unregistered participants are handled
"CREATE"
Optional program-specific bound between 60 seconds and one year. Without a request or program bound, pending redemptions default to 90 days.
"24h"
Target ledger entity ID. Present only when redemption_target_type is LEDGER_ENTITY.
"550e8400-e29b-41d4-a716-446655440002"
Where redeemed value is posted: SYSTEM_REDEMPTION, SYSTEM_BREAKAGE, or LEDGER_ENTITY
"SYSTEM_REDEMPTION"
Lifecycle state
"ACTIVE"
When the program was last modified
"2024-01-15T10:30:00Z"