Sign in

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's inputSchema. 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/:action call returns 403 CREDENTIALS_REQUIRED with 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/:action will 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": [ … ] } }
CodeMeaning
LLM_KEY_REQUIRED401 — send a key
LLM_KEY_INVALID401 — the key is malformed, or Anthropic rejected it while writing a snippet
ACTION_INPUT_INVALID422 — input does not match the schema
ACTION_ERROR422 — the action threw; details.code names one of its possibleErrors
CREDENTIALS_REQUIRED403 — connect the provider at details.authorizationUrl
GENERATING409 — someone else triggered the implementation; retry in a few seconds
GENERATE_FAILED502 — the agent could not implement it; open an issue or a pull request
RATE_LIMITED429 — 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.