GET
List / browse events

Authorizations

X-API-Key
string
header
required

ISV / partner credential — public half. Required on every request.

Identifies the integration partner (ISV) making the call. Issued by Dime Trades when the ISV is onboarded and sent on every /partner/* endpoint:

  • On the two partner endpoints that create accounts or issue tokens (POST /partner/customers, POST /partner/customers/login), it is accompanied by X-API-Secret and is the only authentication — there is no user token yet.
  • On every other partner endpoint it is sent alongside the user's Authorization: Bearer <token>: the API key says which platform is calling, the bearer token says which user it is calling for.

Credentials are scoped to one or more brands; using a key with a brandId outside that scope returns 403. Staging and production keys are separate. The key identifies your platform — treat it as a backend credential.

Query Parameters

categoryId
string

Restrict to one category (e.g. Sports, Crypto). Digits only, as a string.

Pattern: ^[0-9]+$
Example:

"32"

subcategoryId
string

Restrict to one subcategory. Includes descendants — passing a parent subcategory id (e.g. Metals) also returns events filed under its children (Gold, Silver). The expansion is one level deep. Passing a leaf id returns only that leaf.

Crypto subcategories are per-asset (BTC, ETH, … each have their own id), so this is also the correct way to scope a request to a single asset.

Pattern: ^[0-9]+$
marketGroupId
string

Restrict each returned event's markets to one sport-scoped category/tab (e.g. "Player Props") — the id from GET /market-groups. This filters markets only, never which events appear — every event in the page still shows up regardless of category, only the contents of its markets array change. An event with no markets in the requested group (which is every non-sports event, since their marketGroupId is always null and can never match) comes back with markets: [] rather than being dropped from the page.

Pattern: ^[0-9]+$
Example:

"48"

Only events flagged as trending.

isNew
boolean

Only events flagged as new.

isFuture
enum<string>
default:false

Whether to return future events. Which kind of future depends on the category the call is scoped to: under Sports it means season-long outrights (Championship Winner, MVP), and everywhere else it means a round published in advance whose target is revealed at open. Defaults to false when omitted, so ordinary calls see neither. Unscoped calls with true return both sets. Prefer the unambiguous isFutureTradable for the pre-reveal rounds.

Send all to drop the future/non-future split entirely: the response mixes regular and future events in one listing, and each event's own isFuture / isFutureTradable flags tell you which is which. Use it with a multi-value status to read everything in one call.

Available options:
true,
false,
all
isFutureTradable
enum<string>
default:false

Whether to return pre-reveal rounds — published in advance and tradable before their window, with the target still TBD until open. Unlike isFuture this never means a sports outright, whatever the call is scoped to, and it takes precedence when both are sent. Defaults to false when omitted. Also accepts all, with the same meaning as for isFuture.

Available options:
true,
false,
all
showOnTop
boolean

Only events pinned to the top by an administrator.

status
string

Filter by event lifecycle status. open is the only status whose markets accept orders.

Takes one status or a comma-separated list — status=open,pending,live,halted returns events in any of them. Use exact lowercase values with no spaces around the commas; an unknown value, an empty item (open,) or a space (open, live) returns 400. Omit it to apply no status filter.

Two things change when you send a list that includes live: events are ordered live first and then by openAt ascending, and sortBy / sortOrder are not applied. And open events are still held to the usual open window (not yet closed, or flagged future) even in a mixed list — it is the other statuses that pass straight through.

Pattern: ^(pending|open|live|halted|closed|settled|expired|terminated)(,(pending|open|live|halted|closed|settled|expired|terminated))*$
Examples:

"open"

"open,pending,live,halted"

sortBy
enum<string>

Sort field. volume sorts by live traded volume (the volume response field, not totalVolume); openAt sorts by scheduled open time, which is what you usually want alongside isFuture=true; closeAt sorts by scheduled close time. The date sorts honour sortOrder and default to ascending.

Available options:
volume,
openAt,
closeAt
sortOrder
enum<string>

Sort direction, applied to sortBy.

Available options:
asc,
desc
cadence
enum<string>

Restrict to events issued on a given cadence. Cadence is a property of the event (metaData.cadence), not of its category or subcategory — one subcategory typically runs several cadences at once, so pair this with subcategoryId to isolate a single recurring series.

The enum below is the canonical set: every value this endpoint accepts is one an event can carry, and vice versa. The /subcategories cadence menu offers the same values.

A cadence describes a recurring window. Markets that happen once — a sports fixture, an IPO announcement, a company's KPI report — carry no metaData.cadence at all and cannot be reached through this filter. See EventMetaData.cadence.

Available options:
5min,
10min,
15min,
1hr,
daily,
weekly,
monthly,
quarterly,
yearly,
season,
per_meeting,
annual_release,
per_release,
election
marketType
enum<string>

Filter by event classification. Supported values are standard, leaderboard, and short_market. short_market means a market with a duration of 15 minutes or less. The filter combines with every other filter, for example marketType=leaderboard&cadence=15min.

Available options:
standard,
leaderboard,
short_market
minVolume
string
default:0

Exclude events whose volume is below this threshold.

Only takes effect when sortBy=volume is also sent. Without it the parameter is accepted and then silently ignored — minVolume=999999 alone still returns the full catalogue. Always pair the two: ?sortBy=volume&minVolume=1.

Pattern: ^[0-9]+$
page
integer
default:1

1-based page number (integer). Standardized across all endpoints.

limit
integer
default:10

Page size (integer). Standardized across all endpoints. There is no server-side maximum — the value is passed straight through, so a large limit returns a correspondingly large payload (the whole catalogue in one response if you ask for it). Keep it to a sane page size. limit=0 is accepted and falls back to the default of 10 rather than returning an empty page.

Response

Events returned. errors is present and empty on success — it is not an error indicator on its own; use the HTTP status.

data
object
errors
array