SDK Reference

Error Handling

SDK error classes, HTTP error codes, and retry behavior.

The SDK exports comprehensive error classes. Use instanceof to handle each error type. The SDK automatically retries with exponential backoff for 408, 429, 500–504 errors.

Error Classes#

ClassHTTPDescription
AuthenticationError401Invalid API key or missing Authorization header.
RateLimitError429Rate limit exceeded. SDK auto-retries. Read error.retryAfter (seconds).
TimeoutErrorRequest exceeded timeout (default 120s).
AbortErrorRequest was manually cancelled via AbortController.
ContentFilterError400Content was blocked by the safety filter. See error.categories.
ConnectionError503Could not connect to server. SDK retries 2 times.
ValidationErrorInvalid input, thrown on the client before sending the request.
StreamErrorError occurred while reading the SSE stream.
APIErrorOther HTTP errors (400, 403, 404, 500...).

Full Example#

typescript
import Lunaby, {
  AuthenticationError,
  RateLimitError,
  TimeoutError,
  AbortError,
  ContentFilterError,
  ConnectionError,
  ValidationError,
  StreamError,
  APIError,
} from 'lunaby-sdk';

const client = new Lunaby({ apiKey: process.env.LUNABY_API_KEY });

try {
  const response = await client.chat.create([
    { role: 'user', content: 'Hello!' }
  ]);
  console.log(response.data.choices[0].message.content);

} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error('Invalid API key');

  } else if (error instanceof RateLimitError) {
    console.error(`Rate limited. Retry after ${error.retryAfter}s`);

  } else if (error instanceof TimeoutError) {
    console.error('Request timeout — increase timeout if needed');

  } else if (error instanceof ContentFilterError) {
    console.error('Content blocked:', error.categories);

  } else if (error instanceof AbortError) {
    console.log('Request was cancelled');

  } else if (error instanceof ConnectionError) {
    console.error('Cannot connect to server');

  } else if (error instanceof ValidationError) {
    console.error('Invalid input:', error.message);

  } else if (error instanceof APIError) {
    console.error(`API Error ${error.status}: ${error.message}`);
  }
}

HTTP Error Reference#

CodeDescriptionAuto Retry?
400Bad Request — missing field or invalid formatNo
401Unauthorized — invalid or missing API keyNo
403Forbidden — key deactivatedNo
404Not Found — endpoint does not existNo
408Request TimeoutYes
429Rate Limit ExceededYes
500Internal Server ErrorYes
502/503/504Service UnavailableYes