getApplicationConfig is session-authenticated (call it after a user logs in). The five reporting methods are public: they need no session or key, and each selects its application by clientId — the same public client ID your frontend logs in with. An unknown or inactive client ID returns 404.
The reporting methods are rate limited per client IP: 60 requests per minute sustained, with a burst of 120. Over the limit the API returns 429 with a Retry-After header.
() => Promise<ApplicationConfigResponse>
Retrieve application configuration for the current client ID. Session-authenticated.Returns:
ApplicationConfigResponse:id: string — application UUIDname: string — application nameallowedOrigins: string[] — CORS-allowed originswebhookUrl?: string — webhook URL for event deliveryvaultContractAddress: string — vault contract address for this applicationclientId: string — application client ID, embedded in on-chain deposit calls
(params: ListAppOrdersParams) => Promise<ListAppOrdersResponse>
List orders placed by the application’s users. Public.Parameters:
params:ListAppOrdersParamsclientId: string — the application’s public client ID (required)pageSize?: number — items per page, 1 to 1000 (default 20); a larger value is rejectedpageToken?: string — cursor pagination. Omitted or""starts the walk; otherwise pass the previous response’snextPageToken. There is nopage: the SDK rejects one with aValidationErrorbefore sending, and a raw REST request carrying it gets400. The filters must match the request that minted the tokenstatus?: string — filter by order status (e.g.SUBMITTED,PARTIALLY_FILLED,FILLED,SETTLED,CANCELLED,EXPIRED,REJECTED)userId?: string — filter by user UUIDtradingPairId?: string — filter by trading pair UUIDside?: string — filter by side:BUYorSELLorderType?: string — filter by order type (e.g.LIMIT,MARKET,STOP_LOSS,TAKE_PROFIT,STOP_LIMIT,TRAILING_STOP)
ListAppOrdersResponse:orders:AppOrder[]— matching orderspageSize: number — items per pagenextPageToken: string — cursor for the next page,""once the walk is exhausted. Each page over-fetches one row, so an empty token is definitive: follow a non-empty token, stop on an empty one
(params: ListAppUsersParams) => Promise<ListAppUsersResponse>
List the application’s users. Public.Parameters:
params:ListAppUsersParamsclientId: string — the application’s public client ID (required)pageSize?: number — items per page, 1 to 1000 (default 20); a larger value is rejectedpageToken?: string — cursor pagination. Omitted or""starts the walk; otherwise pass the previous response’snextPageToken. There is nopage: the SDK rejects one with aValidationErrorbefore sending, and a raw REST request carrying it gets400. The filters must match the request that minted the tokenisActive?: boolean — filter by active statusaccountType?: string — filter by account type:masterorsubaddress?: string — filter by wallet address (partial match, case-insensitive)
ListAppUsersResponse:users:AppUser[]— matching userstotal: number — users matching the filter, bounded by the server count ceilingpageSize: number — items per pagetotalPages: number — pages at thispageSize, bounded by the same ceilingnextPageToken: string — cursor for the next page,""once the walk is exhausted. Each page over-fetches one row, so an empty token is definitive: follow a non-empty token, stop on an empty onetotalCapped: boolean —truewhen more than the server ceiling matched, sototal/totalPagesare a lower bound
created_at is nullable on this table, so it cannot be a total cursor key, and excluding the rows without one would hide users from the listing an application reconciles against.(params: ListAppMovementsParams) => Promise<ListAppMovementsResponse>
List ledger movements (deposits, withdrawals, trades, fees, etc.) for the application’s users. Public.Parameters:
params:ListAppMovementsParamsclientId: string — the application’s public client ID (required)pageSize?: number — items per page, 1 to 1000 (default 20); a larger value is rejectedpageToken?: string — cursor pagination. Omitted or""starts the walk; otherwise pass the previous response’snextPageToken. There is nopage: the SDK rejects one with aValidationErrorbefore sending, and a raw REST request carrying it gets400. The filters must match the request that minted the tokenuserId?: string — filter by user UUIDtransactionType?: string — filter by transaction type (e.g.DEPOSIT,WITHDRAWAL,TRADE,FEE,FUNDING,LIQUIDATION,INTEREST,REWARD)entryType?: string — filter by entry type (e.g.CREDIT,DEBIT,LOCK,UNLOCK,FEE)assetId?: string — filter by asset UUID
ListAppMovementsResponse:movements:AppMovement[]— matching movementspageSize: number — items per pagenextPageToken: string — cursor for the next page,""once the walk is exhausted. Each page over-fetches one row, so an empty token is definitive: follow a non-empty token, stop on an empty one
(params: ListAppBalancesParams) => Promise<ListAppBalancesResponse>
List user balances held within the application. Public.Parameters:
params:ListAppBalancesParamsclientId: string — the application’s public client ID (required)pageSize?: number — items per page, 1 to 1000 (default 20); a larger value is rejectedpageToken?: string — cursor pagination. Omitted or""starts the walk; otherwise pass the previous response’snextPageToken. There is nopage: the SDK rejects one with aValidationErrorbefore sending, and a raw REST request carrying it gets400. The filters must match the request that minted the tokenuserId?: string — filter by user UUIDassetId?: string — filter by asset UUID
ListAppBalancesResponse:balances:AppBalance[]— matching balancestotal: number — balances matching the filter, bounded by the server count ceilingpageSize: number — items per pagetotalPages: number — pages at thispageSize, bounded by the same ceilingnextPageToken: string — cursor for the next page,""once the walk is exhausted. Each page over-fetches one row, so an empty token is definitive: follow a non-empty token, stop on an empty onetotalCapped: boolean —truewhen more than the server ceiling matched, sototal/totalPagesare a lower bound
updatedAt, which the removed page-number mode sorted on: that column changes on every balance movement, so a walk over it could repeat or skip rows with no concurrent insert at all.(params: GetAppStatsParams) => Promise<GetAppStatsResponse>
Fetch aggregate volume and fee metrics for an application. Public.Stats are scoped to trades where this application’s users were the taker.Parameters:
params:GetAppStatsParamsclientId: string — the application’s public client ID (required)since?: string — ISO 8601 datetime, e.g."2026-01-01T00:00:00Z". Omit for all-time
GetAppStatsResponse:volume: string — total quote volume (normalized, human-readable)makerFee: string — total maker fees collectedtakerFee: string — total taker fees collectedapplicationTakerFee: string — application revenue share from taker feestradeCount: number — total number of trades

