UNAUTHORIZED | 401 | Missing/invalid/expired JWT | Refresh token or redirect to login |
FORBIDDEN | 403 | Insufficient role permissions | Show “Access denied” |
ROLE_CONFLICT | 403 | User exists with different role | Show “Already registered as “ |
NOT_FOUND | 404 | Resource doesn’t exist | Show 404 screen |
CONFLICT | 409 | Job already taken by another mechanic | Dismiss offer, show “Already taken” |
INVALID_TRANSITION | 409 | Invalid job status change | Refresh job status from API |
VALIDATION_ERROR | 422 | Request body fails Zod validation | Highlight invalid form fields |
RATING_WINDOW_EXPIRED | 422 | Rating submitted after 7-day window | Show “Rating period expired” |
PAYMENT_REQUIRED | 402 | Unpaid cancellation fees | Redirect to pay fees |
RATE_LIMIT_EXCEEDED | 429 | Too many requests | Show “Try again in X seconds” |
INTERNAL_ERROR | 500 | Server error | Show generic error, retry later |