curl --request GET \
--url https://api.scrip.dev/v1/events/{id}/impact \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.scrip.dev/v1/events/{id}/impact"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.scrip.dev/v1/events/{id}/impact', 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/events/{id}/impact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/events/{id}/impact"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scrip.dev/v1/events/{id}/impact")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/events/{id}/impact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"balance_impact": [
{
"amount": "200",
"asset_symbol": "PTS",
"bucket": "AVAILABLE",
"entity_id": "550e8400-e29b-41d4-a716-446655440000",
"entity_type": "PARTICIPANT"
}
],
"created_at": "2024-01-15T10:30:00Z",
"error_code": "program_not_found",
"error_message": "rule condition evaluation failed",
"event_data": {},
"event_timestamp": "2024-01-15T10:30:00Z",
"event_type": "EXTERNAL",
"external_id": "user_abc123",
"id": "550e8400-e29b-41d4-a716-446655440000",
"idempotency_key": "order-12345-completed",
"journal_entries": [
{
"action_type": "HOLD",
"created_at": "2024-01-15T10:30:00Z",
"description": "Purchase reward: 10 POINTS",
"entry_hash": "b3a1d9f8c2e4a7b6d1e3f5a8c9b2d4e6f7a1b3c5d7e9f2a4b6c8d0e1f3a5b7c9",
"event_id": "550e8400-e29b-41d4-a716-446655440002",
"id": "550e8400-e29b-41d4-a716-446655440000",
"postings": [
{
"amount": "100.00",
"asset_symbol": "POINTS",
"bucket": "AVAILABLE",
"created_at": "2024-01-15T10:30:00Z",
"entity_type": "PARTICIPANT",
"group_id": "550e8400-e29b-41d4-a716-446655440011",
"id": "550e8400-e29b-41d4-a716-446655440003",
"participant_id": "550e8400-e29b-41d4-a716-446655440010",
"program_id": "550e8400-e29b-41d4-a716-446655440012"
}
],
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"program_name": "Q1 Sales Bonus",
"reference_id": "auth_12345",
"rule_id": "950e8400-e29b-41d4-a716-446655440004"
}
],
"participant_id": "550e8400-e29b-41d4-a716-446655440002",
"processed_at": "2024-01-15T10:30:02Z",
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"received_at": "2024-01-15T10:30:01Z",
"recipient_id": "550e8400-e29b-41d4-a716-446655440003",
"rule_evaluations": [
{
"created_at": "2024-01-15T10:30:00Z",
"error_message": "condition evaluation failed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"reason": "OUTSIDE_TIME_WINDOW",
"rule_history_id": "550e8400-e29b-41d4-a716-446655440003",
"rule_id": "550e8400-e29b-41d4-a716-446655440001",
"rule_name": "Welcome Bonus",
"rule_set_id": "550e8400-e29b-41d4-a716-446655440004",
"status": "SUCCESS",
"stopped_by_rule_id": "550e8400-e29b-41d4-a716-446655440002"
}
],
"state_changes": [
{
"changed_at": "2024-01-15T10:30:00Z",
"entity_id": "550e8400-e29b-41d4-a716-446655440000",
"entity_type": "PARTICIPANT",
"key": "lifetime_spend",
"new_value": "575",
"old_value": "500",
"operation": "set",
"program_id": "550e8400-e29b-41d4-a716-446655440002",
"rule_id": "550e8400-e29b-41d4-a716-446655440001",
"state_type": "counter"
}
],
"status": "COMPLETED",
"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": "internal_error",
"message": "An internal error occurred"
}Get event impact
Returns the full causal chain for a processed event: rule evaluations, journal entries with postings, state changes, and per-entity balance impact.
curl --request GET \
--url https://api.scrip.dev/v1/events/{id}/impact \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.scrip.dev/v1/events/{id}/impact"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.scrip.dev/v1/events/{id}/impact', 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/events/{id}/impact",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/events/{id}/impact"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scrip.dev/v1/events/{id}/impact")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/events/{id}/impact")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"balance_impact": [
{
"amount": "200",
"asset_symbol": "PTS",
"bucket": "AVAILABLE",
"entity_id": "550e8400-e29b-41d4-a716-446655440000",
"entity_type": "PARTICIPANT"
}
],
"created_at": "2024-01-15T10:30:00Z",
"error_code": "program_not_found",
"error_message": "rule condition evaluation failed",
"event_data": {},
"event_timestamp": "2024-01-15T10:30:00Z",
"event_type": "EXTERNAL",
"external_id": "user_abc123",
"id": "550e8400-e29b-41d4-a716-446655440000",
"idempotency_key": "order-12345-completed",
"journal_entries": [
{
"action_type": "HOLD",
"created_at": "2024-01-15T10:30:00Z",
"description": "Purchase reward: 10 POINTS",
"entry_hash": "b3a1d9f8c2e4a7b6d1e3f5a8c9b2d4e6f7a1b3c5d7e9f2a4b6c8d0e1f3a5b7c9",
"event_id": "550e8400-e29b-41d4-a716-446655440002",
"id": "550e8400-e29b-41d4-a716-446655440000",
"postings": [
{
"amount": "100.00",
"asset_symbol": "POINTS",
"bucket": "AVAILABLE",
"created_at": "2024-01-15T10:30:00Z",
"entity_type": "PARTICIPANT",
"group_id": "550e8400-e29b-41d4-a716-446655440011",
"id": "550e8400-e29b-41d4-a716-446655440003",
"participant_id": "550e8400-e29b-41d4-a716-446655440010",
"program_id": "550e8400-e29b-41d4-a716-446655440012"
}
],
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"program_name": "Q1 Sales Bonus",
"reference_id": "auth_12345",
"rule_id": "950e8400-e29b-41d4-a716-446655440004"
}
],
"participant_id": "550e8400-e29b-41d4-a716-446655440002",
"processed_at": "2024-01-15T10:30:02Z",
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"received_at": "2024-01-15T10:30:01Z",
"recipient_id": "550e8400-e29b-41d4-a716-446655440003",
"rule_evaluations": [
{
"created_at": "2024-01-15T10:30:00Z",
"error_message": "condition evaluation failed",
"id": "550e8400-e29b-41d4-a716-446655440000",
"reason": "OUTSIDE_TIME_WINDOW",
"rule_history_id": "550e8400-e29b-41d4-a716-446655440003",
"rule_id": "550e8400-e29b-41d4-a716-446655440001",
"rule_name": "Welcome Bonus",
"rule_set_id": "550e8400-e29b-41d4-a716-446655440004",
"status": "SUCCESS",
"stopped_by_rule_id": "550e8400-e29b-41d4-a716-446655440002"
}
],
"state_changes": [
{
"changed_at": "2024-01-15T10:30:00Z",
"entity_id": "550e8400-e29b-41d4-a716-446655440000",
"entity_type": "PARTICIPANT",
"key": "lifetime_spend",
"new_value": "575",
"old_value": "500",
"operation": "set",
"program_id": "550e8400-e29b-41d4-a716-446655440002",
"rule_id": "550e8400-e29b-41d4-a716-446655440001",
"state_type": "counter"
}
],
"status": "COMPLETED",
"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": "internal_error",
"message": "An internal error occurred"
}rule_set_id. State changes include the rule_id that caused them, linking every tag, counter, attribute, and tier change back to the specific rule.
The evaluation trace is sparse. Clean false conditions have no row, and later rules in the same set that were not reached after a successful stop_after_match have no row. Processing still continues with the next set. This endpoint has no include_skipped filter and returns all recorded evaluation rows, including SKIPPED_ERROR and SKIPPED_TIMEOUT.
The balance_impact array aggregates all postings into net changes per entity, asset, and bucket. Zero-sum entries (where credits and debits cancel out) are omitted. System accounts (SYSTEM_ISSUANCE, SYSTEM_BREAKAGE, SYSTEM_REDEMPTION) appear as counterparties to participant and group movements.
PENDING or PROCESSING status return the event metadata with empty arrays for all impact fields. This endpoint is most useful once the event reaches COMPLETED or FAILED.For usage patterns and examples, see the Event Processing guide.Authorizations
API key passed in the X-API-Key header.
Path Parameters
Event ID
Response
Event impact details
Net balance impact per entity/asset/bucket
Show child attributes
Show child attributes
When this event was created
"2024-01-15T10:30:00Z"
Machine-readable failure code for a terminal FAILED event, when one is available (e.g. program_not_found, participant_suspended, participant_inactive). NULL when the event did not fail or the failure carried no stable code.
"program_not_found"
Error details if the event failed during processing
"rule condition evaluation failed"
Original event data payload
When the event occurred (from the ingestion request)
"2024-01-15T10:30:00Z"
Event type: EXTERNAL (API-ingested) or SYSTEM (internally generated)
"EXTERNAL"
Your system's identifier for the participant (the value provided at ingestion)
"user_abc123"
Unique identifier for this event
"550e8400-e29b-41d4-a716-446655440000"
Client-provided unique key for deduplication
"order-12345-completed"
Journal entries created by this event with their double-entry postings
Show child attributes
Show child attributes
Participant UUID, resolved from external_id if one was provided at ingestion
"550e8400-e29b-41d4-a716-446655440002"
When the event finished processing (null while pending or processing)
"2024-01-15T10:30:02Z"
Program this event belongs to
"550e8400-e29b-41d4-a716-446655440001"
When Scrip received the event
"2024-01-15T10:30:01Z"
Recipient participant UUID sent as recipient_id or recipient_external_id; rules read it as recipient.id
"550e8400-e29b-41d4-a716-446655440003"
Recorded rule-evaluation rows for this event. Rules whose conditions cleanly evaluate to false are not recorded; later rules in the same set after a successful stop_after_match are not evaluated or recorded.
Show child attributes
Show child attributes
State changes (tags, counters, attributes, tiers) caused by this event
Show child attributes
Show child attributes
Processing status: PENDING, PROCESSING, COMPLETED, or FAILED
"COMPLETED"
When this event was last updated
"2024-01-15T10:30:00Z"