Skip to main content

Error Handling

Semaswift uses standard HTTP status codes and provides detailed error information to help you diagnose issues.

Error Response Format

{
"code": 400,
"message": "Validation failed",
"error_code": "VALIDATION_ERROR",
"details": [
{
"field": "email",
"message": "Invalid email format"
},
{
"field": "password",
"message": "Password must be at least 8 characters"
}
],
"request_id": "req_abc123xyz"
}

HTTP Status Codes

Success Codes (2xx)

CodeDescription
200 OKRequest succeeded
201 CreatedResource created successfully
204 No ContentSuccess with no response body

Client Error Codes (4xx)

CodeDescription
400 Bad RequestInvalid request parameters
401 UnauthorizedAuthentication required or failed
403 ForbiddenInsufficient permissions
404 Not FoundResource does not exist
409 ConflictResource conflict (e.g., duplicate)
422 Unprocessable EntityValidation error
429 Too Many RequestsRate limit exceeded

Server Error Codes (5xx)

CodeDescription
500 Internal Server ErrorUnexpected server error
502 Bad GatewayUpstream service error
503 Service UnavailableTemporary maintenance
504 Gateway TimeoutUpstream service timeout

Error Codes Reference

Authentication Errors

CodeHTTPDescriptionResolution
AUTH_001401Invalid credentialsCheck email/password
AUTH_002401Token expiredRefresh your token
AUTH_003401Token invalidRe-authenticate
AUTH_004403Account disabledContact support
AUTH_005403MFA requiredComplete MFA verification
AUTH_006429Too many login attemptsWait and retry

Authorization Errors

CodeHTTPDescriptionResolution
AUTHZ_001403Permission deniedRequest access from admin
AUTHZ_002403Resource not accessibleCheck organization membership
AUTHZ_003403Action not allowedCheck role permissions

Validation Errors

CodeHTTPDescriptionResolution
VAL_001400Required field missingProvide required fields
VAL_002400Invalid field formatCheck field format
VAL_003400Value out of rangeCheck allowed values
VAL_004400Invalid JSONFix JSON syntax

Resource Errors

CodeHTTPDescriptionResolution
RES_001404Resource not foundCheck resource ID
RES_002409Duplicate resourceUse existing resource
RES_003409Resource in useRemove dependencies first
RES_004410Resource deletedResource no longer exists

Handling Errors

JavaScript Example

async function makeRequest(url, options) {
const response = await fetch(url, options);

if (!response.ok) {
const error = await response.json();

switch (response.status) {
case 401:
// Token expired - refresh and retry
if (error.error_code === 'AUTH_002') {
await refreshToken();
return makeRequest(url, options);
}
throw new AuthError(error.message);

case 403:
throw new PermissionError(error.message);

case 404:
throw new NotFoundError(error.message);

case 422:
throw new ValidationError(error.details);

case 429:
// Rate limited - wait and retry
const retryAfter = response.headers.get('Retry-After') || 60;
await sleep(retryAfter * 1000);
return makeRequest(url, options);

default:
throw new APIError(error.message, error.code);
}
}

return response.json();
}

Python Example

import requests

class SemaswiftAPIError(Exception):
def __init__(self, code, message, details=None):
self.code = code
self.message = message
self.details = details or []

def make_request(method, url, **kwargs):
response = requests.request(method, url, **kwargs)

if not response.ok:
error = response.json()
raise SemaswiftAPIError(
code=error.get('error_code'),
message=error.get('message'),
details=error.get('details', [])
)

return response.json()

# Usage
try:
user = make_request('GET', '/api/v1/users/123')
except SemaswiftAPIError as e:
if e.code == 'AUTH_002':
refresh_token()
user = make_request('GET', '/api/v1/users/123')
elif e.code == 'RES_001':
print(f"User not found")
else:
raise

Request ID

Every response includes a request_id header:

X-Request-ID: req_abc123xyz

Include this ID when contacting support for faster issue resolution.

Best Practices

  1. Always check status codes - Don't assume success
  2. Parse error details - Use field-level errors for forms
  3. Log request IDs - For debugging and support
  4. Implement retry logic - For transient errors (5xx, 429)
  5. Show user-friendly messages - Don't expose raw errors