The OpenIntegrations API
One endpoint runs any action in the registry. If nobody has implemented it yet, an agent writes, tests and publishes the implementation on the fly — the first call takes a minute, the next ones hundreds of milliseconds.
Run an action
curl -X POST https://open-integrations.dev/api/run/github/get-repository \
-H "Authorization: Bearer $ANTHROPIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": {"owner": "vercel", "repo": "next.js"}}'
- Auth — an Anthropic (
sk-ant-…) API key. It is never stored, and it is not checked when you run an existing snippet: its hash simply identifies you. - Missing snippets are written with your key — when an action has no snippet yet, Claude writes it with your own Anthropic key, so Anthropic bills that one-time implementation to you. After that the snippet is free for everyone.
- Body —
{ "input": { … } }matching the action'sinputSchema. Sending the input object directly also works. - Credentials — provider credentials are managed by keychains.dev, so the code running on OpenIntegrations never gets access to sensitive keys. The first time auth to a provider is needed, the
/api/run/:provider/:actioncall returns403 CREDENTIALS_REQUIREDwith an approval link. Use the link to complete the OAuth flow with the provider or enter your API keys, and the next call to/api/run/:provider/:actionwill work with no changes. Credentials are bound to the hash of your Anthropic API key, so all calls made with the same Anthropic key have access to the same provider accounts. - Version pinning —
{ "input": …, "versionId": "v_…" }runs an exact version.
Responses
{ "ok": true, "data": { … }, "meta": { "versionId": "v_…", "buildId": "build_…", "runId": "run_…", "latencyMs": 212, "runtime": "isolate" } }
{ "ok": false, "error": { "code": "ACTION_INPUT_INVALID", "message": "…", "details": [ … ] } }
| Code | Meaning |
|---|---|
LLM_KEY_REQUIRED | 401 — send a key |
LLM_KEY_INVALID | 401 — the key is malformed, or Anthropic rejected it while writing a snippet |
ACTION_INPUT_INVALID | 422 — input does not match the schema |
ACTION_ERROR | 422 — the action threw; details.code names one of its possibleErrors |
CREDENTIALS_REQUIRED | 403 — connect the provider at details.authorizationUrl |
GENERATING | 409 — someone else triggered the implementation; retry in a few seconds |
GENERATE_FAILED | 502 — the agent could not implement it; open an issue or a pull request |
RATE_LIMITED | 429 — 60 runs/min, 5 generations/day per key |
Read the registry
GET /api/providers?q=slack&category=crm&page=1
GET /api/providers/:slug
GET /api/providers/:slug/actions?stage=developed
GET /api/run/:provider/:action # describe: name, stage, inputSchema
Contribute
Issues, comments and pull requests need a signed-in session (browser). Every pull request is compiled on coderun and run against the action's benchmark inputs before an admin merges it. Versions are content-addressed: /:provider/:action/versions/:hash.