Skip to main content

GET Members

List your partner's members, including revoked members. Results are ordered by creation time descending, then external_id descending. Use GET Member for one member and its current ETag.

Endpoint​

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

Headers​

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

Query parameters​

NameTypeRequiredDescription
limitintegerNoPage size, 1–200. Default: 50
cursorstringNoOpaque next_cursor from the previous page. Omit on the first request

No request body. Unknown or repeated query parameters are rejected.

Code examples​

Set PARTNER_TOKEN to your service's access token. These examples read the first page; pass its next_cursor on subsequent requests until it is null.

import json
import os
import requests

response = requests.get(
"https://app.crosstrade.io/v1/api/partner/users",
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. Each item uses the member object. Lists do not return an ETag.

{
"success": true,
"members": [
{
"external_id": "th_8831",
"uid": "k3Qz9pLa",
"email": "member@example.com",
"name": "Jamie Rivera",
"status": "connected",
"ownership_verified": true,
"version": 1,
"environments": [
"demo"
],
"metadata": {},
"seat": {
"started": "2026-10-15T14:02:11Z",
"ended": null
},
"created": "2026-10-15T14:02:11Z",
"authorization": {
"status": "exchanged",
"flow_id": "pcf_a1b2c3d4e5f6",
"purpose": "authorize",
"generation": 1
},
"grant": {
"version": 1,
"active": true
}
}
],
"next_cursor": null,
"as_of": "2026-10-16T10:00:00Z",
"events_high_water": 42,
"meta": {
"requestId": "preq_9a8b7c6d5e4f3a21"
}
}
FieldMeaning
membersMember records on this page; an empty array when none remain
next_cursorOpaque continuation token, or null on the last page
as_ofUTC time of the read
events_high_waterEvent sequence captured before reading member state

To recover from 410 cursor_expired on GET Events, retain events_high_water from the first member-list page, reconcile all pages, then resume events from that value. Do not replace it with a later page's high-water mark.

Errors​

StatusErrorMeaning
400validation_failedInvalid cursor, limit, query parameter or unexpected body
401unauthorizedInvalid partner token
403insufficient_scope, partner_not_enabled, partner_disabledScope or service policy refuses the read
429rate_limited, too_many_concurrent_requestsHonor Retry-After
503storage_unavailable, policy_unavailable, auth_unavailable, partner_api_unavailableRetry with backoff

See Partner errors for response shapes.