Activities

Integration Guide & Migration Playbook

Quick References

Introduction

Alpaca's Activity SSE is a single Server-Sent Events endpoint that streams every activity — trade fills, corporate actions, fees, journals, transfers, and more — in real time with a unified schema.

It replaces or supersedes the following legacy endpoints:

Legacy EndpointReplacement StatusType
GET /v1/events/ntaFully replaced. All NTA events are available on the Activity SSE with a richer schema.SSE
GET /v1/accounts/activitiesFully replaced. Historical activity queries are supported via the since / until parameters. Activities booked after February 11, 2026 are available on the new endpoint.REST
GET /v2/events/tradesSubset of events available. Trade fills, corrections, and busts are available on the Activity SSE. Non-fill order lifecycle events (e.g., accepted, canceled, expired, replaced) are NOT activities and will NOT appear. If you depend on these events, continue using the Trade Events SSE alongside the Activity SSE. Latency on the Trade Events SSE stream is also generally lower.SSE

Why this matters for you:

  • One connection for all activities instead of separate NTA and REST endpoints. Partners who also need non-fill order lifecycle events (e.g., accepted, canceled) will still use the Trade Events SSE for those, but all financial state changes flow through a single Activity SSE connection.
  • Unified schema with a common envelope and type-specific details, eliminating inconsistent field naming.
  • Stable identifier (ref_id) for every activity, usable across SSE and future REST endpoints.
  • ULID-based event_id on every event, enabling lexicographic sorting and deterministic replay.

Core Concept: State Machine Replication

Alpaca expects every partner to maintain a backend system that mirrors the financial state of customer accounts — positions, cash balances, and transaction history.

The Activity SSE is the mechanism for keeping that mirror in sync:

  1. Connect to the Activity SSE.
  2. Receive each activity event as it occurs.
  3. Apply the event to your local state (update positions, adjust cash, record the transaction).
  4. Persist the event_id (ULID) of the last successfully processed event.
  5. On reconnect, resume from the persisted event_id using the since_id parameter. Process any re-delivered events idempotently using ref_id as your deduplication key.

Every activity event represents a state change that has already occurred on Alpaca's side. Your system should apply these events to converge toward the same state.


Endpoint References

Note: This endpoint is currently served under /v2beta1/. The path may change when it moves to general availability.

Activities SSE

Streams events on account activities.

API Reference is available here.

Single Event Lookup

Returns a single activity event identified by its event_id ULID.

API Reference is available here.


Event Schema

Every event follows a two-layer structure: common fields at the top level, plus a details object with fields specific to the activity type.

Common Fields (present on every event)

FieldTypeRequiredDescription
account_idUUIDYesThe account this activity belongs to.
atdatetime (RFC 3339)YesThe business event timestamp — when the activity occurred in the source system (OMS or Ledgie) emitted.
event_idULIDYesLexicographically sortable, monotonically increasing event identifier. Consists of: the first 6 bytes encode the current time in UTC with miliseconds precision, the last 10 bytes are entropy. The time part encodes the timestamp when event-streaming emitted the event (publication time). Use for cursor-based replay.
activity_typestringYesPrimary activity classification (e.g., TRD, DIV, SPLIT, FEE).
activity_subtypestringNoFurther classification within the type (e.g., CDIV, FSPLIT, REG).
ref_idUUIDYesStable unique identifier for this activity. For trades: the execution ID. For non-trade activities: the transaction ID. Use as your deduplication key.
statusstringYesStatus of the activity (e.g., executed).
executed_atdatetime (RFC 3339)YesWhen the activity was executed.
settle_datedateYesSettlement date for the activity.
qtydecimal stringNoQuantity of the security involved.
pricedecimal stringNoPrice of the security involved.
net_amountdecimal stringNoNet cash impact (positive = credit, negative = debit).
currencystringYesISO currency code (e.g., USD).
swap_ratedecimal stringNoFX conversion rate for local currency activities.
swap_fee_bpsdecimal stringNoFX conversion fee in basis points.
previous_idUUIDNoPresent when this activity corrects or cancels a prior activity. Contains the prior activity's ref_id.
detailsobjectYesActivity-type-specific fields. Structure varies by activity_type and activity_subtype.

The details Object

The details object contains fields specific to the activity type. This design avoids excessive nulls and provides rich, type-specific data.

For example, a TRD (trade fill) activity's details includes order_id, side, symbol, cum_qty, leaves_qty, order_status, and execution_type. A DIV / CDIV (cash dividend) activity's details includes ca_id, symbol, rate, entitled_qty, cash_payout, and corporate action dates.

The full details schema per activity type is defined in the API reference and samples are available in the last section below.

For fee activities (FEE), details may include a parent_id field linking the fee to the specific transaction that caused it. This applies to fees with a one-to-one relationship to a parent trade (e.g., COM, OCOM). Volume-based fees charged across multiple trades for a period (e.g., REG, TAF, CAT, ORF, NRV, NRC, BSWP) do not include parent_id.


Supported Activity Types

Trade Activities

activity_typeactivity_subtypeDescription
TRDTrade fill (equity or options). details.execution_type is one of: fill, trade_correct, trade_bust. Multi-leg orders produce one TRD event per leg, each with a distinct ref_id but the same details.order_id.

Corporate Actions (Equity)

activity_typeactivity_subtypeDescription
DIVCDIVCash dividend
DIVSDIVStock dividend
DIVSPDSubstitute payment in lieu of dividend
SPLITFSPLITForward stock split
SPLITRSPLITReverse stock split
SPLITUSPLITUnit split
SPINSpinoff
MACMACash merger
MASMAStock merger
MASCMAStock & cash merger
NCSNCSymbol name change
NCCNCCUSIP name change
NCSCNCSymbol & CUSIP name change
REORGWRMWorthless removal
VOFVTNDTender offer
VOFVWRTWarrant exercise
VOFVRGTRights offer
VOFVEXHExchange offer
FIMATFixed income maturity/redemption
DIVNRADividend tax withholding

Corporate Actions (Options)

activity_typeactivity_subtypeDescription
OPCADIV.CDIVOptions CA: cash dividend
OPCADIV.SDIVOptions CA: stock dividend
OPCAMA.CMAOptions CA: cash merger
OPCAMA.SMAOptions CA: stock merger
OPCAMA.SCMAOptions CA: stock & cash merger
OPCANC.SNCOptions CA: symbol name change
OPCANC.CNCOptions CA: CUSIP name change
OPCANC.SCNCOptions CA: symbol & CUSIP name change
OPCASPINOptions CA: spinoff
OPCASPLIT.FSPLITOptions CA: forward split
OPCASPLIT.RSPLITOptions CA: reverse split
OPCASPLIT.USPLITOptions CA: unit split

Options (Non-CA)

activity_typeactivity_subtypeDescription
OPASNOption assignment
OPEXCOption exercise
OPEXPOption expiry
OPTRDOption trade (paired with assignment/exercise)
OPCSHOptions cash settlement

Transfers & Journals

activity_typeactivity_subtypeDescription
ACATCACAT transfer (cash)
ACATSACAT transfer (securities)
FOPTFree-of-payment transfer (DTCC). Previously reported as ACATC/ACATS. If you filtered for ACAT types to capture all transfers, add FOPT handling.
JNLCJournal entry (cash)
JNLSJournal entry (securities)
CSWCash withdrawal
CSDCash disbursement

Fees & Interest

activity_typeactivity_subtypeDescription
FEEREGRegulatory (SEC) fee
FEETAFTrading Activity Fee
FEEORFOptions Regulatory Fee
FEEOCCOptions Clearing Corporation fee
FEENRVNon-retail venue fee
FEENRCNon-retail commission fee
FEELCTLocal currency trading fee
FEECOMCommission
FEECATConsolidated Audit Trail fee
FEEOCOMOptions commission (exercise/liquidation)
FEEBSWPBanking sweep fee
INTMGNMargin interest
INTCDTCredit interest
INTSWPSweep interest
INTQIIQualified interest income

Withholding

activity_typeactivity_subtypeDescription
WHSWHState withholding
WHFWHFederal withholding
WHSLWHSales withholding

Integration Guide (New Partners)

If you are a new Alpaca partner, integrate directly with the Activity SSE. Do not use the legacy endpoints.

Step 1 — Establish the SSE Connection

Open a long-lived HTTP GET request to /v2beta1/events/activities with your Broker API credentials. The server will hold the connection open and push data: lines as events occur.

Step 2 — Parse Each Event

Each SSE data: line contains a JSON object. Parse the common fields first (activity_type, ref_id, event_id, account_id), then route to type-specific handling logic based on activity_type and activity_subtype.

Step 3 — Apply the Event to Your Local State

For each event, update your local database:

  • TRD (trade fill): Record the fill. Update the account's position for the symbol. Adjust cash by net_amount.
  • DIV (dividend): For CDIV, credit net_amount to cash. For SDIV, add qty shares to the position.
  • SPLIT: Adjust the position quantity per the split ratio in details.
  • FEE / INT: Adjust cash by net_amount.
  • JNLC / JNLS: Adjust cash or positions accordingly.
  • MA, SPIN, NC, REORG: Update positions per the corporate action details (remove old shares, add new shares, credit cash as applicable).

Step 4 — Persist Your Cursor

After successfully processing each event, persist the event_id (ULID). This is your replay cursor.

Step 5 — Handle Reconnections

When your connection drops (network issue, server restart, deployment):

  1. Reconnect to the same endpoint.
  2. Set since_id to the last successfully processed event_id.
  3. Process all events received, deduplicating by ref_id.

Step 6 — Handle Corrections and Busts

When previous_id is present on an event, it means this activity corrects or cancels a prior activity whose ref_id matches previous_id. Reverse the original activity in your system and apply the new one.

Step 7 — Handle SSE Comments

Lines beginning with : are SSE comments, not data. Handle these two specifically:

  • :heartbeat — The connection is alive. No action needed.
  • : you are reading too slowly, dropped N messages — Your consumer is too slow. You have missed events. Reconnect with since_id set to your last processed event_id to replay missed events.
  • : internal server error — The server is closing the connection. Reconnect.

Step 8 — Historical Replay

To read historical data (e.g., during initial onboarding or reconciliation), connect with a since timestamp or since_id. If you use since_id, and don’t specify until_id, server streams all historical events from that point first, then transitions to real-time.


Migration Playbook (Existing Partners)

This section is for partners currently using the legacy NTA Events SSE (/v1/events/nta) and/or the Activities REST endpoint (/v1/accounts/activities). We also document the differences with the current Trade Events SSE (/v2/events/trades), even though we don’t consider the new endpoint to be its full replacement..

What Changes

AspectLegacyActivity SSE
EndpointsThree separate endpoints (trade SSE, NTA SSE, activities REST)Single endpoint: /v2beta1/events/activities
Event IDsInteger (event_id) + ULID (event_ulid) depending on endpoint versionULID only (event_id)
Activity identificationNo common stable ID across SSE and RESTref_id (UUID) on every event
SchemaFlat, inconsistent fields across trade and NTA eventsTwo-layer: common envelope + type-specific details object
Trade activity namingFILL (REST) / event: fill (SSE)activity_type: TRD
NTA type fieldentry_type + entry_sub_typeactivity_type + activity_subtype
Free-text descriptiondescription field on NTA eventsRemoved. Replaced by structured fields in details.
Embedded order objectFull order object on trade eventsOnly key order fields in details (order_id, client_order_id, side, symbol, order_status, etc.)
per_share_amountPresent on legacy NTA eventsReplaced by details.rate (where applicable)
position_qtyPresent on trade eventsNot present. Compute locally from fills.

Order Lifecycle Events

The Trade Events SSE emits events for the full order lifecycle: accepted, new, pending_new, fill, partial_fill, canceled, expired, replaced, rejected, done_for_day, held, stopped, suspended, pending_cancel, pending_replace, calculated, order_replace_rejected, order_cancel_rejected, trade_bust, trade_correct.

The Activity SSE emits only events that represent actual activities — that is, events that change the financial state of the account:

  • fillactivity_type: TRD, details.execution_type: fill
  • trade_correctactivity_type: TRD, details.execution_type: trade_correct
  • trade_bustactivity_type: TRD, details.execution_type: trade_bust

Order lifecycle events that do not result in a fill (accepted, new, canceled, expired, replaced, etc.) are not activities and will not appear on the Activity SSE. These events do not change positions or cash.

If your application depends on these non-fill order lifecycle events (e.g., to show "order accepted" or "order canceled" notifications), you should continue using the Trade Events SSE (/v2/events/trades) for order lifecycle tracking alongside the Activity SSE for activity tracking.

For state machine replication of positions, cash, and transaction history, the Activity SSE alone is sufficient.

Field Mapping: Trade Events SSE → Activity SSE

Trade Event FieldActivity SSE FieldNotes
account_idaccount_idUnchanged.
atatUnchanged. This field, in both endpoints, encodes the business event timestamp — when the activity occurred in the source system. If you previously used at as a proxy for execution time, use executed_at instead.
event_id (integer, v1)Removed. Use ULID-based event_id instead.
event_ulid (v1) / event_id (v2)event_idNow always a ULID.
event (e.g., fill, new)details.execution_typeOnly fill, trade_correct, trade_bust are emitted. Non-fill lifecycle events are not activities.
timestampexecuted_atRenamed. The legacy timestamp field (which had varying semantics per event type) is replaced by executed_at.
order.iddetails.order_idOrder object is no longer embedded; key fields promoted to details.
order.client_order_iddetails.client_order_id
order.symboldetails.symbol
order.asset_iddetails.asset_id
order.sidedetails.side
order.statusdetails.order_status
order.filled_qtydetails.cum_qtyRenamed. Cumulative filled quantity on the order.
order.commissiondetails.commission
order.* (other fields)Remaining order fields (limit_price, stop_price, time_in_force, etc.) are not included.
pricepriceMoved to common envelope.
qtyqtyMoved to common envelope.
position_qtyRemoved. Compute from cumulative fills on your side.
execution_idref_idRenamed. Same value (execution UUID).
previous_execution_idprevious_idRenamed. Present on trade_correct and trade_bust events.

Field Mapping: Legacy NTA Events SSE → Activity SSE

Legacy NTA Event FieldActivity SSE FieldNotes
account_idaccount_idUnchanged.
atatUnchanged. Both in the legacy SSE endpoints, at was the business event timestamp — when the activity occurred in the source system. In the Activity SSE, the at field maintains this semantics. See the Trade Events mapping above for details.
event_id (integer)Removed.
event_ulidevent_idRenamed. Now the primary event identifier.
id (record UUID)ref_idRenamed. The stable unique identifier for the activity.
entry_typeactivity_typeRenamed. Same values (e.g., DIV, FEE, JNLC).
entry_sub_typeactivity_subtypeRenamed. Same values (e.g., CDIV, REG, TAF).
statusstatusUnchanged.
qtyqtyUnchanged. Now a string-formatted decimal.
pricepriceUnchanged. Now a string-formatted decimal.
net_amountnet_amountUnchanged. Now a string-formatted decimal.
settle_datesettle_dateUnchanged.
system_datedetails.system_dateMoved into details. Format changed from datetime to date (YYYY-MM-DD).
symboldetails.symbolMoved into details (present where applicable per type).
cusipdetails.cusipMoved into details (present where applicable per type).
descriptionRemoved. All information previously in the free-text description is now represented as structured fields in details.
per_share_amountdetails.rateRenamed and moved. Represents the per-share rate (e.g., dividend rate).
group_iddetails.group_idMoved into details. Groups related activities (e.g., both legs of a split).
corporate_action_iddetails.ca_idRenamed and moved into details.
swap_rateswap_rateUnchanged. Remains at the top level.
execution_idWas present on some legacy NTA fee events. In the new schema, use details.parent_id for fee-to-parent-transaction linkage.

Field Mapping: Legacy Activities REST → Activity SSE

Legacy REST FieldActivity SSE FieldNotes
idref_idRenamed.
activity_type (FILL)activity_type (TRD)FILL is now TRD.
activity_type (non-trade)activity_typeSame values for non-trade types.
activity_sub_typeactivity_subtypeRenamed (underscore removed). Same values.
transaction_timeexecuted_atRenamed.
datesettle_dateRenamed.
net_amountnet_amountUnchanged.
qtyqtyUnchanged.
pricepriceUnchanged.
sidedetails.sideMoved to details (trade activities only).
symboldetails.symbolMoved to details.
order_iddetails.order_idMoved to details (trade activities only).
cum_qtydetails.cum_qtyMoved to details (trade activities only).
leaves_qtydetails.leaves_qtyMoved to details (trade activities only).
order_statusdetails.order_statusMoved to details (trade activities only).

Migration Checklist

Use this checklist to track your migration from legacy endpoints to the Activity SSE.

Preparation:

  • Read and understand this guide and the OpenAPI specification for ActivityEventV2.
  • Inventory every place in your codebase that consumes from Trade SSE, legacy NTA SSE, or Activities REST.
  • Identify if you depend on non-fill order lifecycle events (e.g., accepted, canceled, expired). If so, keep using the Trade Events SSE for those.

Implementation:

  • Build a consumer for GET /v2beta1/events/activities that parses the common envelope fields.
  • Implement routing logic that dispatches on activity_type (and activity_subtype where needed) to type-specific handlers.
  • Update your data model to store ref_id as the primary activity identifier and event_id (ULID) as your replay cursor.
  • Replace references to entry_type / entry_sub_type with activity_type / activity_subtype.
  • Replace references to the description free-text field with structured field reads from details.
  • If you previously stored position_qty from trade events, switch to computing position quantities from cumulative fills.
  • If you referenced per_share_amount, switch to reading details.rate.
  • Update deduplication logic to use ref_id instead of the legacy id field.
  • Implement previous_id handling for trade corrections and busts.
  • Verify that your reconnection logic uses since_id with the ULID event_id.

Validation:

  • Run both legacy and new consumers in parallel. Compare the activities received: every trade fill and legacy NTA event should have a corresponding Activity SSE event with matching ref_id.
  • Verify that net_amount, qty, price, and settle_date match between legacy and new events for the same activity.
  • Confirm that corporate action details (split ratios, dividend rates, merger terms) are correctly extracted from the details object.
  • Test reconnection: disconnect your consumer, wait, reconnect with since_id, and verify no events are lost and duplicates are handled.

Cutover:

  • Once validation passes, decommission your legacy NTA SSE consumer.
  • Decommission your legacy Activities REST polling (if used for real-time tracking).
  • If you do not need non-fill order lifecycle events, decommission your Trade SSE consumer.
  • Monitor for any dropped messages (watch for : you are reading too slowly comments).

Event Samples

Representative samples for each activity type. All identifiers have been replaced with placeholders.

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "TRD",
  "qty": "0.04",
  "price": "480.338",
  "currency": "USD",
  "net_amount": "-19.21",
  "status": "executed",
  "at": "2026-01-02T14:43:59.052726Z",
  "executed_at": "2026-01-02T14:43:59.05095724Z",
  "settle_date": "2026-01-05",
  "details": {
    "asset_id": "<ASID>",
    "order_id": "<ORID>",
    "client_order_id": "<CLID>",
    "side": "buy",
    "order_status": "filled",
    "execution_type": "fill",
    "symbol": "MSFT",
    "cum_qty": "0.04",
    "leaves_qty": "0"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "TRD",
  "qty": "1",
  "price": "9.3",
  "currency": "USD",
  "net_amount": "-930.02",
  "status": "executed",
  "at": "2026-01-10T14:30:02.89489Z",
  "executed_at": "2026-01-10T14:30:02.888518094Z",
  "settle_date": "2026-01-06",
  "details": {
    "asset_id": "<ASID>",
    "order_id": "<ORID>",
    "client_order_id": "<CLID>",
    "side": "buy",
    "order_status": "filled",
    "execution_type": "fill",
    "symbol": "F260109C00006000",
    "cum_qty": "1",
    "leaves_qty": "0",
    "commission": "0"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "CSD",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "1382000",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-13T09:37:31.970401Z",
  "settle_date": "2026-02-13",
  "details": {
    "system_date": "2026-02-13"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "CSW",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-7",
  "status": "executed",
  "at": "2026-01-17T02:00:08.514798Z",
  "executed_at": "2026-01-17T04:35:10.338561Z",
  "settle_date": "2026-01-16",
  "details": {
    "system_date": "2026-01-20"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "JNLC",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-4.81",
  "status": "executed",
  "at": "2026-01-15T02:00:08.514798Z",
  "executed_at": "2026-01-15T08:00:00.925529Z",
  "settle_date": "2026-01-15",
  "details": {
    "journal_id": "<JRLID>",
    "system_date": "2026-01-15"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "JNLS",
  "qty": "0.00911",
  "price": "638.2799",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T02:00:08.514798Z",
  "executed_at": "2026-01-15T23:54:13.330501Z",
  "settle_date": "2026-01-15",
  "details": {
    "journal_id": "<JRLID>",
    "symbol": "AAPL",
    "system_date": "2026-01-15"
  }
}
# there are some fees, that do not have one single transaction from which they are derived, but they are derived on a volume/bulk/duration of transactions. For them, there is no `parent_id` relationship. Such fees sub-types include: REG, TAF, CAT, ADR, ORF, BSWP, NRV, NRC, ADR, OCOM, LOC

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "FEE",
  "activity_subtype": "TAF",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-0.01",
  "status": "executed",
  "at": "2026-01-16T01:00:08.514798Z",
  "executed_at": "2026-01-16T01:00:00Z",
  "settle_date": "2026-01-16",
  "details": {
    "system_date": "2026-01-15"
  }
}


# All other fees, will have parent_id relationship setup, as they have one-to-one relationship with the transaction which they are derived from. 
# These fees may have sub-types
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "FEE",
  "activity_subtype": "OCC",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-0.02",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-01-15T14:44:09.189982Z",
  "settle_date": "2026-01-15",
  "details": {
    "parent_id": "<PTID>",
    "system_date": "2026-01-15"
  }
}

# or no sub-type at all
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "FEE",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-0.02",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-01-15T14:44:09.189982Z",
  "settle_date": "2026-01-15",
  "details": {
    "parent_id": "<PTID>",
    "system_date": "2026-01-15"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "ACATC",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "118.79",
  "status": "executed",
  "at": "2025-12-06T02:00:08.514798Z",
  "executed_at": "2025-12-06T00:00:42.17753Z",
  "settle_date": "2025-12-08",
  "details": {
    "request_id": "<RQTID>",
    "external_id": "20251110012345@000031",
    "system_date": "2025-12-05",
    "hold_date": "2025-12-08"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "ACATS",
  "qty": "4",
  "price": "157.44",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2025-12-06T02:00:08.514798Z",
  "executed_at": "2025-12-06T00:00:42.17753Z",
  "settle_date": "2025-12-08",
  "details": {
    "request_id": "<RQTID>",
    "external_id": "20252220054321@000007",
    "symbol": "AAPL",
    "system_date": "2025-12-05",
    "hold_date": "2025-12-08"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "INT",
  "activity_subtype": "MGN",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-3.01",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-28T05:56:15.207304Z",
  "settle_date": "2026-02-27",
  "details": {
    "system_date": "2026-03-02"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "INT",
  "activity_subtype": "FPSL",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "0.01",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T05:00:30.215648Z",
  "settle_date": "2026-02-27",
  "details": {
    "system_date": "2026-02-27"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "DIV",
  "activity_subtype": "CDIV",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "4.14",
  "status": "executed",
  "at": "2026-01-02T17:00:08.514798Z",
  "executed_at": "2026-01-02T17:00:00Z",
  "settle_date": "2026-01-02",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "symbol": "AALG",
    "entitled_qty": "15",
    "rate": "0.2757555",
    "cash_payout": "4.1363325",
    "foreign": "false",
    "special": "false",
    "ex_date": "2025-12-30",
    "record_date": "2025-12-30",
    "system_date": "2026-01-02",
    "payable_date": "2026-01-02",
    "position_date": "2025-12-30"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "DIV",
  "activity_subtype": "SDIV",
  "qty": "0.002709921",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-02T17:00:08.514798Z",
  "executed_at": "2026-01-02T17:00:00Z",
  "settle_date": "2025-12-29",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "symbol": "SBS",
    "new_qty": "0.094116171",
    "entitled_qty": "0.09140625",
    "paid_qty": "0.002709921",
    "rate": "1.029647",
    "ex_date": "2025-12-29",
    "record_date": "2025-12-29",
    "system_date": "2026-01-02",
    "payable_date": "2026-01-02",
    "position_date": "2025-12-26"
  }
}
# Substitute payment in lieu of dividend
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "DIV",
  "activity_subtype": "SPD",
  "qty": "0",
  "price": "0",
  "currency": "",
  "net_amount": "-0.03",
  "status": "executed",
  "at": "2025-10-17T16:00:08.514798Z",
  "executed_at": "2025-10-17T16:00:00Z",
  "settle_date": "2025-10-17T00:00:00Z",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "symbol": "ULTY",
    "entitled_qty": "77",
    "rate": "0.000338",
    "cash_payout": "0.026026",
    "foreign": "false",
    "special": "true",
    "ex_date": "2025-10-16",
    "record_date": "2025-10-16",
    "system_date": "2025-10-17",
    "payable_date": "2025-10-17",
    "position_date": "2025-10-16",
    "due_bill_on_date": "2025-09-03",
    "due_bill_off_date": "2025-09-02"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "DIVNRA",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "-2.51",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-11T16:52:35.306606Z",
  "settle_date": "2026-02-11",
  "details": {
    "system_date": "2026-02-11"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "MA",
  "activity_subtype": "CMA",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "0.03",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T17:00:00Z",
  "settle_date": "2026-02-27",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "0.045366059",
    "cash_rate": "0.583043",
    "cash_payout": "0.03",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-27",
    "position_date": "2026-02-26",
    "effective_date": "2026-02-02"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "MA",
  "activity_subtype": "CMA",
  "qty": "-0.045366059",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T17:00:00Z",
  "settle_date": "2026-02-27",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "0.045366059",
    "cash_rate": "0.583043",
    "cash_payout": "0.03",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-27",
    "position_date": "2026-02-26",
    "effective_date": "2026-02-02"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "MA",
  "activity_subtype": "SMA",
  "qty": "-2000",
  "price": "0.8",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-25T05:00:00Z",
  "settle_date": "2026-02-25",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "2000",
    "acquirer_qty": "200",
    "acquiree_rate": "1",
    "acquirer_rate": "0.1",
    "system_date": "2026-02-25",
    "payable_date": "2026-02-25",
    "position_date": "2026-02-24",
    "effective_date": "2026-02-24"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "MA",
  "activity_subtype": "SMA",
  "qty": "200",
  "price": "8",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-25T05:00:00Z",
  "settle_date": "2026-02-25",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "2000",
    "acquirer_qty": "200",
    "acquiree_rate": "1",
    "acquirer_rate": "0.1",
    "system_date": "2026-02-25",
    "payable_date": "2026-02-25",
    "position_date": "2026-02-24",
    "effective_date": "2026-02-24"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "previous_id": "<PRID-1>",
  "activity_type": "MA",
  "activity_subtype": "SCMA",
  "qty": "0",
  "price": "0",
  "currency": "USD",
  "net_amount": "8.29",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-13T17:00:00Z",
  "settle_date": "2026-02-13",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "0.394803871",
    "acquirer_qty": "0.394803871",
    "cash_rate": "21",
    "acquiree_rate": "1",
    "acquirer_rate": "1",
    "cash_payout": "8.29",
    "system_date": "2026-02-13",
    "payable_date": "2026-02-13",
    "position_date": "2026-02-12",
    "effective_date": "2026-02-12"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "previous_id": "<PRID-2>",
  "activity_type": "MA",
  "activity_subtype": "SCMA",
  "qty": "-0.394803871",
  "price": "15.704",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-13T17:00:00Z",
  "settle_date": "2026-02-13",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "0.394803871",
    "acquirer_qty": "0.394803871",
    "cash_rate": "21",
    "acquiree_rate": "1",
    "acquirer_rate": "1",
    "cash_payout": "8.29",
    "system_date": "2026-02-13",
    "payable_date": "2026-02-13",
    "position_date": "2026-02-12",
    "effective_date": "2026-02-12"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-3>",
  "ref_id": "<REFID-3>",
  "previous_id": "<PRID-3>",
  "activity_type": "MA",
  "activity_subtype": "SCMA",
  "qty": "0.394803871",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-13T17:00:00Z",
  "settle_date": "2026-02-13",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "acquiree_qty": "0.394803871",
    "acquirer_qty": "0.394803871",
    "cash_rate": "21",
    "acquiree_rate": "1",
    "acquirer_rate": "1",
    "cash_payout": "8.29",
    "system_date": "2026-02-13",
    "payable_date": "2026-02-13",
    "position_date": "2026-02-12",
    "effective_date": "2026-02-12"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "NC",
  "activity_subtype": "SNC",
  "qty": "-7.30762391",
  "price": "328.77",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-26T17:00:00Z",
  "settle_date": "2026-02-26",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "RNA",
    "new_symbol": "RNAM",
    "position_qty": "7.30762391",
    "system_date": "2026-02-26",
    "position_date": "2026-02-25"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "NC",
  "activity_subtype": "SNC",
  "qty": "7.30762391",
  "price": "328.77",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-26T17:00:00Z",
  "settle_date": "2026-02-26",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "RNA",
    "new_symbol": "RNAM",
    "position_qty": "7.30762391",
    "system_date": "2026-02-26",
    "position_date": "2026-02-25"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "NC",
  "activity_subtype": "CNC",
  "qty": "-4.68546239",
  "price": "26.89",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-23T17:00:00Z",
  "settle_date": "2026-02-23",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "BRIF",
    "new_symbol": "BRIF",
    "position_qty": "4.68546239",
    "system_date": "2026-02-23",
    "position_date": "2026-02-20"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "NC",
  "activity_subtype": "CNC",
  "qty": "4.68546239",
  "price": "26.89",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-23T17:00:00Z",
  "settle_date": "2026-02-23",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "BRIF",
    "new_symbol": "BRIF",
    "position_qty": "4.68546239",
    "system_date": "2026-02-23",
    "position_date": "2026-02-20"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "NC",
  "activity_subtype": "SCNC",
  "qty": "1",
  "price": "0.1001",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-25T17:00:00Z",
  "settle_date": "2026-02-25",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "SVIWF",
    "new_symbol": "NUCLW",
    "position_qty": "1",
    "system_date": "2026-02-25",
    "position_date": "2026-02-24"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "NC",
  "activity_subtype": "SCNC",
  "qty": "-1",
  "price": "0.1001",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-25T17:00:00Z",
  "settle_date": "2026-02-25",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "SVIWF",
    "new_symbol": "NUCLW",
    "position_qty": "1",
    "system_date": "2026-02-25",
    "position_date": "2026-02-24"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "SPLIT",
  "activity_subtype": "FSPLIT",
  "qty": "-0.54796447",
  "price": "62.32",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T17:00:00Z",
  "settle_date": "2026-02-26",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3038297",
    "symbol": "SF",
    "old_qty": "0.54796447",
    "new_qty": "0.821946705",
    "old_rate": "1",
    "new_rate": "1.5",
    "ex_date": "2026-02-27",
    "record_date": "2026-02-12",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-26",
    "position_date": "2026-02-26",
    "due_bill_redemption_date": "2026-02-27"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "SPLIT",
  "activity_subtype": "FSPLIT",
  "qty": "0.821946705",
  "price": "41.5467",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T17:00:00Z",
  "settle_date": "2026-02-26",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3038297",
    "symbol": "SF",
    "old_qty": "0.54796447",
    "new_qty": "0.821946705",
    "old_rate": "1",
    "new_rate": "1.5",
    "ex_date": "2026-02-27",
    "record_date": "2026-02-12",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-26",
    "position_date": "2026-02-26",
    "due_bill_redemption_date": "2026-02-27"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "SPLIT",
  "activity_subtype": "RSPLIT",
  "qty": "-33",
  "price": "7",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T05:00:00Z",
  "settle_date": "2026-02-27",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3049682",
    "symbol": "XRPT",
    "old_qty": "33",
    "new_qty": "1.65",
    "old_rate": "20",
    "new_rate": "1",
    "ex_date": "2026-02-27",
    "record_date": "2026-02-27",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-27",
    "position_date": "2026-02-26"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "SPLIT",
  "activity_subtype": "RSPLIT",
  "qty": "1.65",
  "price": "140",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T05:00:00Z",
  "settle_date": "2026-02-27",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3049682",
    "symbol": "XRPT",
    "old_qty": "33",
    "new_qty": "1.65",
    "old_rate": "20",
    "new_rate": "1",
    "ex_date": "2026-02-27",
    "record_date": "2026-02-27",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-27",
    "position_date": "2026-02-26"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-1>",
  "ref_id": "<REFID-1>",
  "activity_type": "SPLIT",
  "activity_subtype": "USPLIT",
  "qty": "-8",
  "price": "26.31",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-17T17:00:00Z",
  "settle_date": "2026-02-17",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "CCCXU",
    "new_symbol": "INFQ",
    "alternate_symbol": "INFQ.WS",
    "old_qty": "8",
    "new_qty": "8",
    "alternate_qty": "2",
    "old_rate": "1",
    "new_rate": "1",
    "alternate_rate": "0.25",
    "system_date": "2026-02-17",
    "payable_date": "2026-02-17",
    "position_date": "2026-02-13",
    "effective_date": "2026-02-17"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-2>",
  "ref_id": "<REFID-2>",
  "activity_type": "SPLIT",
  "activity_subtype": "USPLIT",
  "qty": "8",
  "price": "26.31",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-17T17:00:00Z",
  "settle_date": "2026-02-17",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "CCCXU",
    "new_symbol": "INFQ",
    "alternate_symbol": "INFQ.WS",
    "old_qty": "8",
    "new_qty": "8",
    "alternate_qty": "2",
    "old_rate": "1",
    "new_rate": "1",
    "alternate_rate": "0.25",
    "system_date": "2026-02-17",
    "payable_date": "2026-02-17",
    "position_date": "2026-02-13",
    "effective_date": "2026-02-17"
  }
}

{
  "account_id": "<ACCID>",
  "event_id": "<EVTID-3>",
  "ref_id": "<REFID-3>",
  "activity_type": "SPLIT",
  "activity_subtype": "USPLIT",
  "qty": "2",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-17T17:00:00Z",
  "settle_date": "2026-02-17",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "CCCXU",
    "new_symbol": "INFQ",
    "alternate_symbol": "INFQ.WS",
    "old_qty": "8",
    "new_qty": "8",
    "alternate_qty": "2",
    "old_rate": "1",
    "new_rate": "1",
    "alternate_rate": "0.25",
    "system_date": "2026-02-17",
    "payable_date": "2026-02-17",
    "position_date": "2026-02-13",
    "effective_date": "2026-02-17"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "SPIN",
  "qty": "0.2",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T14:00:08.514798Z",
  "executed_at": "2026-02-27T17:00:00Z",
  "settle_date": "2026-02-26",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3044458",
    "new_symbol": "RNA",
    "source_symbol": "RNAM",
    "new_qty": "0.2",
    "source_qty": "2",
    "new_rate": "0.1",
    "source_rate": "1",
    "new_price": "0",
    "source_price": "72.82",
    "ex_date": "2026-02-27",
    "record_date": "2026-02-12",
    "system_date": "2026-02-27",
    "payable_date": "2026-02-26",
    "position_date": "2026-02-26",
    "due_bill_redemption_date": "2026-02-27"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "FIMAT",
  "qty": "-1000",
  "price": "100",
  "currency": "USD",
  "net_amount": "1000",
  "status": "executed",
  "at": "2026-01-15T17:00:08.514798Z",
  "executed_at": "2026-01-15T17:00:00Z",
  "settle_date": "2026-01-15",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "qty": "1000",
    "cash_payout": "1000",
    "system_date": "2026-01-15",
    "payment_date": "2026-01-15"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "VOF",
  "activity_subtype": "VDST",
  "qty": "9.975695601",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-12T17:00:08.514798Z",
  "executed_at": "2026-01-12T17:00:00Z",
  "settle_date": "2026-01-05",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3018482",
    "new_symbol": "HYT.RT",
    "source_symbol": "HYT",
    "new_qty": "9.975695601",
    "source_qty": "9.975695601",
    "rate": "1",
    "ex_date": "2026-01-02",
    "record_date": "2026-01-02",
    "system_date": "2026-01-12",
    "payable_date": "2026-01-05",
    "position_date": "2025-12-31",
    "expiration_date": "2026-01-26"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "REORG",
  "activity_subtype": "WRM",
  "qty": "-200",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-15T17:00:08.514798Z",
  "executed_at": "2026-01-15T17:00:00Z",
  "settle_date": "2026-01-15",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "symbol": "CLNNW",
    "removed_qty": "200",
    "system_date": "2026-01-15",
    "position_date": "2026-01-14"
  }
}
# options - non corporate action related types: OPASN, OPEXC, OPEXP, OPTRD
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPASN",
  "qty": "14",
  "price": "0",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-14T21:00:08.514798Z",
  "executed_at": "2026-01-14T21:00:00Z",
  "settle_date": "2026-01-14",
  "details": {
    "group_id": "<GRPID>",
    "system_date": "2026-01-14"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "DIV.CDIV",
  "qty": "1",
  "price": "0.06",
  "currency": "",
  "net_amount": "6",
  "status": "executed",
  "at": "2025-10-24T16:00:08.514798Z",
  "executed_at": "2025-10-24T16:00:00Z",
  "settle_date": "2025-10-24T00:00:00Z",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "symbol": "RYN",
    "old_contract_symbol": "RYN251121C00030000",
    "new_contract_symbol": "RYN1251121C00030000",
    "qty": "1",
    "rate": "1.4",
    "foreign": "false",
    "special": "true",
    "ex_date": "2025-10-24",
    "record_date": "2025-10-24",
    "system_date": "2025-10-24",
    "payable_date": "2025-12-12",
    "position_date": "2025-10-23"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "DIV.SDIV",
  "qty": "2",
  "price": "0.1942",
  "currency": "USD",
  "net_amount": "-40.01",
  "status": "executed",
  "at": "2025-12-29T17:00:08.514798Z",
  "executed_at": "2025-12-29T17:00:00Z",
  "settle_date": "2025-12-29",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3019202",
    "symbol": "ITUB",
    "old_contract_symbol": "ITUB260116C00008000",
    "new_contract_symbol": "ITUB2260116C00007770",
    "qty": "2",
    "rate": "1.03",
    "ex_date": "2025-12-29",
    "record_date": "2025-12-29",
    "system_date": "2025-12-29",
    "payable_date": "2025-12-31",
    "position_date": "2025-12-26"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "MA.SMA",
  "qty": "1",
  "price": "0.3",
  "currency": "USD",
  "net_amount": "-30",
  "status": "executed",
  "at": "2025-12-19T17:00:08.514798Z",
  "executed_at": "2025-12-19T17:00:00Z",
  "settle_date": "2025-12-18",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_contract_symbol": "BRY251219C00007500",
    "new_contract_symbol": "CRC1251219C00007500",
    "qty": "1",
    "acquiree_rate": "1",
    "acquirer_rate": "0.0718",
    "system_date": "2025-12-19",
    "payable_date": "2025-12-18",
    "position_date": "2025-12-18",
    "effective_date": "2025-12-18"
  }
}
# "NC.SCNC", "NC.CNC", "NC.SNC"
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "NC.SNC",
  "qty": "11",
  "price": "0.9364",
  "currency": "USD",
  "net_amount": "-1030.04",
  "status": "executed",
  "at": "2025-12-24T17:00:08.514798Z",
  "executed_at": "2025-12-24T17:00:00Z",
  "settle_date": "2025-12-24",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "old_symbol": "LAZR",
    "new_symbol": "LAZRQ",
    "old_contract_symbol": "LAZR270115C00003000",
    "new_contract_symbol": "LAZRQ270115C00003000",
    "qty": "11",
    "system_date": "2025-12-24",
    "position_date": "2025-12-23"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "SPIN",
  "qty": "1",
  "price": "0.45",
  "currency": "$USD",
  "net_amount": "-45",
  "status": "executed",
  "at": "2025-12-08T17:00:08.514798Z",
  "executed_at": "2025-12-08T17:00:00Z",
  "settle_date": "2025-12-08",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "new_symbol": "MICC",
    "source_symbol": "UL",
    "old_contract_symbol": "UL270115C00080000",
    "new_contract_symbol": "UL1270115C00080000",
    "qty": "1",
    "new_rate": "0.2",
    "source_rate": "1",
    "new_price": "14.89",
    "source_price": "59.48",
    "ex_date": "2025-12-08",
    "record_date": "2025-12-05",
    "system_date": "2025-12-08",
    "payable_date": "2025-12-08",
    "position_date": "2025-12-05"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "SPLIT.FSPLIT",
  "qty": "5",
  "price": "0.02",
  "currency": "USD",
  "net_amount": "-10",
  "status": "executed",
  "at": "2025-12-18T02:00:08.514798Z",
  "executed_at": "2025-12-18T17:00:00Z",
  "settle_date": "2025-12-17",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3011260",
    "symbol": "NOW",
    "old_contract_symbol": "NOW260102C01110000",
    "new_contract_symbol": "NOW260102C00222000",
    "old_qty": "1",
    "new_qty": "5",
    "old_rate": "1",
    "new_rate": "5",
    "ex_date": "2025-12-18",
    "record_date": "2025-12-16",
    "system_date": "2025-12-18",
    "payable_date": "2025-12-17",
    "position_date": "2025-12-17",
    "due_bill_redemption_date": "2025-12-18"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "OPCA",
  "activity_subtype": "SPLIT.RSPLIT",
  "qty": "1",
  "price": "0.25",
  "currency": "USD",
  "net_amount": "-25",
  "status": "executed",
  "at": "2025-12-30T02:00:08.514798Z",
  "executed_at": "2025-12-30T17:00:00Z",
  "settle_date": "2025-12-30",
  "details": {
    "ca_id": "<CAID>",
    "group_id": "<GRPID>",
    "reorg_id": "3023110",
    "symbol": "ACET",
    "old_contract_symbol": "ACET260417C00002500",
    "new_contract_symbol": "ACET1260417C00002500",
    "qty": "1",
    "old_rate": "16",
    "new_rate": "1",
    "ex_date": "2025-12-30",
    "record_date": "2025-12-30",
    "system_date": "2025-12-30",
    "payable_date": "2025-12-30",
    "position_date": "2025-12-29"
  }
}
{
  "account_id": "<ACCID>",
  "event_id": "<EVTID>",
  "ref_id": "<REFID>",
  "activity_type": "FOPT",
  "qty": "10",
  "price": "100",
  "currency": "USD",
  "net_amount": "0",
  "status": "executed",
  "at": "2026-01-14T02:00:08.514798Z",
  "executed_at": "2026-01-14T17:33:52.409539Z",
  "settle_date": "2026-01-14",
  "details": {
    "external_id": "DEF5GRE2E5CW1F09",
    "contra": "00000632",
    "symbol": "IBM",
    "system_date": "2026-01-14"
  }
}

Best Practices

Idempotent Processing

You may receive duplicate events during reconnection. Use ref_id as your deduplication key. Before applying an event, check if you have already processed an activity with that ref_id.

Reconnection Strategy

  • Implement automatic reconnection with exponential backoff.
  • Always reconnect using since_id set to the last successfully processed event_id.
  • When reconnecting for reconciliation purposes, set since to a few minutes before your last processed event's timestamp to account for potential ordering edge cases.

Account Scope

The Activity SSE streams events for all accounts under your correspondent, including firm accounts — not only customer accounts.

Message Ordering

  • Per-account ordering is guaranteed. If event E1 arrives before E2 for the same account, E1 happened first.
  • Cross-account ordering is NOT guaranteed. Use the at or event_id fields to determine ordering across accounts.

Event Ordering vs. Business Time

The event_id (ULID) and the at field encode different timestamps:

  • at is the business event timestamp — when the activity actually occurred in the source system.
  • event_id (ULID) encodes the publish sequence timestamp — when the event was appended to the internal activities stream. This governs the order in which events are delivered and replayed.

In normal operation these are nearly identical. However, they can diverge during infrastructure delays or backfills. If Alpaca backfills a historical activity, it will appear at the end of the event_id sequence (reflecting when it was published), even though its at value reflects the original business time.

The since and until query parameters filter by the business timestamp (at). A query with since=2026-01-15T00:00:00Z&until=2026-01-16T00:00:00Z returns events that may include activities whose event_id value is outside this range, and was only delivered later due to backfills..

For cursor-based replay, always use since_id with the last processed event_id. The since/until timestamp parameters are best suited for reconcilliation and broad historical queries, not for gap-free resumption. If you specify since, you also need to specify until - while since_id lets you leave the end date open, and transition to live consumption.

Timestamp Encoding

since and until parameters accept RFC 3339 timestamps with timezone. The + character in timezone offsets (e.g., +07:00) must be URL-encoded as %2B:

/v2beta1/events/activities?since=2026-01-02T15:04:05%2B07:00

Consumer Performance

If your consumer cannot keep up with the event rate, the server will drop messages and send a comment: : you are reading too slowly, dropped N messages. To avoid this:

  • Process events asynchronously — read from the stream into a buffer, and process from the buffer.
  • Avoid blocking I/O (e.g., synchronous database writes) in your stream reader loop.
  • For customers with large event volumes, we also offer sharded streaming. Please contact us.

SSE Delivery vs. Balance and Position Queries

The Activity SSE delivers events as soon as they are booked in the ledger. Balance and position queries (e.g., the Trading Account or Account Portfolio endpoints) may not reflect the activity immediately because they depend on separate intraday adjustment processes.

Do not assume that receiving an activity event means the account's balance or position has already been updated in query endpoints. If your workflow reacts to an SSE event by checking a balance, build in a polling or retry mechanism to account for the propagation delay.