Changelog
Improved

Cache job type discovery with ETags

Send If-None-Match to /jobs/types and the schema endpoint and get a 304 when the contract has not changed, plus a new /account/capabilities for plan limits.

API SDK

GET /jobs/types and GET /jobs/types/{type}/schema now return an ETag. Send it back as If-None-Match and you get a 304 with no body when the contract has not changed. The contract only changes when we deploy, so a connector that rebuilds a form on every render stops re-downloading a payload it already has.

Both endpoints stay public and edge cached for 300 seconds. Nothing about the request changes if you ignore the header.

/jobs/types also carries useCases and chainsWith for each type, which the MCP list_job_types tool has returned since it shipped. Same data, same names, now on the REST endpoint too.

Plan limits without reading billing

GET /account/capabilities is new. It returns the authenticated account’s plan limits and enabled features, so you can validate a file size or a duration before submitting a job rather than after a rejection.

import { createClient } from "@rendobar/sdk";
const client = createClient({ apiKey: process.env.RENDOBAR_API_KEY });
const { limits } = await client.account.capabilities();
if (file.size > limits.maxInputFileSize) {
throw new Error("This file is larger than your plan allows.");
}

The same call over HTTP, from the SDK docs:

Terminal window
curl https://api.rendobar.com/account/capabilities \
-H "Authorization: Bearer $RENDOBAR_API_KEY"

It deliberately contains no balance, price or subscription data. Those stay on /billing/state, which an OAuth token cannot reach. Discovery is public and cacheable and cannot describe your plan, so this is the endpoint that can.

Share