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.
| Filter | What it does | Example |
|---|---|---|
recordDate | Events with this record date, YYYY-MM-DD in Eastern Time. | GET /events?recordDate=2024-01-15 |
pastRecordDate | Events 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 |
cusip | Comma-separated CUSIPs, 15 at most. | GET /events?cusip=037833100,037833101 |
isin | Comma-separated ISINs, 15 at most. | GET /events?isin=US0378331005 |
ticker | Comma-separated tickers, 15 at most. | GET /events?ticker=AAPL,TSLA |
eventType | Proxy, Regulatory or Voluntary Corporate Actions. | GET /events?eventType=Proxy |
eventStatus | Active, Upcoming, Cancelled or Completed. | GET /events?eventStatus=Active |
votingLinksActive | true for events where voting is open now. | GET /events?recordDate=2024-01-15&votingLinksActive=true |
limit | Events 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:
{
"hasMore": true,
"nextCursor": "64f8a1b2c3d4e5f6a7b8c9d2",
"limit": 25
}
To read every matching event:
- Make the first call with your filters, for example
GET /events?recordDate=2024-01-15&limit=25. - If
pagination.hasMoreistrue, call again with the same filters pluscursorset topagination.nextCursor, for exampleGET /events?recordDate=2024-01-15&limit=25&cursor=64f8a1b2c3d4e5f6a7b8c9d2. - Repeat until
pagination.hasMoreisfalse.
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 /eventswith no filters already includes them. To combine them with other filters, pass today's date aspastRecordDate. - An earlier day: use
pastRecordDate, for exampleGET /events?pastRecordDate=2024-01-14. - To catch everything each day: call
GET /eventswith no filters, or sendrecordDateandpastRecordDatetogether.
Date fields
All dates and times are in Eastern Time. Any of these except recordDate may be null.
| Field | Format | Meaning |
|---|---|---|
recordDate | YYYY-MM-DD | The record date. Holders on this date are entitled to vote. |
createDate | YYYY-MM-DD | The date the event was created in VOTR. |
meetingDate | Date | The meeting date. |
votingOpenDateTime | ISO 8601 timestamp | When voting became available. |
votingDeadline | ISO 8601 timestamp | When voting ends. |
shareholderReportingDeadline | ISO 8601 timestamp | The 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.
limitandcursordo not count as filters, so paginating keeps this default. Pass any other parameter and the default no longer applies, so includerecordDateexplicitly if you want a date filter. - Use
pastRecordDateto 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 returns400. With today's date you get the events created so far today, so call again later in the day to pick up new ones. recordDateandpastRecordDatetogether 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: truerequires all of: final docs confirmed, statusActive, and the deadline not yet passed.