Overview
The Integrations API lets you register your own integrations in Opus programmatically — the provider they belong to, the integration itself with the actions it can perform, and the credential schema it authenticates with. These endpoints author the integration catalog: the definition of an integration and the shape of its credentials, shared across your whole organization. Connecting an integration inside a workspace — supplying the real secret values — is a separate, workspace-scoped step done in the Opus app.Base URL
All API requests should be made to the following base URL:Authentication
All API endpoints require authentication with your Opus API key, sent in thex-service-key header.
401. Keys are rate limited — sustained bursts return 429.
Your API key is a unique, secret credential. Store it securely and never expose it in client-side code.
Authoring Flow
Creating a working integration takes three calls, in order. Each returns an id the next one needs.1
Create a Provider
A provider is the vendor or system the integration talks to — Google, Slack, your own internal service. Create one with
POST /provider and keep the returned id. Reuse it for every integration from the same vendor.2
Create the Integration
POST / registers the integration under that provider, optionally with its actions inline. Keep the returned versionId.3
Add a Credential
POST /v/{integrationVersionId}/credential defines how the integration authenticates — which fields exist and how they render. This is the credential schema, never the secret values.Steps 2 and 3 can be collapsed into one call: pass a
credential object inside the integration body and it is created alongside it.Actions and Fields
An action is one thing an integration can do. It carries aninputs and an outputs map describing its data, plus the Python code that runs when the action executes.
Both maps are keyed by the field’s own variableName:
variableName inside it must match. Your code reads inputs from input_data[...] and writes outputs to result[...] using those same names.
For composite types, allowedTypes[].typeDefinition describes the shape inside — for array a single-key map naming the element, for object a map of its properties. Values nest, so a list of records is array → object → properties.
Usage Notes
- Nothing is workspace-scoped. Providers, integrations and credentials all belong to your organization. No workspace id is accepted anywhere in this section.
- One credential per auth type. Adding a second credential with the same
authTypeto the same integration returns409. - A failed action does not roll back the integration. If an inline action is rejected, the integration itself may still have been created. Check before retrying, or you will end up with duplicates.
400is us,422is downstream. A400means this API rejected your body. A422means it passed validation here and was rejected further down — most often anemailon a reserved domain.
Available Endpoints
Create a Provider
Register the vendor or system an integration is authored under
Create an Integration
Register a custom integration, optionally with its actions and credential
Add a Credential
Define how an integration authenticates