2xx codes. Client errors return 4xx codes with a JSON body that explains what went wrong. Server errors return 5xx. Every error response contains at minimum an "error" key with a human-readable string.
Error response format
limit, window_seconds, and retry_after_seconds. The 400 response for an invalid role includes the list of allowed values in allowed_roles.
Error codes
| Status | Name | Description |
|---|---|---|
400 | Bad Request | Missing required field or invalid parameter value |
401 | Unauthorized | Missing or invalid authentication credentials |
403 | Forbidden | Credentials are valid but access is denied |
404 | Not Found | The requested player or club does not exist |
429 | Too Many Requests | Rate limit exceeded; see retry_after_seconds |
500 | Internal Server Error | Unexpected server-side error |
400 Bad Request
The request was well-formed but contained a missing or invalid parameter. Common"error" values:
"player_id is required"— you omitted theplayer_idfield"club_id is required"— you omitted theclub_idfield"Invalid player_id"— theplayer_idvalue failed format validation"Invalid target_club_id"— thetarget_club_idvalue failed format validation"Invalid contract_end_date, must be in the format YYYY-MM-DD"— date string is malformed"currency_code must be a string"— wrong type passed forcurrency_code"Invalid role"— therolequery parameter is not a recognised SquadAssist role; the response also includes"allowed_roles"listing valid values"At least one of transfermarkt_id or wyscout_id or squadassist_id must be provided"—POST /query_playerrequires at least one ID field"Body must be a JSON object"— request body is not a JSON object
YYYY-MM-DD for dates).
401 Unauthorized
Your request did not include valid credentials, or the credentials have been revoked. Common"error" values:
"Missing API key"— no API key was found inx-api-keyorAuthorizationheaders"Invalid API key"— the key was found but does not match any active key in the system, or the key length is outside the valid range"API key is revoked"— the key was valid but has been revoked"Invalid email or password"— credentials supplied toPOST /auth/loginare incorrect
x-api-key: <key> or Authorization: Bearer <key>). If your key was recently generated, verify you are using the raw key value and not an ID or hash. If you receive "API key is revoked", contact SquadAssist to issue a replacement key.
403 Forbidden
Your credentials are valid but you are not permitted to perform this action. Common"error" values:
"Account access denied: <reason>"— your account is inactive, still in the registered (unactivated) state, or your plan does not grant access"Player is not in the allowed leagues"— the player you requested is outside the leagues covered by your plan"Requested club is not allowed"— theclub_idyou provided is not in the set of clubs in your coverage
/get_roi_analysis, /get_future_transfer_value, or /get_sportive_impact), the API returns 403 with a message indicating the player’s analysis is not ready. The player’s data is present but analysis_available is false for that record. To check availability before running analysis, call GET /player_info first.
Troubleshooting: If you receive an account access denied error, check your account status and plan with SquadAssist.
404 Not Found
The resource you requested does not exist in the SquadAssist database. Common"error" values:
"Player not found"— no player matches the providedplayer_id,transfermarkt_id, orwyscout_id"Club not found"— no club matches the providedclub_idortransfermarkt_id
POST /query_player or POST /query_club to resolve IDs from Transfermarkt or Wyscout to SquadAssist IDs before calling analysis endpoints. A 404 is distinct from a 403 for player visibility — a 404 means the player is genuinely not in the database.
429 Too Many Requests
You have exceeded the rate limit of 60 requests per minute for your API key.retry_after_seconds before retrying. Do not retry immediately — the window is rolling and a premature retry will return another 429. See Rate limits for strategies to avoid hitting this limit.
