Endpoints
GET /status
Checks the status of the connector. This endpoint is mainly used for successfully creating the app in Opal and verifying that the connector is properly configured.
Query params
Response params (200)
No body is required in the response for status code 200.
Response params (Error)
GET /resources
Returns a list of all resources for the app in question. This endpoint is called after you’ve imported resources to the app, so you may not see it being called when you first create your app.
To distinguish resources pulled from multiple sources, you can include the type in the identifier, then base64-encode the ID so it can be properly parsed—e.g., base64(resource-type:1).
Query params
Response params (200)
Response params (Error)
Resource object
Example response
GET /resources/{resource_id}
Get a specific resource by its ID.
Path params
Query params
Response params (200)
Resource object
Response params (Error)
Example response
GET /resources/{resource_id}/access_levels
If your resource doesn’t require any access level, this endpoint can return
"access_levels": [].
Query params
Response params (200)
Response params (Error)
Access level object
Example response
GET /resources/{resource_id}/users
Returns the users that currently have access to the provided resource.
Path params
Query params
Response params (200)
Response params (Error)
ResourceUser object
Example response
POST /resources/{resource_id}/users
Adds a user to the access list of the specified resource.
Path params
Body params (JSON encoded)
Example request
DELETE /resources/{resource_id}/users/{user_id}
Remove a user from the access list of the specified resource.
Path params
Query params
Response params (200)
No body is required as part of this endpoint for status code 200.
Response params (Error)
GET /groups
Returns a list of all groups for the app in question. The /groups endpoints are only called if Connector Groups is enabled in the custom app form.
Query params
Response params (200)
Response params (Error)
Group object
Example response
GET /groups/{group_id}
Get a specific group by its id.
Path params
Query params
Response params (200)
Group object
Response params (Error)
Example response
GET /groups/{group_id}/users
Returns the users that currently belong to the provided group.
Path params
Query params
Response params (200)
Response params (Error)
GroupUser object
Example response
POST /groups/{group_id}/users
Adds a user to the access list of the specified group.
Path params
Body params (JSON encoded)
Example request
DELETE /groups/{group_id}/users/{user_id}
Remove a user from the access list of the specified group.
Path params
Query params
Response params (200)
No body is required as part of this endpoint for status code 200.
Response params (Error)
GET /groups/{group_id}/resources
Returns the resources that currently belong to the provided group.
Path params
Query params
Response params (200)
Response params (Error)
GroupResource object
Example response
POST /groups/{group_id}/resources
Adds a resource to the access list of the specified group.
Path params
Body params (JSON encoded)
Example request
DELETE /groups/{group_id}/resources/{resource_id}
Remove a resource from the access list of the specified group.
Path params
Query params
Response params (200)
No body is required as part of this endpoint for status code 200.
Response params (Error)
GET /groups/{group_id}/member-groups
Returns member groups for the specified group. Required if you enable Nested Groups when you create the custom app.
Path params
Query params
Response params (200)
Response params (Error)
Member group object
POST /groups/{group_id}/member-groups
Add a member group to the specified group. Required if you enable Nested Groups when you create the custom app.
Path params
Body params (JSON encoded)
Example request
GET /users
Returns a list of users for your custom connector app.
Query params
Response params (200)
Response params (Error)
User object
Example
POST /users
This endpoint enables users to be provisioned into a custom connector app. This functionality is only available if user provisioning has been enabled for the connection.
Body params (JSON encoded)
UserAttributes object
UserTag object
Response params (200)
Response params (Error)
DELETE /users/{user_id}
This endpoint deprovisions user accounts in a custom connector application. This functionality is only available if user deprovisioning has been enabled for the connection.
Path params
UserAttributes object
UserTag object
Query params
Response params (200)
No body is required as part of this endpoint for status code 200.
Response params (Error)
GET /events
This endpoint is only called if Connector Event Ingestion is enabled in the custom app form.
Query params
Response params (200)
Response params (Error)
Event object
ActorUserIdentifier object
EventContentLoginSuccess object
Example
Error codes
All error codes need to implement the following object:
In addition, you can distinguish the type of error and meaning by following these codes
All 429 and 500 errors will be retried up to 4 times with linear backoff, with 1 second between retries.
Rate Limiting
Opal will respect your custom connector’s rate limits if you choose to implement them. If you return a429 status code,
Opal will back off and retry the request up to 4 times. By default, Opal will retry after 1 second. To control when
Opal retries, you can include a Retry-After header:
<seconds> is the number of seconds Opal should wait before retrying the request.
Signature
To ensure that the API calls originate from Opal, we provide a header in each request that represents the encrypted request payload with a secret that is generated when creating the app connector in Opal. See Setup connector app in Opal for more details. On each HTTP request that Opal sends, we add anX-Opal-Signature HTTP header. The signature is created by combining the signing secret with the body of the request we’re sending using a standard HMAC-SHA256 keyed hash.
Here is an example with Node to compute the signature using your signing secret. You may compare it against the value retrieved from the X-Opal-Signature header:
{}. See the link below for more examples.
Check Create your own connector for signature examples.