Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.reducto.ai/llms.txt

Use this file to discover all available pages before exploring further.

The Reducto JavaScript SDK throws specific error classes for different error conditions.

Error Classes

All error classes are exported from the main reductoai module:
import Reducto, {
  ReductoError,
  APIError,
  APIConnectionError,
  APIConnectionTimeoutError,
  APIUserAbortError,
  BadRequestError,
  AuthenticationError,
  PermissionDeniedError,
  NotFoundError,
  ConflictError,
  UnprocessableEntityError,
  RateLimitError,
  InternalServerError
} from 'reductoai';

Common Error Handling

import Reducto, { 
  APIError, 
  AuthenticationError, 
  BadRequestError,
  RateLimitError 
} from 'reductoai';

try {
  const result = await client.parse.run({ input: upload.file_id });
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.error(`Auth failed: ${error.status} - ${error.message}`);
  } else if (error instanceof BadRequestError) {
    console.error(`Invalid request: ${error.status} - ${error.message}`);
  } else if (error instanceof RateLimitError) {
    console.error(`Rate limited: ${error.status} - ${error.message}`);
  } else if (error instanceof APIError) {
    console.error(`API error: ${error.status} - ${error.message}`);
  }
}

Retry Logic

import Reducto, { RateLimitError, InternalServerError, APIConnectionError } from 'reductoai';

async function parseWithRetry(client, upload, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await client.parse.run({ input: upload.file_id });
    } catch (error) {
      // The SDK automatically retries connection errors and 5xx errors
      // You only need manual retry logic for specific cases
      if (error instanceof RateLimitError || error instanceof InternalServerError || error instanceof APIConnectionError) {
        if (attempt === maxRetries - 1) throw error;
        const waitTime = Math.pow(2, attempt); // Exponential backoff
        console.log(`Retrying in ${waitTime} seconds...`);
        await new Promise(resolve => setTimeout(resolve, waitTime * 1000));
      } else {
        throw error;
      }
    }
  }
}

Automatic Retries

The SDK automatically retries requests on:
  • Connection errors (APIConnectionError)
  • Request timeouts (APIConnectionTimeoutError)
  • 408 Request Timeout
  • 409 Conflict
  • 429 Rate Limit
  • 5xx Internal Server Errors
Default retry count is 2, configurable via maxRetries:
// Configure default retries for all requests
const client = new Reducto({
  maxRetries: 5  // default is 2
});

// Or per-request
await client.parse.run({ input: upload.file_id }, {
  maxRetries: 3
});

Next Steps