Skip to content

Products

Compliance Officer Service Expert-led compliance, end to end Compliance Portal Share security documents securely Open-source platform Deploy Probo on your own infrastructure

Resources

Probo stories How teams get compliant with Probo Blog Ideas and guidance from the Probo team Guides & tools Practical compliance guides and free tools Love from Customers What customers say about working with Probo Changelog Latest product updates Download Get the Probo Agent

Company

About The people and vision powering Probo Careers Join the team building Probo Brand assets Official logos and visual resources Security Review our security and compliance posture
Overview Understand Probo and its core concepts Product Explore Probo's GRC capabilities Developers Explore GraphQL, CLI, MCP, n8n, and webhooks Deployment Probo Cloud, self-hosting, and configuration

Explore

GitHub Explore our open-source compliance tools

GraphQL API

Use the Probo console GraphQL API at /api/console/v1/graphql to query and mutate records, with authentication, organization scoping, and copy-paste examples.

View as Markdown

The Probo console and automation clients use the GraphQL API at /api/console/v1/graphql. Its schema covers organizations, frameworks, controls, measures, risks, audits, privacy, access reviews, the Compliance Portal, cookie consent, devices, and other product resources.

For endpoint layout, identifiers, and error classes shared across interfaces, see API fundamentals.

Create a scoped access token from your account menu under OAuth tokens. Send it as a bearer credential on every request:

POST /api/console/v1/graphql HTTP/1.1
Host: eu.probo.com
Authorization: Bearer <oauth-token>
Content-Type: application/json

Use the origin that matches the token’s deployment (https://eu.probo.com, https://us.probo.com, or your self-hosted origin). Effective access is the intersection of the token’s OAuth scopes and the underlying user’s current Probo permissions.

Interactive clients can use supported OAuth authorization flows instead. SSO sessions and SCIM tokens are not substitutes for an OAuth access token.

Send GraphQL documents as authenticated POST requests with a JSON body containing query and, when needed, variables. Use variables for IDs and user input instead of interpolating values into a query string. Named operations are preferred; anonymous shorthand can be rejected by some clients.

{
"query": "query Viewer { viewer { id } }",
"variables": {}
}

The schema is the contract for field nullability, input types, enums, and pagination. Introspect the supported deployment rather than copying fields from an unrelated version.

Most compliance records belong to an organization. List the organizations the token can access, then pass an organization ID into organization-scoped fields and mutations. Do not assume that an authenticated user can access every organization on the deployment.

query ListOrganizations {
organizations {
nodes {
id
name
}
}
}
query Organization($id: ID!) {
organization(id: $id) {
id
name
}
}
{
"query": "query Organization($id: ID!) { organization(id: $id) { id name } }",
"variables": { "id": "org_01EXAMPLE" }
}

Probo uses globally unique IDs that encode an entity type; treat them as opaque strings.

List fields use GraphQL connections. Request only the fields the integration needs, pass a bounded first value, and follow pageInfo.endCursor while pageInfo.hasNextPage is true. Do not derive cursors or rely on database ordering.

Confirm connection field names and arguments against the schema for your deployment. Nested lists under organization(id:) are organization-scoped; top-level list fields such as organizations return only records the token can access.

Mutations validate authorization and current record state. A successful HTTP response can still contain GraphQL errors, so inspect both data and errors. Do not retry invalid, forbidden, or conflict errors without changing the request. Retry transient internal or transport failures only with bounded backoff and idempotency in mind.

With curl:

Terminal window
curl https://eu.probo.com/api/console/v1/graphql \
--header "Authorization: Bearer $PROBO_OAUTH_TOKEN" \
--header "Content-Type: application/json" \
--data '{"query":"query Viewer { viewer { id } }"}'

With the CLI:

Terminal window
prb api 'query { organizations { nodes { id name } } }'
prb api 'query($id: ID!) { organization(id: $id) { name } }' -f id=org_01EXAMPLE

See prb api and CLI configuration for flags and stdin usage.

GraphQL is a versioned endpoint, but its schema evolves with Probo releases. Generate client types from the deployment you target and review schema changes during upgrades. MCP, CLI, and n8n operations are maintained alongside GraphQL, but transport-specific capabilities and release timing can differ.

When a higher-level interface already covers the workflow, prefer the CLI, MCP, or n8n references for day-to-day automation, and use GraphQL when you need a custom client or query shape.