
OpsLevel
System Management- Overview
- Setup
- Data & mappings
- Operations & API
- Changelog
The OpsLevel Connector integrates with the OpsLevel service catalog and internal developer platform. It uses the OpsLevel GraphQL API to sync the account's catalog into Brinqa, including services, code repositories, teams, users, and infrastructure resources. The connector paginates through each collection using GraphQL cursor-based pagination and maps the results onto Brinqa Unified Data Model (UDM) models such as Application, CodeRepository, Team, Person, and Host.
Data retrieved from OpsLevel
| Connector Object | Required | Maps to Data Model |
|---|---|---|
| Service | Yes | Application |
| Repository | Yes | Code Repository |
| Team | Yes | Team |
| Person | Yes | Person |
| Host (Infrastructure) | Yes | Host |
Model relationships
For detailed steps on how to view the data retrieved from OpsLevel in the Brinqa Platform, see How to view your data.
Connection settings
When setting up a data integration, select OpsLevel from the Connector dropdown and provide the following:
| Setting | Required | Default | Description |
|---|---|---|---|
| API URL | No | — | OpsLevel API URL |
| API token | No | — | OpsLevel API token |
| Maximum retries | No | — | The maximum number of retry attempts before giving up a request |
Authentication
The connector authenticates with the OpsLevel GraphQL API using a Bearer token (an OpsLevel API token). The token is provided in the connector configuration and is sent on every request in the Authorization header.
Endpoint
| Method | URL |
|---|---|
| POST | {API URL}/graphql (default API URL: https://app.opslevel.com) |
Request Headers
| Header | Value |
|---|---|
Authorization | Bearer {apiToken} |
Content-Type | application/json |
Accept | */* |
Request Body
All operations are GraphQL queries posted as JSON:
{
"query": "query get_services($endCursor: String) { account { services(after: $endCursor) { nodes { id } } } }",
"variables": {}
}
Sample Response
{
"data": {
"account": {
"services": {
"nodes": [
{ "id": "Z2lkOi8vb3BzbGV2ZWwvU2VydmljZS8xMjM" }
],
"pageInfo": {
"hasNextPage": false,
"endCursor": null
}
}
}
}
}
Response Fields
| Field | Description |
|---|---|
data | Root container for the requested account data. |
data.account.<collection>.nodes | Array of returned objects for the requested collection. |
data.account.<collection>.pageInfo.hasNextPage | Whether another page of results exists. |
data.account.<collection>.pageInfo.endCursor | Cursor passed as the endCursor variable to fetch the next page. |
errors | Present when the query fails; the first error message is surfaced as a non-retryable error. |
Token Usage in Subsequent Requests
The same Bearer token is reused on every GraphQL request. There is no token exchange or refresh step — the configured API token is placed directly into the Authorization: Bearer {apiToken} header for each call. Pagination is performed by issuing the same query repeatedly with an updated endCursor variable until hasNextPage is false.
How to obtain OpsLevel credentials
Generate an OpsLevel API token
For the OpsLevel connector to retrieve data from the OpsLevel API, you must provide an API token. To generate an API token, follow these steps:
-
Log in to your OpsLevel portal as an administrator.
-
Click API in the navigation menu.
-
Click Create API Token.

The "Create API Token" dialog displays.
-
Provide a description for the token, and then click Create API Token.
Your new API token displays. You can't view the token again after this. Copy and save it to a secure location.

Note: If you do not have the permissions to create an API token, contact your OpsLevel administrator. For additional information, see OpsLevel documentation.
Attribute mappings
Expand the sections below to view the mappings between the source and the Brinqa data model attributes:
Service
| Source Field Name | SDM Attribute |
|---|---|
Service.aliases | ALIASES |
Service.dependencies.nodes[].aliases | DEPENDENCIES |
Service.description | DESCRIPTION |
Service.framework | FRAMEWORK |
Service.id | UID |
Service.language | LANGUAGES |
Service.lifecycle.name | LIFECYCLE |
Service.name | NAME |
Service.owner.id | OWNER |
Service.product | PRODUCT |
Service.repos.nodes[].name | REPOSITORIES |
Service.tags.nodes[].key/value | TAGS |
Service.tier.name | TIER |
Service.tools.nodes[] | TOOLS |
Repository
| Source Field Name | SDM Attribute |
|---|---|
Repository.archivedAt | ARCHIVED_AT |
Repository.createdOn | SOURCE_CREATED_DATE |
Repository.defaultAlias / Repository.tier.name | ALIAS |
Repository.defaultBranch | DEFAULT_BRANCH |
Repository.description | DESCRIPTION |
Repository.forked | FORKED |
Repository.id | UID |
Repository.languages.name | LANGUAGES |
Repository.locked | LOCKED |
Repository.name | NAME |
Repository.organization | ORGANIZATION |
Repository.owner.id | OWNER |
Repository.repoKey | REPO_KEY |
Repository.type | REPO_TYPE |
Repository.url | URL |
Repository.visibility | VISIBILITY |
Repository.visible | VISIBLE |
Team
| Source Field Name | SDM Attribute |
|---|---|
Team.aliases | ALIASES |
Team.id | UID |
Team.name | NAME |
Team.responsibilities | DESCRIPTION |
Person
| Source Field Name | SDM Attribute |
|---|---|
User.email | EMAILS |
User.id | UID |
User.name | NAME |
User.role | ROLE |
User.teams.nodes[].id | TEAMS |
Host (Infrastructure)
| Source Field Name | SDM Attribute |
|---|---|
InfrastructureResource.aliases | ALIASES |
InfrastructureResource.href | HREF |
InfrastructureResource.id | UID |
InfrastructureResource.lastSyncedAt | LAST_SEEN |
InfrastructureResource.name | NAME |
InfrastructureResource.name (normalized) | HOSTNAMES |
InfrastructureResource.providerData.accountName | PROVIDER_ACCOUNT_NAME |
InfrastructureResource.providerData.externalUrl | PROVIDER_URL |
InfrastructureResource.providerData.providerName | PROVIDER_NAME |
InfrastructureResource.providerResourceType | PROVIDER_RESOURCE_TYPE |
InfrastructureResource.rawData.auditly.cloud | CLOUD_PROVIDER |
InfrastructureResource.rawData.auditly.internalIp | IP_ADDRESSES |
InfrastructureResource.rawData.auditly.lastPatch | LAST_FIXED |
InfrastructureResource.rawData.auditly.osNamePretty | OPERATING_SYSTEM |
InfrastructureResource.rawData.auditly.services[].id | SERVICES |
InfrastructureResource.rawData.region | REGION |
InfrastructureResource.rawData.site | SITE |
InfrastructureResource.rawData.zone | ZONE |
InfrastructureResource.tags.nodes[].key/value | TAGS |
Operations & API
Expand each connector object to see its operation options, delta-sync behavior, and the API it uses. See connector operation options for how to apply operation options (keys and values are case-sensitive).
Service
Operation options
This object does not support any operation options.
Delta sync
The connector README does not document sync behavior for this object.
API
- Type: GraphQL · Endpoint:
POST /graphql
query get_services($endCursor: String) {
account {
services(after: $endCursor) {
nodes {
id
name
description
externalUuid
framework
language
locked
product
tier { name }
lifecycle { name }
aliases
repos { nodes { id name } }
dependencies { nodes { id name aliases } }
tools { nodes { id displayName category url environment } }
tags { nodes { key value } }
owner { id }
}
pageInfo { hasNextPage endCursor }
}
}
}
Repository
Operation options
This object does not support any operation options.
Delta sync
The connector README does not document sync behavior for this object.
API
- Type: GraphQL · Endpoint:
POST /graphql
query get_repositories($endCursor: String) {
account {
repositories(after: $endCursor) {
nodes {
id
name
archivedAt
createdOn
defaultAlias
defaultBranch
description
forked
languages { name }
locked
organization
owner { id }
repoKey
type
url
visibility
visible
}
pageInfo { hasNextPage endCursor }
}
}
}
Team
Operation options
This object does not support any operation options.
Delta sync
The connector README does not document sync behavior for this object.
API
- Type: GraphQL · Endpoint:
POST /graphql
query get_teams($endCursor: String) {
account {
teams(after: $endCursor) {
nodes {
id
name
aliases
responsibilities
}
pageInfo { hasNextPage endCursor }
}
}
}
Person
Operation options
This object does not support any operation options.
Delta sync
The connector README does not document sync behavior for this object.
API
- Type: GraphQL · Endpoint:
POST /graphql
query get_users($endCursor: String) {
account {
users(after: $endCursor) {
nodes {
id
name
role
teams { nodes { id } }
}
pageInfo { hasNextPage endCursor }
}
}
}
Host (Infrastructure)
Operation options
This object does not support any operation options.
Delta sync
The connector README does not document sync behavior for this object.
API
- Type: GraphQL · Endpoint:
POST /graphql
query get_infrastructure($endCursor: String) {
account {
infrastructureResources(after: $endCursor) {
nodes {
aliases
data
href
id
name
lastSyncedAt
providerData {
accountName
externalUrl
providerName
}
providerResourceType
rawData
tags { nodes { key value } }
type
}
pageInfo { hasNextPage endCursor }
}
}
}
Changelog
The OpsLevel connector has undergone the following changes:
| Version | Description | Migration Steps |
|---|---|---|
| 3.0.3 | New Features - Added the Host model, representing infrastructure resources cataloged in OpsLevel (such as cloud hosts and provider resources), including provider details, location, and associated services. This gives you visibility into the infrastructure backing your services alongside the existing service catalog data. | N/A |
| 3.0.2 | Improvements - Service records now populate Teams ownership information, so you can see which teams are associated with each service. Bug Fixes - Fixed the Tier value on services, which previously failed to populate. Service tiers now sync correctly. | N/A |
| 3.0.1 | Improvements - Service data is now retrieved directly from OpsLevel rather than from per-service configuration files, producing more complete and reliable service records, including repositories, dependencies, tags, and tools. Bug Fixes - Service repositories are now identified by their repository name, resolving cases where related repositories did not match correctly. | • Service: The way service data is collected changed, the System and Properties fields were removed, and repositories are now keyed by name. Action: re-sync the connector to refresh service records and clear values that are no longer collected. |
| 3.0.0 | Overview The OpsLevel connector integrates with OpsLevel to synchronize service catalog data, including services, repositories, teams, and people. Category: System Management Models | N/A |