Skip to main content

Events

Two operations on this surface: GET /events lists events filtered by record date, status, CUSIP, ticker, etc.; GET /events/{eventId} fetches a single event — primarily to check votingLinksActive before showing a "Vote Now" button.

Filters​

All filters on GET /events are optional query parameters and can be combined.

FilterWhat it doesExample
recordDateEvents with this record date, YYYY-MM-DD in Eastern Time.GET /events?recordDate=2024-01-15
pastRecordDateEvents created on this date whose record date had already passed, YYYY-MM-DD in Eastern Time. Today or any earlier date; a future date returns 400.GET /events?pastRecordDate=2024-01-14
cusipComma-separated CUSIPs, 15 at most.GET /events?cusip=037833100,037833101
isinComma-separated ISINs, 15 at most.GET /events?isin=US0378331005
tickerComma-separated tickers, 15 at most.GET /events?ticker=AAPL,TSLA
eventTypeProxy, Regulatory or Voluntary Corporate Actions.GET /events?eventType=Proxy
eventStatusActive, Upcoming, Cancelled or Completed.GET /events?eventStatus=Active
votingLinksActivetrue for events where voting is open now.GET /events?recordDate=2024-01-15&votingLinksActive=true
limitEvents per page. Default and maximum are both 25.GET /events?eventStatus=Active&limit=10

With no filters, GET /events returns events whose record date is today, plus events created today whose record date had already passed. limit and cursor do not count as filters.

This default, like pastRecordDate set to today, is a snapshot at the moment you call: an event created later the same day shows up only in a later call. Call again later in the day to pick up late additions. The day changes at midnight Eastern Time; after that, yesterday's set is available by sending recordDate and pastRecordDate with yesterday's date.

Sending recordDate and pastRecordDate together returns both sets: an event is included if it matches either one, for example GET /events?recordDate=2024-01-15&pastRecordDate=2024-01-14.

Pagination​

Results come back in pages of up to 25 events, with a pagination object:

pagination object
{
"hasMore": true,
"nextCursor": "64f8a1b2c3d4e5f6a7b8c9d2",
"limit": 25
}

To read every matching event:

  1. Make the first call with your filters, for example GET /events?recordDate=2024-01-15&limit=25.
  2. If pagination.hasMore is true, call again with the same filters plus cursor set to pagination.nextCursor, for example GET /events?recordDate=2024-01-15&limit=25&cursor=64f8a1b2c3d4e5f6a7b8c9d2.
  3. Repeat until pagination.hasMore is false.

Events created after their record date​

Sometimes an event is added to VOTR after its record date has passed. If you check recordDate each day, you won't see these events: they didn't exist yet when you checked.

You can spot them because createDate is later than recordDate. To find them, filter on the date they were created:

  • Today: GET /events with no filters already includes them. To combine them with other filters, pass today's date as pastRecordDate.
  • An earlier day: use pastRecordDate, for example GET /events?pastRecordDate=2024-01-14.
  • To catch everything each day: call GET /events with no filters, or send recordDate and pastRecordDate together.

Date fields​

All dates and times are in Eastern Time. Any of these except recordDate may be null.

FieldFormatMeaning
recordDateYYYY-MM-DDThe record date. Holders on this date are entitled to vote.
createDateYYYY-MM-DDThe date the event was created in VOTR.
meetingDateDateThe meeting date.
votingOpenDateTimeISO 8601 timestampWhen voting became available.
votingDeadlineISO 8601 timestampWhen voting ends.
shareholderReportingDeadlineISO 8601 timestampThe latest time you can submit Shareholders for this event.

Tips​

  • A call with no filters returns today's events plus late-created ones. You get events whose record date is today (ET), and events that were created today but whose record date had already passed. limit and cursor do not count as filters, so paginating keeps this default. Pass any other parameter and the default no longer applies, so include recordDate explicitly if you want a date filter.
  • Use pastRecordDate to pick up events created after their record date. It returns events that were created on the date you pass and whose record date was already earlier than that date. Today or any earlier date is accepted; a future date returns 400. With today's date you get the events created so far today, so call again later in the day to pick up new ones.
  • recordDate and pastRecordDate together return both sets. An event is included if it matches either one.
  • Pagination keeps your filters. When following pagination.nextCursor, repeat the same filter set on each request.
  • votingLinksActive: true requires all of: final docs confirmed, status Active, and the deadline not yet passed.
Loading playground…