Skip to main content

HTTP Status Codes Overview

The AutoSend API uses standard HTTP status codes to indicate the success or failure of your requests:
CodeStatusDescriptionWhen It Occurs
400Bad RequestInvalid request parametersValidation errors, malformed requests
401UnauthorizedMissing or invalid API keyAuthentication failures
402Payment RequiredPayment requiredPayment issues, subscription expired
403ForbiddenInsufficient permissions or limitsPlan limits exceeded, insufficient access
404Not FoundResource doesn’t existRequesting non-existent resources
429Too Many RequestsRate limit exceededToo many requests in a time period
500Internal Server ErrorServer errorUnexpected server-side errors

Client Errors (4xx)

400 Bad Request - Invalid Payload

The request was malformed or contains invalid data. This is the most common error code for validation issues. Common Causes:
  • Invalid data format
  • Missing required fields
  • Invalid data types
  • Value constraints violated (e.g., max length exceeded)
  • Malformed JSON
Error Response Format:
{
  "success": false,
  "error": {
    "message": "Validation failed",
    "code": "VALIDATION_FAILED",
    "details": [
      {
        "field": "email",
        "message": "Invalid email format"
      }
    ]
  }
}

401 Unauthorized

The API key is missing, invalid, or expired. Error Response:
{
  "success": false,
  "error": {
    "message": "Unauthorized",
    "code": "UNAUTHORIZED"
  }
}
Common Causes:
  • Missing Authorization header
  • Invalid API key
  • Expired API key
  • Incorrect API key format

402 Payment Required

Payment is required to complete the request. This typically occurs when there are payment issues or the subscription has expired. Error Response:
{
  "success": false,
  "error": {
    "message": "Please upgrade your plan to access these resources.",
    "code": "PLAN_UPGRADE_REQUIRED"
  }
}
Common Causes:
  • Subscription expired
  • Payment method declined
  • Account requires payment
  • Billing issues

403 Forbidden

The API key is valid but doesn’t have permission to perform the requested action. Error Response:
{
  "success": false,
  "error": {
    "message": "Insufficient permissions to access these resources.",
    "code": "INSUFFICIENT_PERMISSIONS"
  }
}

404 Not Found

The requested resource doesn’t exist. Error Response:
{
  "success": false,
  "error": {
    "message": "The requested resource was not found.",
    "code": "NOT_FOUND"
  }
}
Common Causes:
  • Invalid resource ID
  • Resource was deleted
  • Resource belongs to a different project
  • Incorrect endpoint path

429 Too Many Requests

The rate limit has been exceeded. You’ve made too many requests in a given time period. Error Response:
{
  "success": false,
  "error": {
    "message": "Rate limit exceeded",
    "code": "RATE_LIMIT_EXCEEDED",
    "retryAfter": 10 // epoch timestamp
  }
}

Server Errors (5xx)

500 Internal Server Error

An unexpected error occurred on the server side. Error Response:
{
  "success": false,
  "error": {
    "message": "Something went wrong on our end",
    "code": "INTERNAL_SERVER_ERROR"
  }
}

Best Practices for Error Handling

1. Always Check Response Status

const response = await fetch(url, options);
if (!response.ok) {
  const error = await response.json();
  // Handle error based on status code
}

2. Implement Comprehensive Error Handling

async function handleApiRequest(url, options) {
  try {
    const response = await fetch(url, options);
    const data = await response.json();

    if (!response.ok) {
      switch (response.status) {
        case 400:
          handleValidationError(data);
          break;
        case 401:
          handleAuthenticationError();
          break;
        case 402:
          handlePaymentError(data);
          break;
        case 403:
          handlePermissionError(data);
          break;
        case 404:
          handleNotFoundError();
          break;
        case 409:
          handleConflictError(data);
          break;
        case 429:
          await handleRateLimitError(data);
          break;
        case 500:
          await handleServerError(response.status);
          break;
        default:
          handleUnknownError(response.status, data);
      }
      throw new Error(data.message || "Request failed");
    }

    return data;
  } catch (error) {
    if (error instanceof TypeError) {
      // Network error
      console.error("Network error:", error);
    } else {
      // API error
      console.error("API error:", error);
    }
    throw error;
  }
}

3. Implement Retry Logic

async function retryRequest(requestFn, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await requestFn();
    } catch (error) {
      if (i === maxRetries - 1) throw error;

      // Only retry on certain errors
      const shouldRetry = error.status === 429 || error.status === 500;

      if (shouldRetry) {
        const delay = error.retryAfter
          ? error.retryAfter * 1000
          : Math.pow(2, i) * 1000;
        await new Promise((resolve) => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
}

4. Log Errors for Monitoring

function logError(error, context) {
  // Log to your error tracking service
  console.error("API Error:", {
    status: error.status,
    message: error.message,
    errors: error.errors,
    context: context,
    timestamp: new Date().toISOString(),
  });
}

5. Provide User-Friendly Error Messages

function getUserFriendlyError(error) {
  switch (error.status) {
    case 400:
      return "Please check your input and try again.";
    case 401:
      return "Please check your API key and try again.";
    case 402:
      return "Payment required. Please update your payment method.";
    case 403:
      return "You have reached your plan limit. Please upgrade your plan.";
    case 404:
      return "The requested resource was not found.";
    case 429:
      return "Too many requests. Please wait a moment and try again.";
    case 500:
      return "Service temporarily unavailable. Please try again later.";
    default:
      return "An unexpected error occurred. Please try again.";
  }
}

Need Help?

If you’re experiencing persistent errors or need assistance with error handling, please contact support at . When reporting errors, please include:
  • The endpoint you’re calling
  • The request payload
  • The full error response
  • Steps to reproduce the issue