Partner Tiers and Progress Rewards
What this page solves
Read tier state and conditions, then inspect the compensation associated with progress rewards.
When to use it
Use this workflow when showing qualification information or reconciling a progress-reward record with its order-level detail.
Before you start
Use an active signed API key and the access required by the selected operation. See Authentication and Partnership permissions. Read access is required. Obtain tier_id from tier state or tier conditions; obtain compensation_id from the progress-reward list. Lot commission requires the symbol and account_type parameters documented in API Reference.
Recommended flow
- 1Read current tier state and qualification tier.
- 2Read tier conditions using
pageandpage_sizewhen paging, then read the applicable fix-per-lot matrix. The matrix can be empty. - 3Read lot commission for the selected symbol and account type when needed.
- 4List progress-reward records.
- 5Use a returned compensation ID to inspect detailed calculations.
Reading tier conditions
Each tier has a conditions array containing its qualification conditions. When commission is returned, it groups percentages by reward formula. Each percentage array contains the first-level value followed by the second-level value; preserve null when a percentage is unavailable.
Main endpoints
- GET
/v1/partnership/partner-tier/partner-state— Retrieves the current tier, qualification progress, and grace-period state. - GET
/v1/partnership/partner-tier/tier-conditions— Lists qualification requirements for each partner tier. - GET
/v1/partnership/partner-tier/tier/{tier_id}/fix-per-lot-matrix— Retrieves tier-specific fixed-per-lot matrices by instrument group. - GET
/v1/partnership/lot-commission— Retrieves commission-calculator per-lot rates by account type, instrument, and tier. - GET
/v1/partnership/reports/progress-reward— Lists progress-reward records with tier movement and compensation values. - GET
/v1/partnership/reports/progress-reward/{compensation_id}/detailed— Retrieves order-level reward-rate calculations for a progress-reward record.
Example request
Request-shape example; replace the authentication placeholders with a fresh signature.
GET /v1/partnership/reports/progress-reward HTTP/1.1
Host: <your-api-host>
EXN-API-KEY: <your-api-key>
EXN-TIMESTAMP: <fresh-unix-milliseconds>
EXN-SIGN-VERSION: 1
EXN-DATA: <base64url-signed-data>
EXN-SIGN: <base64url-signature>
What to expect in return
HTTP 200 returns compensation records and totals. commission_percentage is an object of account categories, each with numeric old_tier and new_tier. payment_date records a payment-status update and does not itself confirm a successful payout.
{
"data": [
{
"compensation_id": 1,
"payment_date": "2026-07-30T10:30:00Z",
"compensation_period_start": "2026-07-30T10:30:00Z",
"compensation_period_end": "2026-07-30T10:30:00Z",
"old_tier_group_id": 1,
"new_tier_group_id": 1,
"compensation_amount": 123.45,
"commission_percentage": {
"pro": {
"old_tier": 17,
"new_tier": 18
}
}
}
],
"totals": {
"count": 1,
"ab_test_enabled": true
}
}
Common errors
The following errors apply to the example operation. Other operations can declare a different subset; follow their API Reference links.
| HTTP status / code | What It Means | How to Fix It |
|---|---|---|
429 / Throttled | A Partnership operation rate limit was exceeded. | Slow down the request rate and honor Retry-After when it is returned. |
504 / ServiceTransportError | A service required by the Partnership operation could not be reached or timed out. | Retry the request with exponential backoff. |
500 / Error | A Partnership operation failed because a required service could not complete the request. | Retry the request with backoff. |
401 / AuthenticationFailed | A Partnership service rejected the authenticated request after request authentication. API-key and request-signature failures use the numeric authentication errors. | Check the request authorization context. When the response uses the numeric envelope, follow the action for its error_message. |
403 / PermissionDenied | The authenticated identity cannot perform the operation or access the requested partner data. | Use credentials with the required Partnership permission and resource access. |
400 / ValidationError | Request validation failed, including bad-request or conflict conditions returned as validation errors. | Do not retry unchanged. Correct the request using details, then sign the corrected request again. |
404 / NotFound | The resource does not exist or is not available to the partner. | Verify the identifier and current resource list. |
502 / 1 — SYSTEM_BAD_GATEWAY | The API could not complete the request to the Partnership service. | Retry the request with backoff. |
503 / 2 — SYSTEM_TEMPORARY_UNAVAILABLE | A required service is temporarily unavailable or the request deadline was exceeded. | Retry the request with backoff. |
500 / 3 — SYSTEM_INTERNAL_ERROR | The API encountered an unexpected internal error. | Retry the request with backoff. |
401 / 1000 — AUTH_INVALID_API_KEY | The API key is invalid, expired, revoked, or not allowed for the request source. | Check the API key, its state, and its allowed source IP. |
401 / 1001 — AUTH_INVALID_SIGNATURE | The request signature or signed timestamp is invalid. | Rebuild the signature from the exact request and a fresh timestamp. |
403 / 1002 — AUTH_FORBIDDEN | The API key does not have a required operation scope. | Use an API key with the required Partnership scope. |
429 / 1003 — AUTH_RATE_LIMIT | The authentication rate limit was exceeded. | Honor Retry-After and reduce request rate. |
400 / 3001 — REQUEST_INVALID_PARAMETERS | Required headers or signed request data are malformed or inconsistent. | Correct the headers or signed values named by description, then sign the exact request again. |
Recovery and reconciliation
Preserve compensation IDs when reconciling detail. Current and qualification tier can differ.
A record in the progress-reward list can relate to a rejected payment; do not count its presence or date as proof that money was paid. The contract specifies no delivery-time SLA.