Claim referral rewards
POST /v1/accounts/{externalUserId}/referral-claims
Use body.all = true to claim all eligible settled, unclaimed rewards in one action. UTC-day ledger records remain separate. Acceptance does not mean the payout has settled.
Referrals and rewards guide · All endpoints · SDK: claimReferralRewards, claimAll
Authentication
Server-to-server HMAC. Your key selects the partner; your backend must authorize the end user.
CRISP enables access to the features agreed for your integration. Contact CRISP if an enabled feature returns an access error.
Idempotency-Key: Required — persist one key per intent. Signing and authentication →
Request fields
Required means the field must be present. Nullable means an explicit JSON null is allowed; it does not mean optional.
Path parameters
| Field | Type / presence | Description and constraints |
|---|---|---|
externalUserId | stringRequired Non-null | Your stable user ID within the authenticated partner. Derive it from your authorized server session. Validation pattern^[A-Za-z0-9._:@-]{1,200}$ |
Query parameters
None.
Header parameters
| Field | Type / presence | Description and constraints |
|---|---|---|
Idempotency-Key | stringRequired Non-null | Validation pattern^[A-Za-z0-9._:-]{8,200}$ |
JSON body
Exactly one variant must match.
Variant 1 · object
| Field | Type / presence | Description and constraints |
|---|---|---|
all | booleanRequired Non-null | Allowed: true |
Additional fields are not allowed in this object.
Variant 2 · object
| Field | Type / presence | Description and constraints |
|---|---|---|
feeDay | stringRequired Non-null | Format: date |
Additional fields are not allowed in this object.
Request example
Illustrative identifiers only: replace them with resources from your integration. Keep credentials on your backend. HTTP placeholders must be signed; the SDK signs automatically. Financial intent keys must be persisted and unique per new action.
POST /v1/accounts/user-123/referral-claims
Host: partner-api.crisp.trade
X-Crisp-Partner-Key: <server-key-id>
X-Crisp-Timestamp: <fresh-ISO-8601-UTC-timestamp>
X-Crisp-Nonce: <fresh-unique-nonce>
X-Crisp-Signature: <computed-base64-HMAC>
Idempotency-Key: persisted-intent-0001
Content-Type: application/json
{
"all": true
}Alternative request: Variant 2
POST /v1/accounts/user-123/referral-claims
Host: partner-api.crisp.trade
X-Crisp-Partner-Key: <server-key-id>
X-Crisp-Timestamp: <fresh-ISO-8601-UTC-timestamp>
X-Crisp-Nonce: <fresh-unique-nonce>
X-Crisp-Signature: <computed-base64-HMAC>
Idempotency-Key: persisted-intent-0001
Content-Type: application/json
{
"feeDay": "2026-09-01"
}Response fields
HTTP responses use the envelope below. SDK calls expose its payload as result.data, with HTTP status and request metadata on the SDK wrapper.
202 · Accepted; inspect lifecycle state. This is not proof of a fill or payout.
Accepted for processing, not proof of a fill, completed provisioning or settled payout. Inspect resource state and follow the recovery guide.
Data payload
Any listed variant may match.
Variant 1 · object
| Field | Type / presence | Description and constraints | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
claims | array<object>Required Non-null | Expand the structure below. | |||||||||||||||||||||||||||||||||||||||||||||
claims: expand item fields
Additional fields are not allowed in this object. | |||||||||||||||||||||||||||||||||||||||||||||||
amountUsdc | stringRequired Non-null | Exact decimal string. Never use floating point for ledger arithmetic. Validation pattern^\d+(?:\.\d+)?$ | |||||||||||||||||||||||||||||||||||||||||||||
dayCount | integerRequired Non-null | minimum: 0 | |||||||||||||||||||||||||||||||||||||||||||||
Additional fields are not allowed in this object.
Variant 2 · object
| Field | Type / presence | Description and constraints | |||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
claim | objectRequired Non-null | Expand the structure below. | |||||||||||||||||||||||||||||||||||||||||||||
claim: expand fields
Additional fields are not allowed in this object. | |||||||||||||||||||||||||||||||||||||||||||||||
Additional fields are not allowed in this object.
Full HTTP envelope
| Field | Type / presence | Description and constraints | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
data | objectRequired Non-null | Expand the structure below. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data: expand variantsAny listed variant may match. Variant 1 · object
Additional fields are not allowed in this object. Variant 2 · object
Additional fields are not allowed in this object. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
requestId | stringRequired Non-null | Request correlation ID for debugging and support. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Additional fields are not allowed in this object.
Response example
Schema illustration, not live account data. Null means unavailable or not applicable, never an invented zero. Empty arrays do not imply the endpoint always returns no results.
202 response JSON
{
"data": {
"claims": [],
"amountUsdc": "0.40",
"dayCount": 0
},
"requestId": "example-request-id"
}Errors and recovery
| Status | Meaning |
|---|---|
400 | Inspect error.code and retain the original financial intent. |
401 | Inspect error.code and retain the original financial intent. |
403 | Inspect error.code and retain the original financial intent. |
404 | Not visible for this account. A recovery lookup miss is not proof that an in-flight submission failed. |
409 | Inspect error.code and retain the original financial intent. |
429 | Inspect error.code and retain the original financial intent. |
500 | Inspect error.code and retain the original financial intent. |
502 | Inspect error.code and retain the original financial intent. |
503 | Inspect error.code and retain the original financial intent. |
Inspect the error code and outcomeUnknown, not just the HTTP status. Preserve the original intent after financial uncertainty. Read-only retries should honor Retry-After. Recovery workflow →
Error response fields
| Field | Type / presence | Description and constraints | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
error | objectRequired Non-null | Expand the structure below. | ||||||||||||
error: expand fields
Additional fields are not allowed in this object. | ||||||||||||||
Additional fields are not allowed in this object.