Events #

Events API provide event push as well as historical queries via SSE.

Some notes for Events Streaming

  • If until is specified, since is required.
  • If until_id is specified, since_id is required.
  • Both since and since_id cannot be specified.
  • If until or until_id is specified and the stream reaches to the end of queried range, the server disconnects the stream.
  • Historical events are streamed immediately if queried, and updates are pushed as events occur.

Account Status #

You can listen to events related to change of account status, usually when sending in POST/accounts requests.

GET /v1/events/accounts/status

Request #

Parameters #

Attribute Type Requirement Notes
id string
Optional
since string/date
Optional
Format: YYYY-MM-DD
until string/date
Optional
Format: YYYY-MM-DD
since_id int
Optional
until_id int
Optional

Response #

Sample Response #

data: {
  "account_id":"4db36989-6565-4011-9126-39fe6b3d9bf6",
  "account_number":"",
  "at":"2021-06-14T09:59:15.232782Z",
  "crypto_status_from":"SUBMITTED",
  "crypto_status_to":"APPROVED",
  "event_id":122039,
  "kyc_results":null,
  "status_from":"SUBMITTED",
  "status_to":"APPROVED"
  }

data: {
  "account_id":"4db36989-6565-4011-9126-39fe6b3d9bf6",
  "account_number":"937975699",
  "at":"2021-06-14T09:59:15.558338Z",
  "crypto_status_from":"APPROVED",
  "crypto_status_to":"ACTIVE",
  "event_id":122040,
  "kyc_results":null,
  "status_from":"APPROVED",
  "status_to":"ACTIVE"
  }

data: {
    "account_id": "081781bb-a9a0-4bde-bd65-e14b703e092b",
    "account_number": "932473536",
    "at": "2021-06-14T10:00:00.000000Z",
    "crypto_status_from":"SUBMITTED",
    "crypto_status_to":"ACTION_REQUIRED",
    "event_id": 122041,
    "kyc_results": {
        "reject": {},
        "accept": {},
        "indeterminate": {
            "TAX_IDENTIFICATION": {}
        },
        "summary": "fail"
    },
    "status_from": "SUBMITTED",
    "status_to": "ACTION_REQUIRED"
}

{
  "account_id": "d9615f1c-3a2b-3b55-8f6e-0afb69c1e8c7",
  "account_number": "1234563SW",
  "admin_configurations": {
    "incoming_transfers_blocked": false,
    "outgoing_transfers_blocked": false
  },
  "at": "2022-12-12T11:52:18.983824Z",
  "event_id": 9,
  "kyc_results": null,
  "status_from": "APPROVED",
  "status_to": "APPROVED"
}

{
  "account_id": "d9615f1c-3a2b-3b55-8f6e-0afb69c1e8c7",
  "account_number": "1234563SW",
  "at": "2022-12-12T11:54:04.438328Z",
  "event_id": 12,
  "kyc_results": null,
  "pattern_day_trader": true,
  "status_from": "APPROVED",
  "status_to": "APPROVED"
}

Parameters #

Attribute Type Notes
account_id string UUID
admin_configurations AdminConfigurations Changed administrative flags
account_number string Human readable
at string Timestamp of event
crypto_status_from string Account crypto_status changed from
crypto_status_to string Account crypto_status changed to
event_id int monotonically increasing 64bit integer
kyc_results KYCResults Results of KYC if applicable. Can be nullable.
status_from string Account status changed from
status_to string Account status changed to
reason string Optional
pattern_day_trader bool If true the pattern_day_trader flag was set for the account, if false, the flag was reset.
account_blocked bool If true the account was blocked, if false, the account got unblocked
trading_blocked bool If true the account cannot trade going forward, if false, the ban has been lifed

KYCResults #

For partners who utilize Alpaca’s KYC service for opening brokerage accounts the results of the CIP check will be returned via the kyc_results object. If an account’s status is set to REJECTED, ACTION_REQUIRED, or APPROVAL_PENDING the specific KYC results that may require action from your end user will wind up in ACCEPT, INDETERMINATE, or REJECT.

Attribute Type Notes
ACCEPT ENUM.KYCResultType No further action required on the specific KYCResultType(s) returned in this field
INDETERMINATE ENUM.KYCResultType Must be resolved by your end user, can be appealed by uploading new documents or by updating accounts on the Account API
REJECT ENUM.KYCResultType The KYCResultType(s) have been rejected due to insufficient or unsatisfactory documentation provided
additional_information string Used to display a custom message.
summary ENUM.KYCResultSummaryType Either pass or fail. Used to indicate if KYC has completed and passed or not. This field is used for internal purposes only.

ENUM.KYCResultType #

The following result codes may return for a CIP check.

Attribute Notes
IDENTITY_VERIFICATION Identity needs to be verified
TAX_IDENTIFICATION Tax ID number needs to be verified
ADDRESS_VERIFICATION Address needs to be verified
DATE_OF_BIRTH Date of birth needs to be verified
INVALID_IDENTITY_PASSPORT Identity needs to be verified via a government issued ID. This is commonly used in conjuction with OTHER to describe the exact document needed.
SELFIE_VERIFICATION Identity needs to be verified via a live selfie of the account owner
PEP Further information needs to be submitted if account owner is politically exposed person
FAMILY_MEMBER_PEP Further information needs to be submitted if family member is a politically exposed person
CONTROL_PERSON Further information needs to be submitted if account owner is a control person
AFFILIATED Further information needs to be submitted if account owner is affiliated to finra or an exchange
VISA_TYPE_OTHER Further information needs to be submitted about account owner’s visa
W8BEN_CORRECTION Idenfitying information submitted by the user was incorrect so a new, corrected, W8BEN needs to be submitted
COUNTRY_NOT_SUPPORTED The account owner’s country of tax residence is not supported by our KYC providers. In this case, we’ll manully perform KYC on the user
WATCHLIST_HIT Results from the watchlist screening need further investigation before account opening. No action is needed from the user
OTHER A custom message will be sent to describe exactly what is needed from the account owner. The message will be displayed in the additional_information attribute.
OTHER_PARTNER A custom message will be sent to relay information relevant only to the partner. The message will be displayed in the additional_information attribute.

Appeal #

The table below shows the documents required to appeal the various CIP rejection reasons:

Result Code Government Issued ID Card Tax ID Card Statement (utility bill, etc.) Selfie
IDENTITY_VERIFICATION
Required
- - -
TAX_IDENTIFICATION -
Required
- -
ADDRESS_VERIFICATION
Required
-
Optional
-
DATE_OF_BIRTH
Required
- - -
SELFIE_VERIFICATION - - -
Required

The table below shows the additional information required to appeal the various CIP rejection reasons:

Result Code Additional information required
PEP Job title / occupation and address
FAMILY_MEMBER_PEP Name of politically exposed person if immediate family
CONTROL_PERSON Company name, company address, and company email
AFFILIATED Company / firm name, company / firm address, company / firm email
VISA_TYPE_OTHER Visa type and expiration date
W8BEN_CORRECTION An updated W8BEN form with corrected information
OTHER For specific cases our operational team might return with a customized message within the additional_information attribute.

Admin Configurations #

For the detailed list of Admin Configurations please see the Accounts page.

For the events interface we are only broadcasting changes to admin configurations. In case nothing changed for a flag that will not be included in unrelated update events.

Depending on the type of the Admin Configurations the sent event will behave differently. For bool flags we are only sending the new value.

For example the following payload means, that the disable_shorting flag was set to true from false:

{
  "disable_shorting": false
}

For other data types, we are embeding the old and new values into the payload. For example changing the max_margin_multiplier from 4 to 1 will yield this payload:

{
  "max_margin_multiplier": {
    "old": 4,
    "new": 1,
  }
}

Introducing an override value from the default will yield a null value as old. For example restricting the max_margin_multipler to 1 from default will yield the following payload:

{
  "max_margin_multiplier": {
    "old": null,
    "new": 1,
  }
}

Trade Updates #

You can listen to events related to trade updates.

Most market trades sent during market hours are filled instantly; you can listen to limit order updates through this endpoint.

GET /v2beta1/events/trades

Request #

Parameters #

Attribute Type Requirement Notes
since string
Optional
Format: YYYY-MM-DD or 2006-01-02T15:04:05Z (RFC3339)
until string
Optional
Format: YYYY-MM-DD or 2006-01-02T15:04:05Z (RFC3339)
since_id ULID
Optional
until_id ULID
Optional

Message ordering #

For the messages received on the SSE stream we guarantee that the order of the received events is the same as the order they were happening on a per account basis.

Example: if event E1 has been received earlier then another event E2 for the same account, then E1 happened before E2 according to our bookkeeping.

We do not have this guarantee across accounts: if two events for different accounts are received it is the consumer’s responsibility to decide which event happened first based on the timestamp/ulid fields of the event.

Example: E1 happened for account A1 before E2 which was affecting A2. The streaming endpoint might return the events in E1, E2 or E2, E1 ordering. Both responses should be considered valid.

Note: since ULIDs contain a random part other events might have arrived in the same millisecond as the last event received being lexiographicly less than the previous event.

If the stream is used for recon purposes, we recommend to restart the stream from a since that is a few mintues before the time of latest event received.

This approach means that the consumer will receive some events twice when restarting a stream: it is the consumer’s responsibility to process the recevied messages in an idempotent manner so that duplicate messages get ignored on the consumer side.

Note: since and until parameters are parsing as RFC3339 where timezone can be specified (e.g 2006-01-02T15:04:05+07:00), however plus sign character (+) is a special character in HTTP, so use the URL encoded version instead, e.g. ...events/trades?since=2006-01-02T15:04:05%2B07:00

Response #

Sample Response #

data:
  {
    "account_id":"c8f1ef5d-edc0-4f23-9ee4-378f19cb92a4",
    "at":"2021-06-14T10:04:05.172241Z",
    "event":"new",
    "event_id": "01F84ZMVNMS3Z9140YCKV7H0Z1",
    "execution_id":"a829b698-da07-479f-91e6-f204c77573fc",
    "order":{
      "asset_class":"us_equity",
      "asset_id":"b0b6dd9d-8b9b-48a9-ba46-b9d54906e415",
      "canceled_at":null,
      "client_order_id":"d6499947-dacd-4f85-a728-81734dc39c27",
      "commission":"1.1",
      "created_at":"2021-06-14T10:04:05.150255Z",
      "expired_at":null,
      "extended_hours":false,
      "failed_at":null,
      "filled_at":null,
      "filled_avg_price":null,
      "filled_qty":"0",
      "hwm":null,
      "id":"d507255a-b072-4fb7-96f3-9ad5a9c02b2a",
      "legs":null,
      "limit_price":null,
      "notional":"10",
      "order_class":"",
      "order_type":"market",
      "qty":null,
      "replaced_at":null,
      "replaced_by":null,
      "replaces":null,
      "side":"buy",
      "status":"new",
      "stop_price":null,
      "submitted_at":"2021-06-14T10:04:05.0937Z",
      "symbol":"AAPL",
      "time_in_force":"day",
      "trail_percent":null,
      "trail_price":null,
      "type":"market",
      "updated_at":"2021-06-14T10:04:05.165088Z"
    },
    "timestamp": "2021-06-14T10:04:05.172241Z"
  }

Parameters #

Attribute Type Notes
account_id string The UUID of the account
at string/timestamp Timestamp of event
event string See the Trading Events Enum for more details
event_id ULID The ID of the event is represented as ULID. The timestamp component can be used to sort the events based on time.
execution_id string Corresponding execution of an order. If an order gets filled over two executions (a partial_fill for example), you will receive two events with different IDs.
order Order See the Orders page for more details
timestamp string/timestamp Has various different meanings depending on the value of event, please see the Trading Events Enum for more details on when it means different things
The following Parameters are only present when event is either fill or partial_fill #
Attribute Type Notes
price string The average price per share at which the order was filled.
position_qty string The size of your total position, after this fill event, in shares. Positive for long positions, negative for short positions.
qty string The amount of shares this Trade order was for

Legacy trade events API #

The legacy trade events API is available for compatibility reasons at:

GET /v1/events/trades

Broker partners are recommended to upgrade to the /v2beta1/events/trades endpoint, which provides faster event delivery times.

The legacy trade events api works the same way as the new one with the exception of the event_id which is an integer except of an ULID. This results in the request’s since_id and until_id are also being integers. This integer is monotonically increasing over time for events.

Trade Events #

Common events

These are the events that are the expected results of actions you may have taken by sending API requests.

The meaning of the timestamp field changes for each type; the meanings have been specified here for which types the timestamp field will be present.

  • new: Sent when an order has been routed to exchanges for execution.
  • fill: Sent when your order has been completely filled.
    • timestamp: The time at which the order was filled.
  • partial_fill: Sent when a number of shares less than the total remaining quantity on your order has been filled.
    • timestamp: The time at which the shares were filled.
  • canceled: Sent when your requested cancellation of an order is processed.
    • timestamp: The time at which the order was canceled.
  • expired: Sent when an order has reached the end of its lifespan, as determined by the order’s time in force value.
    • timestamp: The time at which the order expired.
  • done_for_day: Sent when the order is done executing for the day, and will not receive further updates until the next trading day.
  • replaced: Sent when your requested replacement of an order is processed.
    • timestamp: The time at which the order was replaced.

Rarer events

These are events that may rarely be sent due to unexpected circumstances on the exchanges. It is unlikely you will need to design your code around them, but you may still wish to account for the possibility that they will occur.

  • rejected: Sent when your order has been rejected.
    • timestamp: The time at which the rejection occurred.
  • accepted
  • held For multi-leg orders, the secondary orders (stop loss, take profit) will enter this state while waiting to be triggered.
  • pending_new: Sent when the order has been received by Alpaca and routed to the exchanges, but has not yet been accepted for execution.
  • stopped: Sent when your order has been stopped, and a trade is guaranteed for the order, usually at a stated price or better, but has not yet occurred.
  • pending_cancel: Sent when the order is awaiting cancellation. Most cancellations will occur without the order entering this state.
  • pending_replace: Sent when the order is awaiting replacement.
  • calculated: Sent when the order has been completed for the day - it is either filled or done_for_day - but remaining settlement calculations are still pending.
  • suspended: Sent when the order has been suspended and is not eligible for trading.
  • order_replace_rejected: Sent when the order replace has been rejected.
  • order_cancel_rejected: Sent when the order cancel has been rejected.

Journal Status #

You can listen to journal status updates as they get processed by our backoffice.

GET /v1/events/journals/status

Request #

Parameters #

Attribute Type Requirement Notes
id string
Optional
since string
Optional
Format: YYYY-MM-DD
until string
Optional
Format: YYYY-MM-DD
since_id int
Optional
until_id int
Optional

Response #

Sample Response #

data: {
  "at":"2021-05-07T10:28:23.163857Z",
  "entry_type":"JNLC",
  "event_id":1406,
  "journal_id":"2f144d2a-91e6-46ff-8e37-959a701cc58d",
  "status_from":"",
  "status_to":"queued"
  }

data: {
  "at":"2021-05-07T10:28:23.468461Z",
  "entry_type":"JNLC",
  "event_id":1407,
  "journal_id":"2f144d2a-91e6-46ff-8e37-959a701cc58d",
  "status_from":"queued",
  "status_to":"pending"
  }

data: {
  "at":"2021-05-07T10:28:23.522047Z",
  "entry_type":"JNLC",
  "event_id":1408,
  "journal_id":"2f144d2a-91e6-46ff-8e37-959a701cc58d",
  "status_from":"pending",
  "status_to":"executed"
  }

Parameters #

Attribute Type Notes
at string Timestamp of event
entry_type string JNLC or JNLS
event_id int Monotonically increasing 64bit integer
journal_id string The UUID of the journal
status_from string Journal status
status_to string Journal status

Transfer Events #

You can listen to transfer status updates as they get processed by our backoffice, for both end-user and firm accounts.

For more on what those transfer statuses represent please click here.

GET /v1/events/transfers/status

Request #

Parameters #

Attribute Type Requirement Notes
id string
Optional
since string/date
Optional
Format: YYYY-MM-DD
until string/date
Optional
Format: YYYY-MM-DD
since_id int
Optional
until_id int
Optional

Response #

Sample Response #

data: {"account_id":"8e00606a-c9ac-409a-ba45-f55e8f77984a","at":"2021-06-10T19:49:12.579109Z","event_id":15960,"status_from":"","status_to":"QUEUED","transfer_id":"c4ed4206-697b-4859-ab71-b9de6649859d"}

data: {"account_id":"8e00606a-c9ac-409a-ba45-f55e8f77984a","at":"2021-06-10T19:52:24.066998Z","event_id":15961,"status_from":"QUEUED","status_to":"SENT_TO_CLEARING","transfer_id":"c4ed4206-697b-4859-ab71-b9de6649859d"}

data: {"account_id":"8e00606a-c9ac-409a-ba45-f55e8f77984a","at":"2021-06-10T20:02:24.280178Z","event_id":15962,"status_from":"SENT_TO_CLEARING","status_to":"COMPLETE","transfer_id":"c4ed4206-697b-4859-ab71-b9de6649859d"}

Parameters #

Attribute Type Notes
account_id string Account UUID
at string Timedate of when the transfer status changed
event_id string Monotonically increasing 64bit integer
status_from string Transfer status
status_to string Transfer status
transfer_id string Transfer UUID

Non Trading Activities Events #

You can listen to when NTAs are pushed such as CSDs, JNLC (journals) or FEEs.

GET /v1/events/nta

Request #

Parameters #

Attribute Type Requirement Notes
id string
Optional
since string/date
Optional
Format: YYYY-MM-DD
until string/date
Optional
Format: YYYY-MM-DD
since_id int
Optional
until_id int
Optional
include_preprocessing boolean
Optional

Response #

Parameters #

Read more on what Non Trade Activities Events mean and the fields they include here.

Sample Responses #

Cash Dividend #

{
  "id": "{GUID}",
  "qty": 0,
  "price": null,
  "status": "executed",
  "symbol": "BNDX",
  "entry_type": "DIV",
  "net_amount": 0.01,
  "description": "Cash DIV @ 0.0541, Pos QTY: 0.131126008, Rec Date: 2022-11-02",
  "settle_date": "2022-11-04",
  "system_date": "2022-11-04",
  "per_share_amount": 0.0541
}

Stock Dividend #

{
  "id": "{GUID}",
  "qty": 0.60001863,
  "price": null,
  "status": "executed",
  "symbol": "CIG",
  "entry_type": "DIV",
  "net_amount": 0,
  "description": "Stock DIV @ 0.3, Pos QTY: 2.000062113, Rec Date: 2022-05-03",
  "settle_date": "2022-05-20",
  "system_date": "2022-05-24",
  "per_share_amount": 0.3
}

Special Cash Dividend #

{
  "id": "{GUID}",
  "qty": 0,
  "price": null,
  "status": "executed",
  "symbol": "FLNG",
  "entry_type": "DIV",
  "net_amount": 200,
  "description": "Special Cash DIV @ 0.50, Pos QTY: 400, Rec Date: 2022-09-08",
  "settle_date": "2022-09-13",
  "system_date": "2022-09-13",
  "per_share_amount": null
}

DIVNRA #

{
  "id": "{GUID}",
  "qty": 0,
  "price": null,
  "status": "executed",
  "symbol": "NHI",
  "entry_type": "DIVNRA",
  "net_amount": -0.03,
  "description": "DIV tax withholding on $0.2 at 15% for tax country THA; w8w9: w8",
  "settle_date": "2022-11-04",
  "system_date": "2022-11-04",
  "per_share_amount": null
}

SPLIT #

Received as 2 events.

{
  "id": "{GUID}",
  "qty": -15,
  "price": 0,
  "status": "executed",
  "symbol": "DBGI",
  "entry_type": "SPLIT",
  "net_amount": 0,
  "description": "REMOVE, From QTY:100, To QTY:1, Position Value:0",
  "settle_date": "2022-11-04",
  "system_date": "2022-11-04",
  "per_share_amount": null
}
{
  "id": "{GUID}",
  "qty": 0.15,
  "price": 0,
  "status": "executed",
  "symbol": "DBGI",
  "entry_type": "SPLIT",
  "net_amount": 0,
  "description": "ADD, From QTY:100, To QTY:1, Position Value:0",
  "settle_date": "2022-11-04",
  "system_date": "2022-11-04",
  "per_share_amount": null
}

SPIN #

{
  "id": "{GUID}",
  "qty": 0.000085109,
  "price": null,
  "status": "executed",
  "symbol": "OABI",
  "entry_type": "SPIN",
  "net_amount": 0,
  "description": "Target Symbol: OABI, Initiating Symbol: LGND, 4.90007 OABI for each 1 LGND",
  "settle_date": "2022-11-02",
  "system_date": "2022-11-03",
  "per_share_amount": null
}

Cash Merger #

{
  "id": "{GUID}",
  "qty": -1.319800728,
  "price": null,
  "status": "executed",
  "symbol": "CYBE",
  "entry_type": "MA",
  "net_amount": 71.27,
  "description": "Cash Merger $54.00 per share",
  "settle_date": "2022-11-04",
  "system_date": "2022-11-04",
  "per_share_amount": null
}

Stock Merger #

{
  "id": "{GUID}",
  "qty": -1.333333333,
  "price": null,
  "status": "executed",
  "symbol": "USWS",
  "entry_type": "MA",
  "net_amount": 0,
  "description": "Stock Merger 0.3366 PFHC for 1 USWS",
  "settle_date": "2022-11-02",
  "system_date": "2022-11-02",
  "per_share_amount": null
}

Reorganisation #

{
  "id": "{GUID}",
  "qty": 0,
  "price": null,
  "status": "executed",
  "symbol": "EPZM",
  "entry_type": "MA",
  "net_amount": 342.2,
  "description": "Reorganization $1.45 per share",
  "settle_date": "2022-08-17",
  "system_date": "2022-08-17",
  "per_share_amount": null
}

Other examples of REORG: #

Ex1:

{
  "id": "{GUID}", 
  "qty": -2550, 
  "price": null, 
  "status": "executed", 
  "symbol": "HEPS", 
  "entry_type": "REORG",
  "net_amount": 0, 
  "description": "ADR Cancellation - BNY Mellon - Physical Certificates Sent to Client - Symbol HEPS", "settle_date": "2023-01-17", "system_date": "2023-01-17", 
  "per_share_amount": null
  }

Ex2:

{
  "id": "{GUID}", 
  "qty": -13.826006069, 
  "price": null, 
  "status": "executed", 
  "symbol": "023CNT017", 
  "entry_type": "REORG", 
  "net_amount": 0, 
  "description": "Worthless Security Removal", 
  "settle_date": "2023-01-12", 
  "system_date": "2023-01-12", 
  "per_share_amount": null
  }

Ex3:

{
  "id": "{GUID}", 
  "qty": 1, 
  "price": null, 
  "status": "executed", 
  "symbol": "728RGT010", 
  "entry_type": "REORG", 
  "net_amount": 0, 
  "description": "Plby Group Inc (PLBY) rights distribution - expiration 01/17/23",
  "settle_date": "2022-12-29", 
  "system_date": "2023-01-09", 
  "per_share_amount": null
  }

Ex4:

{
  "id": "{GUID}", 
  "qty": 1, 
  "price": null, 
  "status": "executed", 
  "symbol": "368CVR015", 
  "entry_type": "REORG", 
  "net_amount": 0, 
  "description": "Reorganisation 1 368CVR015 for 1 GMTX", 
  "settle_date": "2022-12-30", 
  "system_date": "2022-12-30", 
  "per_share_amount": null
  }

Ex5 (in this case you shouldn’t do anything since it was canceled):

{
  "id": "{GUID}", 
  "qty": 200, 
  "price": null, 
  "status": "canceled", 
  "symbol": "MMTLP", 
  "entry_type": "REORG", 
  "net_amount": 0, 
  "description": "Stock Merger 1591994371 for 1 MMTLP", 
  "settle_date": "2022-12-30", 
  "system_date": "2022-12-30", 
  "per_share_amount": null
  }

Ex6:

{
  "id": "{GUID}", 
  "qty": 0, 
  "price": null, 
  "status": "executed", 
  "symbol": "PDLI", 
  "entry_type": "REORG", 
  "net_amount": 87.68, 
  "description": "Partial Liquidation $0.21 per share + interest", 
  "settle_date": "2022-11-15", 
  "system_date": "2022-12-13", 
  "per_share_amount": null
  }

REG FEE #

{
  "id": "{GUID}", 
  "qty": 0, 
  "status": "executed", 
  "symbol": "", 
  "entry_type": "FEE", 
  "net_amount": -0.01, 
  "description": "REG fee for proceed of $0.87 on 2021-06-03 by {Account Number}", 
  "settle_date": "2021-06-07", 
  "system_date": "2021-06-03", 
  "per_share_amount": null
  }

TAF FEE #

{
  "id": "{GUID}", 
  "qty": 0, 
  "status": "executed", 
  "symbol": "", 
  "entry_type": "FEE", 
  "net_amount": -0.02, 
  "description": "TAF fee for proceed of 114 shares (2 trades) on 2021-06-03 by {Account Number}",
  "settle_date": "2021-06-07", 
  "system_date": "2021-06-03", 
  "per_share_amount": null
  }
Edit Edit this page