Skip to main content
Every error response uses the same shape:
{ "error": { "code": "ERROR_CODE", "message": "Human-readable description" } }
Check the HTTP status and error.code before reading data.

Codes

CodeHTTPWhat to do
UNAUTHORIZED401Missing or invalid auth. Check the Authorization header
FORBIDDEN403Authenticated but not allowed for this resource
VALIDATION_ERROR400Body failed schema validation. details.path points at the field
INVALID_JOB_TYPE400Job type not registered or not on your plan
INSUFFICIENT_CREDITS402Top up at app.rendobar.com/billing
PLAN_LIMIT403Plan limit hit (concurrency, file size). See Limits
RATE_LIMITED429Back off per Retry-After header
NOT_FOUND404Resource doesn’t exist or isn’t visible to your org
CONFLICT409Request conflicts with current state (e.g. cancelling a complete job)
RUNNER_ERROR502Processing failed on the runner. Check error.message for details
RUNNER_TIMEOUT504The job did not finish in time. No credits charged
ORG_SUSPENDED403Contact hello@rendobar.com
INTERNAL_ERROR500Server bug. Persist? Contact support with the request ID

Handle the common ones

The three you’ll hit most: INSUFFICIENT_CREDITS, RATE_LIMITED, VALIDATION_ERROR.
import { createClient, isApiError } from "@rendobar/sdk";

const client = createClient({ apiKey: "rb_YOUR_KEY" });

try {
  const job = await client.jobs.create({
    type: "ffmpeg",
    params: { command: "ffmpeg -i https://example.com/video.mp4 -vf scale=1280:720 output.mp4" },
  });
} catch (err) {
  if (!isApiError(err)) throw err;
  switch (err.code) {
    case "INSUFFICIENT_CREDITS":
      // redirect to billing
      break;
    case "RATE_LIMITED":
      // back off for err.retryAfter seconds
      break;
    case "VALIDATION_ERROR":
      // fix the request
      break;
    default:
      console.error(`API error: ${err.code} - ${err.message}`);
  }
}

See also

  • Plan limits: caps behind PLAN_LIMIT and RATE_LIMITED
  • Job lifecycle: where RUNNER_ERROR and RUNNER_TIMEOUT surface
  • Credits and billing: INSUFFICIENT_CREDITS and the prepaid model
  • FAQ: common questions about failed jobs and refunds
  • Pricing: plan that lifts your concurrency and rate caps