---
title: "Get event impact"
method: GET
path: "/v1/events/{event_id}/impact"
tags: ["Events"]
---

# Get event impact

`GET /v1/events/{event_id}/impact`

## Request

- Base URL: `https://api.scrip.dev`
- URL: `https://api.scrip.dev/v1/events/{event_id}/impact`
- Auth: HTTP bearer

Returns the full causal chain for a processed event: rule evaluations, journal entries with postings, state changes, and per-entity balance impact.

## Path parameters

- `event_id` string, uuid, required

## Response `200`

Event impact details

- EventImpactResponse: An event with everything it caused: rule evaluations, journal entries, balance changes and state changes.
  - `balance_impact` BalanceImpactResponse[]: Net balance impact per entity/asset/bucket
    - `amount` string: Net amount change (positive = credit, negative = debit)
    - `asset_symbol` string: Asset being affected
    - `bucket` 'AVAILABLE' | 'HELD' | 'DEFERRED': The balance bucket the change affected.
    - `entity_id` string, uuid: Public UUID of the entity (null for SYSTEM_* types)
    - `entity_type` 'PARTICIPANT' | 'GROUP' | 'PROGRAM' | 'PROGRAM_TEST' | 'SYSTEM_ISSUANCE' | 'SYSTEM_BREAKAGE' | 'SYSTEM_REDEMPTION': The kind of account the change posted to.
  - `created_at` string, date-time: When this event was created
  - `error_code` string: Why a FAILED event failed, as a code from the Errors page, such as `program_inactive`, `participant_inactive` or `unknown_participant`. Absent when the event did not fail or the failure has no code.
  - `error_message` string: Error details if the event failed during processing
  - `event_data` object: Original event data payload
  - `event_timestamp` string, date-time: When the event occurred (from the ingestion request)
  - `event_type` 'EXTERNAL' | 'SYSTEM' | 'OPERATIONAL': Whether you sent the event or Scrip generated it.
  - `external_id` string: Your system's identifier for the participant (the value provided at ingestion)
  - `id` string, uuid: Unique identifier for this event
  - `idempotency_key` string: Client-provided unique key for deduplication
  - `journal_entries` JournalEntryResponse[]: Journal entries created by this event with their double-entry postings
    - `action_type` 'CREDIT' | 'DEBIT' | 'TRANSFER' | 'HOLD' | 'RELEASE' | 'FORFEIT' | 'EXPIRATION' | 'REDEMPTION' | 'REVERSAL' | 'BURN' | 'FUND' | 'ADJUSTMENT' | 'MATURITY' | 'VOID_PENDING': The kind of ledger action the entry records. A manual adjustment is a `CREDIT` or `DEBIT`; no operation creates `ADJUSTMENT` entries.
    - `created_at` string, date-time: When this entry was created (RFC 3339)
    - `description` string: Human-readable explanation of the entry's purpose
    - `entry_hash` string: SHA-256 hash sealing this entry into the organization's hash chain
    - `event_id` string, uuid: Event that triggered this entry (null if created via direct API call)
    - `id` string, uuid: Unique identifier for this journal entry
    - `postings` PostingResponse[]: Double-entry postings (always sum to zero). Omitted in list responses.
      - `amount` string: Posting amount (positive = credit, negative = debit)
      - `asset_symbol` string: Asset being transacted
      - `bucket` 'AVAILABLE' | 'HELD' | 'DEFERRED': The balance bucket the posting affects.
      - `created_at` string, date-time: When this posting was created (RFC 3339)
      - `entity_type` 'PARTICIPANT' | 'GROUP' | 'PROGRAM' | 'PROGRAM_TEST' | 'SYSTEM_ISSUANCE' | 'SYSTEM_BREAKAGE' | 'SYSTEM_REDEMPTION': The kind of account the posting belongs to.
      - `group_id` string, uuid: Group that owns this account (set when entity_type is GROUP)
      - `id` string, uuid: Unique identifier for this posting
      - `participant_id` string, uuid: Participant who owns this account (set when entity_type is PARTICIPANT)
      - `program_id` string, uuid: Program that owns this account (set when entity_type is PROGRAM)
    - `program_id` string, uuid: Program this entry belongs to
    - `program_name` string: The name of the program the entry ran under.
    - `reference_id` string: Correlation ID linking holds to releases
    - `rule_id` string, uuid: Rule that triggered this entry. It is null for direct API calls and for entries Scrip creates itself.
  - `participant_id` string, uuid: Participant UUID, resolved from external_id if one was provided at ingestion
  - `processed_at` string, date-time: When the event finished processing (null while pending or processing)
  - `program_id` string, uuid: Program this event belongs to
  - `received_at` string, date-time: When Scrip received the event
  - `recipient_id` string, uuid: Recipient participant UUID sent as recipient_id or recipient_external_id; rules read it as recipient.id
  - `rule_evaluations` RuleEvaluationResponse[]: 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.
    - `created_at` string, date-time: When the evaluation occurred
    - `error_message` string: Error details if the rule failed during execution
    - `id` string, uuid: Unique identifier for this evaluation record
    - `reason` string: Why a recorded SKIPPED evaluation was skipped. On a SUCCESS evaluation, REFERENCE_ALREADY_SETTLED means a CREDIT to HELD was skipped because its reference_id had already settled. Absent otherwise.
    - `rule_history_id` string, uuid: Snapshot of the rule version that was active when this evaluation occurred
    - `rule_id` string, uuid: Rule that was evaluated
    - `rule_name` string: The name of the rule when it was evaluated.
    - `rule_set_id` string, uuid: Rule set that contained the rule when this evaluation occurred
    - `status` 'SUCCESS' | 'FAILED' | 'SKIPPED' | 'SKIPPED_ERROR' | 'SKIPPED_TIMEOUT': The recorded result of the evaluation.
    - `stopped_by_rule_id` string, uuid: The earlier rule whose `stop_after_match` skipped this rule. Only rule configuration simulations return it; event results have no row for a skipped rule.
  - `state_changes` StateChangeResponse[]: State changes (tags, counters, attributes, tiers) caused by this event
    - `changed_at` string, date-time: When the change occurred (RFC 3339)
    - `entity_id` string, uuid: Public UUID of the affected entity
    - `entity_type` 'PARTICIPANT' | 'GROUP' | 'PROGRAM': Whose state changed: a participant, a group, or the program.
    - `key` string: The key that changed
    - `new_value` string: New value (null for deletes)
    - `old_value` string: Previous value (null for new keys)
    - `operation` 'SET' | 'DELETE' | 'AUTO_RESET': What happened to the key: a value was written, the key was removed, or a counter was reset to zero on its schedule.
    - `program_id` string, uuid: Program scope for tier changes
    - `rule_id` string, uuid: Rule that caused this change
    - `state_type` 'TAG' | 'COUNTER' | 'ATTRIBUTE' | 'TIER': Which kind of state changed.
  - `status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED': Where the event is in processing.
  - `updated_at` string, date-time: When this event was last updated

## Other responses

- `400`: Invalid ID format (code: validation_error)
- `401`: The API key is missing or not valid. See [Authentication](https://docs.scrip.dev/authentication).
- `404`: Resource not found (code: event_not_found)
- `429`: Too many requests. Wait the number of seconds in the `Retry-After` header, then retry. See [Limits and durations](https://docs.scrip.dev/limits#rate-limits).
- `500`: Something failed on Scrip's side. Retry the request, and quote `request_id` if it keeps failing. [Errors](https://docs.scrip.dev/errors) lists every code, and the [API introduction](https://docs.scrip.dev/api-reference/introduction) describes the error format.

---

[API](https://skmtc.dev/scrip/apis/scrip-api.md) · [All operations](https://skmtc.dev/scrip/apis/scrip-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrip/apis/scrip-api/revisions/c52d35da8d97?raw)
