Skip to main content

Documentation Index

Fetch the complete documentation index at: https://rendobar.com/docs/llms.txt

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

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)
PROVIDER_ERROR502Upstream provider failed. Check error.message for details
PROVIDER_TIMEOUT504Provider didn’t respond 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.
const res = await fetch("https://api.rendobar.com/jobs", {
  method: "POST",
  headers: {
    "Authorization": "Bearer rb_live_YOUR_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    type: "raw.ffmpeg",
    inputs: {},
    params: { command: "ffmpeg -i https://example.com/video.mp4 -vf scale=1280:720 output.mp4" },
  }),
});

if (!res.ok) {
  const { error } = await res.json();
  switch (error.code) {
    case "INSUFFICIENT_CREDITS":
      // redirect to billing
      break;
    case "RATE_LIMITED":
      // back off per Retry-After
      break;
    case "VALIDATION_ERROR":
      // fix the body
      break;
    default:
      console.error(`API error: ${error.code} - ${error.message}`);
  }
}

See also