This is the reference page you'll keep open in the other tab — error shapes, status codes, validation rules, and the deployment-level limits that shape what your integration can do.
DELETE, POST /users/USERID/terms first-time acceptance
400
Bad Request
Malformed JSON, bad query params
401
Unauthorized
JWT missing/invalid, sub ≠ USERID
402
Payment Required
Insufficient balance (parlays)
404
Not Found
Bad UUID, INDIVIDUAL ISV reading /wallets without sub
409
Conflict
Duplicate user, stale terms version, push already registered, non-zero balance on delete
422
Unprocessable
Field validation, KYC pending, insufficient liquidity, immutable field touched
500
Internal Server Error
Unhandled backend failure
3. Common error codes
code
HTTP
Triggered by
user_already_exists
409
POST /users — identity hash (name + DOB + SSN) collides
user_not_found
404
Any user-scoped path with an unknown UUID
user_pending_kyc
409/422
GET /users/USERID before the user is verified (409), or trying to trade before KYC has resolved (422)
non_zero_balance
409
DELETE /users/USERID while balance > 0 (INDIVIDUAL ISVs)
stale_terms
409
POST /users/USERID/terms with an out-of-date totalVersion
INVALID_CONTRACT
400/422
Unknown or stale contractId on order endpoints
internal_server_error
500
Unhandled backend failure
4. Request validation rules
CreateUserRequest
Field
Rule
firstName, lastName
Required, non-empty. Immutable.
dateOfBirth
Required. YYYY-MM-DD. Age 19–125. Immutable.
ssnLastDigits
Required. Exactly 4 numeric digits. Immutable.
addressLine1, city
Required.
state
Required. 2-letter USPS code.
zip
Required. 5–10 chars.
countryCode
Required. ISO 3166 alpha-2.
phoneNumber
Optional. If given, 10 numeric digits, unformatted.
email
Optional. If given, valid email format.
emailVerifiedAt
Required. UTC timestamp.
phoneVerifiedAt
Optional. UTC timestamp.
UpdateUserRequest
Same field-level rules as above, but all fields are optional, and firstName / lastName / dateOfBirth / ssnLastDigits must not appear. Including any of them returns 422.
EstimateMarketOrderRequest
Field
Rule
contractId
Required.
quantity
Required. >= 0 (use 0 to peek the best price).
SubmitMarketOrderRequest
Field
Rule
contractId
Required.
quantity
Required. > 0 (strict).
CreateParlayRequest
Field
Rule
legs
Required. 2–12 items.
legs[].eventId, marketId, outcomeId
Required. > 0.
legs[].contractId
Required.
legs[].strike
Optional (spreads/totals).
quantity
Required. > 0.
ConfirmParlayRequest
Field
Rule
quantity
Required. > 0. Must not exceed offer.maxQuantity from the quote.
AcceptTermsRequest
Field
Rule
totalVersion
Required. > 0.
GET /wallets/transactions query
Field
Rule
limit
Optional. Integer in 1..200. Defaults to 50.
before
Optional. Integer. Pass nextCursor from a previous response.