Tools API

161 of 184 tools can be called from code, with the same engines the pages use. One request shape for all of them; long work runs as a job you can follow.

At a glance

The six calls behind every tool. Rate limits are the anonymous allowance; signing in or using a token raises it, and a tool's cost counts against the limit.

Tools API endpoints, what they do, who may call them, their anonymous rate limit and an example request
EndpointPurposeAuthRate limitExample
POST /api/v1/tools/{id}/runRun a tool inline; long work answers with a jobAnonymous; session or token for file jobs120/min · 5,000/daycurl -X POST https://openvibe.tools/api/v1/tools/fancy/run
GET /api/v1/toolsList every tool with its inputs, limits and accessPublic120/mincurl https://openvibe.tools/api/v1/tools?api=true
GET /api/v1/tools/{id}/schemaJSON Schema for a tool's input and outputPublic120/mincurl https://openvibe.tools/api/v1/tools/fancy/schema
POST /api/v1/jobsStart a long job with files and follow itSession or token for file jobs60/min · 1,500/daycurl -X POST https://openvibe.tools/api/v1/jobs
GET /api/v1/jobs/{id}/eventsFollow one job as server-sent eventsThe job's owner120/mincurl -N https://openvibe.tools/api/v1/jobs/{id}/events
GET /api/v1/jobs/{id}/files/{n}Download a finished job's result fileThe job's owner120/mincurl -O https://openvibe.tools/api/v1/jobs/{id}/files/0

Over a limit is 429 with Retry-After; every answer also carries RateLimit-* headers. Errors are RFC 9457 problems with a stable code.

Discover

Every tool is described by a machine-readable descriptor (inputs as JSON Schema, file limits, how it runs, who may call it).

Run a tool

curl -X POST https://openvibe.tools/api/v1/tools/jsonminify/run \
  -H 'Content-Type: application/json' \
  -d '{"input":{"text":"{ \"a\": 1 }"}}'
# → {"state":"succeeded","tool":"jsonminify","result":{"text":"{\"a\":1}"},"took_ms":3}

File tools take multipart/form-data (file parts plus an input JSON part). Work that outlasts wait_ms answers 202 with a job: follow it at /api/v1/jobs/{id}/events (server-sent events) and download results from /api/v1/jobs/{id}/files/{n}. Send an Idempotency-Key header to make retries safe.

From JavaScript

const { createClient } = require('openvibe-sdk/core');
const { createToolsClient } = require('openvibe-sdk/tools');
const tools = createToolsClient(createClient({}));
const out = await tools.run('jsonminify', { text: '{ "a": 1 }' });
const job = await tools.run('png', { format: 'png' }, { files: [fileBlob] });
const done = await job.wait();   // any tool, sync or job

The SDK is openvibe-sdk (this site pins v0.67.0). It retries on 429 after Retry-After and generates idempotency keys for you.

Access and limits