Skip to main content

GET Events

Read member, authorization, broker and partner lifecycle changes in ascending sequence order. Use this durable feed to poll for changes or recover missed webhook deliveries. Trading fills, positions and order rejections are read through the Trading API instead.

Endpoint​

GET https://app.crosstrade.io/v1/api/partner/events

Headers​

NameRequiredValue
AuthorizationYesBearer <partner access token> with partner:read (also implied by partner:provision)

Query parameters​

NameTypeRequiredDescription
cursorintegerNoLast processed sequence, at least 0. Returns events strictly after it. Omit to start at the oldest retained event
limitintegerNoPage size, 1–200. Default: 50

No request body. Unknown or repeated query parameters are rejected. Unlike member-list cursors, this cursor is an integer, not an opaque string. There is no event-type filter parameter; filter type in your application.

Code examples​

Set PARTNER_TOKEN. These examples read the first retained page. After processing it durably, save next_cursor and pass it as cursor on the next request.

import json
import os
import requests

response = requests.get(
"https://app.crosstrade.io/v1/api/partner/events",
headers={"Authorization": f"Bearer {os.environ['PARTNER_TOKEN']}"},
params={"limit": 50},
timeout=15,
)
response.raise_for_status()
print(json.dumps(response.json(), indent=2))

Response​

200 OK. Optional attribution fields are included here; records omit them when unavailable.

{
"success": true,
"events": [
{
"id": "pev_3f9a1c2b4d5e6f70",
"sequence": 41,
"version": 1,
"type": "member.created",
"created": "2026-10-15T14:02:11Z",
"partner_id": "p_8f1c2d3e",
"external_id": "th_8831",
"uid": "k3Qz9pLa",
"client_id": "xt_ci_example",
"data": {
"status": "provisioned",
"version": 1
}
}
],
"next_cursor": 41,
"floor": 0,
"high_water": 41,
"has_more": false,
"as_of": "2026-10-15T14:03:00Z",
"meta": {
"requestId": "preq_7a6b5c4d3e2f1a09"
}
}
FieldMeaning
events[].idStable event id, shared with webhook retries; deduplicate by this value
events[].sequenceIncreasing, gap-free sequence within your partner's event history
events[].versionEvent schema version, currently 1
events[].type, dataEvent name and type-specific details; see event types
events[].created, partner_idChange timestamp and owning partner
events[].external_idMember id when available; can be null for partner and authorization notices
events[].uid, client_id, grant_versionOptional feed attribution fields; webhook bodies omit these
next_cursorSequence to request after; unchanged on an empty page
floorHighest pruned sequence. A cursor below it has expired
high_waterLatest sequence captured before reading this page
has_moreMore events remain within this page's captured high-water mark
as_ofUTC time of the read

When has_more is true, fetch another page with cursor=next_cursor. When it is false, retain the cursor and poll later. next_cursor remains an integer even when no events remain; it does not become null.

Expired cursor recovery​

Events are retained for at least 30 days. Unresolved webhook deliveries can keep older events available. On 410 cursor_expired:

  1. Request the first page of GET Members and save its events_high_water.
  2. Reconcile every member-list page into your local state, retaining the first page's high-water mark.
  3. Resume this feed using that saved value as cursor, deduplicating events as needed.

Using a later page's high-water mark can skip changes that happened during the listing. See Events and webhooks for webhook signatures, delivery behavior and the event catalog.

Errors​

StatusErrorMeaning
400validation_failedInvalid limit, negative cursor, cursor above high_water, unsupported query parameter or unexpected body
401unauthorizedInvalid partner token
403insufficient_scope, partner_not_enabled, partner_disabledScope or service policy refuses the read
410cursor_expiredCursor is below the retained floor; reconcile members before resuming
429rate_limited, too_many_concurrent_requestsHonor Retry-After
503policy_unavailable, auth_unavailable, partner_api_unavailableRetry with backoff

See Partner errors for response shapes.