CydraLabs

Documentation

API reference

Every capability in the portal is available through the versioned REST API under /api/v1. The endpoint reference below is generated from the platform's OpenAPI document (API version 0.1.0, 133 operations).

Basics

API basics
Base URLhttps://app.cydralabs.com/api/v1
FormatJSON requests and responses (UTF-8). Times are ISO 8601 in UTC; IDs are UUIDs.
OpenAPI document/api/v1/openapi.json (opens in new tab) (OpenAPI 3.1). Each operation's x-cydra-auth extension states who may call it.
Interactive explorerSwagger UI (opens in new tab)
HealthGET /healthz (process) and GET /readyz (database round trip), outside /api/v1.

Authentication

Each endpoint accepts exactly one kind of caller. The reference marks each one:

Caller types
MarkerCallerHow to authenticate
…A personSession cookie from OIDC sign-in, plus X-CSRF-Token (the CSRF cookie's value) on POST, PATCH, PUT and DELETE. The permission shown must be granted through your roles.
agent tokenAn agentAuthorization: Bearer <workload token>. Accepted by the gateway endpoints and nowhere else.
client credentialsAn agentclient_id and client_secret of a workload identity, exchanged for a token.
onboardingA new identityThe short-lived onboarding cookie set when a new person signs in before creating an organisation, or a session.
publicAnyoneNo authentication; rate-limited.

Agent workload tokens

POST /api/v1/identities/token
{"grant_type": "client_credentials", "client_id": "cyd_…", "client_secret": "…"}

→ {"access_token": "<JWT>", "token_type": "Bearer", "expires_in": 300, "agent_uri": "agent://acme/sales-agent"}

Tokens are Ed25519-signed JWTs for the audience cydra-gateway, valid for five minutes, and may be reused until they expire. Suspending the agent or revoking its sessions invalidates tokens issued earlier. Workload identities are issued by an administrator and the secret is shown once; see the quick start.

People

People sign in through the portal (OpenID Connect with mandatory multi-factor authentication); sessions are meant for the portal. For automation, register an agent and give it a workload identity. A missing permission returns 403 forbidden with details.required_permission, and the denial is audited. GET /api/v1/auth/me lists your roles and effective permissions.

Errors

{"error": {"code": "validation_failed", "message": "Request validation failed", "correlation_id": "3f0c…", "details": [...]}}
Error codes
HTTPTypical codes
400bad_request
401unauthenticated, token_expired, invalid_token, invalid_audience, session_revoked, identity_revoked, invalid_client
403forbidden, csrf_failed, module_not_in_plan, four_eyes_required, self_approval_prohibited
404not_found (also for other organisations' objects, never 403)
409conflict, version_conflict, idempotency_conflict, approval_not_pending, approval_expired, duplicate_approver
422validation_failed (with details), confirmation_required, invalid_policy, invalid_cursor, production_requirements
428precondition_required: If-Match is missing
429rate_limited, with Retry-After
500internal_error: no internal detail is returned; quote the correlation ID

Conventions

API conventions
TopicBehaviour
CorrelationSend X-Correlation-ID (8–100 of [A-Za-z0-9._-]) or one is generated. It is echoed in responses and recorded in logs, audit events and evidence.
Pagination?limit=&cursor= → {"items": [...], "next_cursor": "…" | null}. limit is 1–200 (default 50); cursors are opaque.
IdempotencyAction submissions require Idempotency-Key (8–200 of [A-Za-z0-9._:-]). The same key and body return the original result with replayed: true; a different body returns 409.
ConcurrencyRecords carry version. Policy versions, publishing and status changes require If-Match; agent updates honour it when sent.
ConfirmationContainment and other high-impact operations take {"reason": "…", "confirm": true}.
Rate limits600 requests a minute per signed-in user; 120 a minute per agent on gateway endpoints; 30 a minute per IP for sign-in and per client for token exchange.

Endpoint reference

Paths are relative to https://app.cydralabs.com. Expand an endpoint for its parameters, request fields and responses. Schema names (for example AgentOut) are defined in the OpenAPI document. Internal endpoints are not part of the public API and are not listed.

Authentication and accounts

Sign-in, sessions, sign-up and organisation onboarding.

  • GET/api/v1/auth/callbackOIDC redirect URIpublic

    Parameters

    NameTypeRequiredNotes
    code (query)string | nullno
    state (query)string | nullno
    error (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/auth/dev-loginDevelopment sign-in (disabled in production)public

    Request body DevLoginIn

    NameTypeRequiredNotes
    emailstring (email)yes
    tenant_idstring (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/auth/loginStart OIDC sign-in (authorisation code + PKCE)public

    Parameters

    NameTypeRequiredNotes
    return_to (query)string | nullno
    signup (query)booleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/auth/logoutSign out and revoke the sessionsigned in

    Responses

    204 Successful Response

  • POST/api/v1/auth/logout-allSign out of all devicessigned in

    Responses

    204 Successful Response

  • GET/api/v1/auth/meCurrent user, organisation, roles and permissionssigned in

    Responses

    200 Successful Response

  • GET/api/v1/auth/onboardingIdentity waiting to create an organisationonboarding

    The newly authenticated identity behind the onboarding cookie (no session exists yet).

    Responses

    200 Successful Response

  • GET/api/v1/auth/providersAvailable sign-in providerspublic

    Responses

    200 Successful Response

  • POST/api/v1/auth/signupCreate an account; emails a verification codepublic

    Request body SignupIn

    NameTypeRequiredNotes
    emailstring (email)yes0–254 characters
    namestringyes2–120 characters
    passwordstringyes0–256 characters
    consentbooleannodefault false
    turnstile_tokenstring | nullno0–2048 characters
    websitestringno0–200 characters; default ""

    Responses

    202 Successful Response422 Validation Error

  • POST/api/v1/auth/signup/resendSend a new verification code (60-second cooldown)public

    Request body EmailIn

    NameTypeRequiredNotes
    emailstring (email)yes0–254 characters

    Responses

    202 Successful Response422 Validation Error

  • POST/api/v1/auth/signup/verifyVerify the emailed code and activate the accountpublic

    Request body VerifyIn

    NameTypeRequiredNotes
    emailstring (email)yes0–254 characters
    codestringyes6–12 characters

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/auth/switch-tenantSwitch to another organisation you belong tosigned in

    Request body SwitchIn

    NameTypeRequiredNotes
    tenant_idstring (uuid)yes

    Responses

    204 Successful Response422 Validation Error

  • POST/api/v1/identities/tokenExchange agent client credentials for a short-lived, audience-bound workload tokenclient credentials

    Request body TokenIn

    NameTypeRequiredNotes
    grant_type"client_credentials"yes
    client_idstringyes0–80 characters
    client_secretstringyes0–200 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/tenants/currentCurrent Tenanttenant:read

    Responses

    200 Successful Response

  • PATCH/api/v1/tenants/currentUpdate Tenanttenant:manage

    Request body TenantPatch

    NameTypeRequiredNotes
    namestring | nullno2–200 characters

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/tenants/onboardCreate an organisationonboarding

    Callable by a signed-in user (creates an additional organisation) or by a newly authenticated OIDC identity without an organisation (short-lived signed onboarding cookie).

    Request body OnboardIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    slugstringyes3–63 characters
    primary_regionuk-south | eu-west | us-eastyes
    admin_display_namestringyes2–200 characters

    Responses

    201 Successful Response422 Validation Error

Users, roles and settings

People in your organisation, roles and permissions, notifications and settings.

  • GET/api/v1/notificationsNotificationssigned in

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 20

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/notifications/{notification_id}/readMark Readsigned in

    Parameters

    NameTypeRequiredNotes
    notification_id (path)string (uuid)yes

    Responses

    204 Successful Response422 Validation Error

  • GET/api/v1/rolesList Rolesrole:read

    Responses

    200 Successful Response

  • GET/api/v1/roles/permissionsPermission catalogue and role matrixrole:read

    Responses

    200 Successful Response

  • GET/api/v1/settingsGet Settings Routesettings:read

    Responses

    200 Successful Response

  • PATCH/api/v1/settingsPatch Settingssettings:manage

    Request body SettingsPatch

    NameTypeRequiredNotes
    content_retentionmetadata_only | redacted_excerpts | nullno
    approval_ttl_secondsinteger | nullno60 to 86400

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/usersList Usersuser:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    q (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/usersInvite Useruser:manage

    Request body UserIn

    NameTypeRequiredNotes
    emailstring (email)yes
    display_namestringyes2–200 characters
    rolesstring[]yes

    Responses

    201 Successful Response422 Validation Error

  • PATCH/api/v1/users/{user_id}Patch Useruser:manage

    Parameters

    NameTypeRequiredNotes
    user_id (path)string (uuid)yes

    Request body UserPatch

    NameTypeRequiredNotes
    rolesstring[] | nullno
    statusactive | disabled | nullno
    display_namestring | nullno

    Responses

    200 Successful Response422 Validation Error

Agent registry and identities

Registering agents, owners and versions; workload identities, delegations and permissions.

  • GET/api/v1/agentsList Agentsagent:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    q (query)string | nullno
    environment (query)string | nullno
    status (query)string | nullno
    risk_band (query)string | nullno
    source (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agentsCreate Agentagent:write

    Request body AgentIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    slugstring | nullno0–100 characters
    descriptionstringno0–4000 characters; default ""
    purposestringno0–4000 characters; default ""
    frameworkstringno0–64 characters; default "custom"
    environmentproduction | staging | developmentnodefault "development"
    business_unitstring | nullno0–120 characters
    criticalitylow | medium | high | criticalnodefault "medium"
    data_classificationpublic | internal | confidential | personal | regulated | restrictednodefault "internal"
    internet_exposurenone | controlled | publicnodefault "none"
    code_executionnone | sandboxed | privilegednodefault "none"
    persistent_memorynone | bounded | unboundednodefault "none"
    human_approval_coveragestrong | partial | nonenodefault "none"
    tagsstring[]no
    ownersOwnerIn[]no

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/agents/{agent_id}Get Agentagent:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • PATCH/api/v1/agents/{agent_id}Patch Agentagent:write

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes
    If-Match (header)string | nullno

    Request body AgentPatch

    NameTypeRequiredNotes
    namestring | nullno2–200 characters
    descriptionstring | nullno0–4000 characters
    purposestring | nullno0–4000 characters
    frameworkstring | nullno
    environmentproduction | staging | development | nullno
    business_unitstring | nullno
    criticalitylow | medium | high | critical | nullno
    data_classificationpublic | internal | confidential | personal | regulated | restricted | nullno
    internet_exposurenone | controlled | public | nullno
    code_executionnone | sandboxed | privileged | nullno
    persistent_memorynone | bounded | unbounded | nullno
    human_approval_coveragestrong | partial | none | nullno
    gateway_enforcedboolean | nullno
    tagsstring[] | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/attestAttestagent:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body AttestIn

    NameTypeRequiredNotes
    statementstringyes10–2000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/agents/{agent_id}/containmentContainment Historyagent:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/delegationsAdd Delegationidentity:manage

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body DelegationIn

    NameTypeRequiredNotes
    principal_refstringyes3–320 characters
    display_namestringyes1–200 characters
    principal_typeuser | servicenodefault "user"
    scopesstring[]yes
    expires_atstring (date-time) | nullno

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/gateway-accessGateway Accessagent:control

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body GatewayAccessIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    enabledbooleanyes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/identitiesIssue Identityidentity:manage

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/ownersAdd Owneragent:write

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body OwnerAdd

    NameTypeRequiredNotes
    namestringyes1–200 characters
    emailstring (email)yes
    owner_typeaccountable | technical | businessnodefault "accountable"

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/permissionsGrantidentity:manage

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body GrantIn

    NameTypeRequiredNotes
    target_kindtool | api_resource | data_resource | credential | modelyes
    target_idstring (uuid)yes
    actionsstring[]yes
    delegatedbooleannodefault false
    constraintsobjectno
    expires_atstring (date-time) | nullno
    identity_idstring (uuid) | nullno

    Responses

    201 Successful Response422 Validation Error

  • DELETE/api/v1/agents/{agent_id}/permissions/{binding_id}Revoke Permissionidentity:manage

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes
    binding_id (path)string (uuid)yes
    reason (query)string | nullno0–2000 characters

    Responses

    204 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/restoreRestoreagent:control

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/revokePermanently revoke the agent and its identitiesagent:control

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/revoke-sessionsRevoke Sessionsagent:control

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/suspendKill switch: suspend the agent, revoke sessions and cancel pending approvalsagent:control

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/agents/{agent_id}/versionsAdd Versionagent:write

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body cydra__api__v1__registry__VersionIn

    NameTypeRequiredNotes
    version_labelstringyes1–64 characters
    model_idstring (uuid) | nullno
    manifestobjectno
    change_summarystringno0–2000 characters; default ""

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/identitiesList Identitiesidentity:read

    Parameters

    NameTypeRequiredNotes
    agent_id (query)string (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/identities/{identity_id}/revokeRevoke Identityidentity:manage

    Parameters

    NameTypeRequiredNotes
    identity_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

Inventory

Models, MCP servers, tools, API and data resources, and credential references.

  • GET/api/v1/mcp-serversList Serversinventory:read

    Responses

    200 Successful Response

  • POST/api/v1/mcp-serversCreate Serverinventory:write

    Request body ServerIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    endpointstringyes8–500 characters
    transportstreamable_http | sse | stdionodefault "streamable_http"
    auth_typestringnodefault "oauth"
    publisherstring | nullno

    Responses

    201 Successful Response422 Validation Error

  • PATCH/api/v1/mcp-servers/{server_id}Approve, distrust or quarantine an MCP serverinventory:control

    Parameters

    NameTypeRequiredNotes
    server_id (path)string (uuid)yes

    Request body ServerPatch

    NameTypeRequiredNotes
    trust_stateapproved | unknown | unsigned | quarantinedyes
    reasonstringyes5–2000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/modelsList Modelsinventory:read

    Responses

    200 Successful Response

  • POST/api/v1/modelsCreate Modelinventory:write

    Request body ModelIn

    NameTypeRequiredNotes
    providerstringyes2–64 characters
    model_namestringyes1–200 characters
    model_versionstring | nullno
    hostingsaas | private | customer_hostednodefault "saas"
    data_policystringnodefault "unknown"

    Responses

    201 Successful Response422 Validation Error

  • PATCH/api/v1/models/{model_id}Patch Modelinventory:write

    Parameters

    NameTypeRequiredNotes
    model_id (path)string (uuid)yes

    Request body ModelPatch

    NameTypeRequiredNotes
    approvedboolean | nullno
    max_data_classificationpublic | internal | confidential | personal | regulated | restricted | nullno
    data_policystring | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/resourcesList Resourcesinventory:read

    Responses

    200 Successful Response

  • POST/api/v1/resources/apisCreate Api Resourceinventory:write

    Request body ApiResourceIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    systemstringyes2–200 characters
    base_urlstringyes8–500 characters
    auth_typestringnodefault "oauth_client_credentials"
    criticalitylow | medium | high | criticalnodefault "medium"

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/resources/credentialsList Credentialsinventory:read

    Responses

    200 Successful Response

  • POST/api/v1/resources/credentialsCreate Credentialintegration:manage

    Request body CredentialIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    providervault | aws_secrets_manager | azure_key_vault | gcp_secret_manager | env | mockyes
    secret_pathstringyesReference only; never the secret itself 1–500 characters
    credential_typeapi_key | oauth_client | tokennodefault "api_key"
    scopestringnodefault ""
    sharedbooleannodefault false
    rotation_interval_daysinteger | nullno1 to 730

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/resources/credentials/{credential_id}/actionCredential Actionagent:control

    Parameters

    NameTypeRequiredNotes
    credential_id (path)string (uuid)yes

    Request body CredentialActionIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    actionrevoke | rotateyes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/resources/dataCreate Data Resourceinventory:write

    Request body DataResourceIn

    NameTypeRequiredNotes
    namestringyes2–200 characters
    kinddatabase | bucket | saas | dataset | document_storenodefault "database"
    systemstringyes2–200 characters
    classificationpublic | internal | confidential | personal | regulated | restrictednodefault "internal"
    contains_personal_databooleannodefault false
    regionstring | nullno

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/toolsList Toolsinventory:read

    Parameters

    NameTypeRequiredNotes
    mcp_server_id (query)string (uuid) | nullno
    privilege_class (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/toolsCreate Toolinventory:write

    Request body ToolIn

    NameTypeRequiredNotes
    tool_keystringyes
    namestringyes2–200 characters
    descriptionstringno0–4000 characters; default ""
    mcp_server_idstring (uuid) | nullno
    api_resource_idstring (uuid) | nullno
    data_resource_idstring (uuid) | nullno
    operationsstring[]no
    privilege_classread | write | destructive | financial | adminnodefault "read"
    approval_classnone | single | dualnodefault "none"
    idempotentbooleannodefault true
    input_schemaobjectno
    credential_ref_idstring (uuid) | nullno

    Responses

    201 Successful Response422 Validation Error

  • PATCH/api/v1/tools/{tool_id}Reclassify a tool (Cydra-assigned privilege overrides server annotations)inventory:write

    Parameters

    NameTypeRequiredNotes
    tool_id (path)string (uuid)yes

    Request body ToolPatch

    NameTypeRequiredNotes
    privilege_classread | write | destructive | financial | admin | nullno
    approval_classnone | single | dual | nullno
    rate_limit_per_minuteinteger | nullno1 to 10000
    credential_ref_idstring (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/tools/{tool_id}/blockBlock Toolinventory:control

    Parameters

    NameTypeRequiredNotes
    tool_id (path)string (uuid)yes

    Request body BlockIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    blockedbooleanyes

    Responses

    200 Successful Response422 Validation Error

Agent Security Graph

Nodes and edges, paths, transitive access, blast radius and high-risk paths.

  • GET/api/v1/graphGraph nodes and edges with search, filters and point-in-time viewgraph:read

    Parameters

    NameTypeRequiredNotes
    kinds (query)string | nullno
    q (query)string | nullno
    risk_levels (query)string | nullno
    at (query)string (date-time) | nullno
    limit (query)integernodefault 2000

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/agents/{agent_id}Graph node for an agentgraph:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/exportExportgraph:export

    Parameters

    NameTypeRequiredNotes
    format (query)json | csvnodefault "json"
    part (query)nodes | edgesnodefault "nodes"
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/high-risk-pathsHigh Riskgraph:read

    Parameters

    NameTypeRequiredNotes
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/nodes/{node_id}Graph Nodegraph:read

    Parameters

    NameTypeRequiredNotes
    node_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/nodes/{node_id}/accessTransitive access analysisgraph:read

    Parameters

    NameTypeRequiredNotes
    node_id (path)string (uuid)yes
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/nodes/{node_id}/blast-radiusBlastgraph:read

    Parameters

    NameTypeRequiredNotes
    node_id (path)string (uuid)yes
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/nodes/{node_id}/neighboursNeighboursgraph:read

    Parameters

    NameTypeRequiredNotes
    node_id (path)string (uuid)yes
    depth (query)integernodefault 1
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/graph/pathShortest path between two nodesgraph:read

    Parameters

    NameTypeRequiredNotes
    source (query)string (uuid)yes
    target (query)string (uuid)yes
    directed (query)booleannodefault false
    at (query)string (date-time) | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/graph/rebuildRe-project the graph from the registryrisk:configure

    Responses

    200 Successful Response

Risk, findings and telemetry

Agent Risk Scores and what-if analysis, findings and the telemetry explorer.

  • GET/api/v1/findingsList Findingsfinding:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    status (query)string | nullno
    severity (query)string | nullno
    agent_id (query)string (uuid) | nullno
    category (query)string | nullno
    q (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/findings/{finding_id}Get Findingfinding:read

    Parameters

    NameTypeRequiredNotes
    finding_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • PATCH/api/v1/findings/{finding_id}Patch Findingfinding:write

    Parameters

    NameTypeRequiredNotes
    finding_id (path)string (uuid)yes

    Request body FindingPatch

    NameTypeRequiredNotes
    statusopen | in_progress | resolved | accepted | false_positive | nullno
    assigned_tostring | nullno0–320 characters
    notestring | nullno0–2000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/risks/agents/{agent_id}Latest explainable ARSrisk:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/risks/agents/{agent_id}/historyHistoryrisk:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes
    days (query)integernodefault 90

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/risks/agents/{agent_id}/recalculateRecalcrisk:configure

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/risks/agents/{agent_id}/what-ifEffect of proposed remediation (no changes saved)risk:read

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body WhatIfIn

    NameTypeRequiredNotes
    internet_exposurenone | controlled | public | nullno
    code_executionnone | sandboxed | privileged | nullno
    approval_coveragestrong | partial | none | nullno
    persistent_memorynone | bounded | unbounded | nullno
    productionboolean | nullno
    has_high_impact_toolsboolean | nullno
    has_privileged_toolsboolean | nullno
    has_write_toolsboolean | nullno
    gateway_enforcedboolean | nullno
    attestation_currentboolean | nullno
    delegation_breadthnone | moderate | broad | nullno
    max_data_classificationpublic | internal | confidential | personal | regulated | restricted | nullno
    resolve_findingsbooleannodefault false
    clear_detectionsbooleannodefault false
    approve_mcp_serversbooleannodefault false
    use_scoped_identitybooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/risks/rulesetRisk factor definitions and weightsrisk:read

    Responses

    200 Successful Response

  • PATCH/api/v1/risks/ruleset/{factor_key}Tenant overlay: enable or disable a factorrisk:configure

    Parameters

    NameTypeRequiredNotes
    factor_key (path)stringyes

    Request body FactorToggle

    NameTypeRequiredNotes
    enabledbooleanyes
    reasonstringyes5–1000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/telemetryTelemetrytelemetry:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 100
    cursor (query)string | nullno
    event_type (query)string | nullno
    agent_id (query)string (uuid) | nullno
    severity (query)string | nullno
    since (query)string (date-time) | nullno
    until (query)string (date-time) | nullno
    q (query)string | nullno
    correlation_id (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/telemetry/statsTelemetry Statstelemetry:read

    Parameters

    NameTypeRequiredNotes
    hours (query)integernodefault 24

    Responses

    200 Successful Response422 Validation Error

Policies

Policy versions, four-eyes publishing and decision simulation.

  • GET/api/v1/policiesList Policiespolicy:read

    Responses

    200 Successful Response

  • POST/api/v1/policiesCreate Policypolicy:write

    Request body PolicyIn

    NameTypeRequiredNotes
    keystringyes3–100 characters
    namestringyes3–200 characters
    descriptionstringno0–2000 characters; default ""
    criticalbooleannodefault false
    rulesRule[]yes
    change_notestringno0–2000 characters; default "Initial draft"

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/policies/{policy_id}Get Policypolicy:read

    Parameters

    NameTypeRequiredNotes
    policy_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/policies/{policy_id}/statusSet Statuspolicy:publish

    Parameters

    NameTypeRequiredNotes
    policy_id (path)string (uuid)yes
    If-Match (header)string | nullno

    Request body StatusIn

    NameTypeRequiredNotes
    statusactive | inactiveyes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/policies/{policy_id}/versionsCreate a draft version (requires If-Match with the policy version)policy:write

    Parameters

    NameTypeRequiredNotes
    policy_id (path)string (uuid)yes
    If-Match (header)string | nullno

    Request body cydra__api__v1__gateway__VersionIn

    NameTypeRequiredNotes
    rulesRule[]yes
    change_notestringyes3–2000 characters

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/policies/{policy_id}/versions/{number}/publishPublish a draft (four-eyes: publisher must differ from author)policy:publish

    Parameters

    NameTypeRequiredNotes
    policy_id (path)string (uuid)yes
    number (path)integeryes
    If-Match (header)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/policies/operatorsOperatorspolicy:read

    Responses

    200 Successful Response

  • POST/api/v1/policies/simulateDry-run a decision (nothing is persisted or executed)action:test

    Request body SimulateIn

    NameTypeRequiredNotes
    agent_idstring (uuid)yes
    toolstringyes1–200 characters
    operationstringno0–100 characters; default "invoke"
    targetstringno0–500 characters; default ""
    parametersobjectno
    environmentstring | nullno
    on_behalf_ofstring | nullno
    justificationstring | nullno0–2000 characters
    draft_rulesRule[] | nullnoEvaluate these rules instead of the active set
    approval_presentbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

Gateway: actions, decisions and approvals

Submitting actions (agents), the testing console, decisions, executions and approvals.

  • GET/api/v1/actionsList Actionsaction:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    agent_id (query)string (uuid) | nullno
    state (query)string | nullno
    decision (query)string | nullno
    tool (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/actionsGateway: submit a consequential action for authorisation (agent workload token)agent token

    Parameters

    NameTypeRequiredNotes
    Idempotency-Key (header)stringyes8–200 characters

    Request body ActionIn

    NameTypeRequiredNotes
    toolstringyes1–200 characters
    operationstringno1–100 characters; default "invoke"
    targetstringyes1–500 characters
    parametersobjectno
    environmentproduction | staging | development | nullno
    on_behalf_ofstring | nullno0–320 characters
    justificationstring | nullno0–2000 characters
    approval_tokenstring | nullno0–4000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/actions/{action_id}Get Actionaction:read

    Parameters

    NameTypeRequiredNotes
    action_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/actions/{action_id}/cancelCancelaction:control

    Parameters

    NameTypeRequiredNotes
    action_id (path)string (uuid)yes

    Request body ReasonIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/actions/consoleGateway testing console: submit an action on behalf of an agent (simulated executors)action:test

    Parameters

    NameTypeRequiredNotes
    Idempotency-Key (header)stringyes8–200 characters

    Request body ConsoleActionIn

    NameTypeRequiredNotes
    toolstringyes1–200 characters
    operationstringno1–100 characters; default "invoke"
    targetstringyes1–500 characters
    parametersobjectno
    environmentproduction | staging | development | nullno
    on_behalf_ofstring | nullno0–320 characters
    justificationstring | nullno0–2000 characters
    approval_tokenstring | nullno0–4000 characters
    agent_idstring (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/actions/deny-classContainment: deny an action class for all agents or one agentaction:control

    Request body DenyClassIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    privilege_classread | write | destructive | financial | adminyes
    agent_idstring (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/actions/deny-class/liftLiftaction:control

    Request body LiftIn

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    rule_idstringyes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/actions/gateway/{action_id}Gateway: action status for the requesting agent, including a single-use approval token once approvedagent token

    Parameters

    NameTypeRequiredNotes
    action_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/approvalsList Approvalsapproval:read

    Parameters

    NameTypeRequiredNotes
    status (query)string | nullnodefault "pending"
    limit (query)integernodefault 50
    cursor (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/approvals/{approval_id}Get Approvalapproval:read

    Parameters

    NameTypeRequiredNotes
    approval_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/approvals/{approval_id}/decisionDecide Approvalapproval:decide

    Parameters

    NameTypeRequiredNotes
    approval_id (path)string (uuid)yes

    Request body DecisionIn

    NameTypeRequiredNotes
    decisionapprove | rejectyes
    reasonstringyes3–2000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/decisionsList Decisionsaction:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    decision (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/executionsList Executionsaction:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

Evidence and governance

The evidence chain, frameworks and controls, exceptions, remediation and the audit log.

  • GET/api/v1/auditAuditaudit:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    action (query)string | nullno
    actor_id (query)string | nullno
    outcome (query)string | nullno
    target_id (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/controls/{control_id}Controlgovernance:read

    Parameters

    NameTypeRequiredNotes
    control_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/controls/{control_id}/mappingsAdd Mappinggovernance:write

    Parameters

    NameTypeRequiredNotes
    control_id (path)string (uuid)yes

    Request body MappingIn

    NameTypeRequiredNotes
    evidence_event_typestringyes3–80 characters
    conditionobjectno
    rationalestringyes5–1000 characters

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/evidenceList Evidenceevidence:read

    Parameters

    NameTypeRequiredNotes
    limit (query)integernodefault 50
    cursor (query)string | nullno
    event_type (query)string | nullno
    agent_id (query)string (uuid) | nullno
    control_ref (query)string | nullno
    action_request_id (query)string (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/evidence/{evidence_id}Get Evidenceevidence:read

    Parameters

    NameTypeRequiredNotes
    evidence_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/evidence/verifyRecompute the tenant's hash-linked evidence chainevidence:read

    Responses

    200 Successful Response

  • GET/api/v1/exceptionsList Exceptionsgovernance:read

    Parameters

    NameTypeRequiredNotes
    status (query)string | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/exceptionsRequest Exceptiongovernance:write

    Request body ExceptionIn

    NameTypeRequiredNotes
    control_idstring (uuid)yes
    agent_idstring (uuid) | nullno
    titlestringyes5–300 characters
    justificationstringyes20–4000 characters
    compensating_controlsstringno0–4000 characters; default ""
    owner_emailstring (email)yes
    expires_atstring (date-time)yes

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/exceptions/{exception_id}/decisionDecide Exceptionexception:approve

    Parameters

    NameTypeRequiredNotes
    exception_id (path)string (uuid)yes

    Request body ExceptionDecision

    NameTypeRequiredNotes
    decisionapprove | rejectyes
    notestringyes3–2000 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/governance/frameworksFrameworks with control coverage and readinessgovernance:read

    Responses

    200 Successful Response

  • GET/api/v1/governance/remediationRemediationgovernance:read

    Parameters

    NameTypeRequiredNotes
    status (query)string | nullno
    agent_id (query)string (uuid) | nullno

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/governance/remediationCreate Taskgovernance:write

    Request body TaskIn

    NameTypeRequiredNotes
    titlestringyes5–300 characters
    descriptionstringno0–4000 characters; default ""
    control_idstring (uuid) | nullno
    agent_idstring (uuid) | nullno
    finding_idstring (uuid) | nullno
    assignee_emailstring (email) | nullno
    due_atstring (date-time) | nullno
    prioritylow | medium | high | criticalnodefault "medium"

    Responses

    201 Successful Response422 Validation Error

  • PATCH/api/v1/governance/remediation/{task_id}Patch Taskgovernance:write

    Parameters

    NameTypeRequiredNotes
    task_id (path)string (uuid)yes

    Request body TaskPatch

    NameTypeRequiredNotes
    statusopen | in_progress | done | cancelled | nullno
    assignee_emailstring (email) | nullno

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/governance/systemsAI-system classification registergovernance:read

    Responses

    200 Successful Response

  • POST/api/v1/governance/systems/{agent_id}/classifyClassify an AI system; returns remediation tasks generated for evidence gapsgovernance:write

    Parameters

    NameTypeRequiredNotes
    agent_id (path)string (uuid)yes

    Request body ClassifyIn

    NameTypeRequiredNotes
    classificationunclassified | minimal | limited | high | prohibitedyes
    rationalestringyes10–4000 characters

    Responses

    200 Successful Response422 Validation Error

Integrations and reports

Integrations, discovery connectors and reports.

  • POST/api/v1/connectors/{connector_id}/enabledConnector Enabledintegration:manage

    Parameters

    NameTypeRequiredNotes
    connector_id (path)string (uuid)yes

    Request body ConnectorEnable

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    enabledbooleanyes

    Responses

    200 Successful Response422 Validation Error

  • POST/api/v1/connectors/{connector_id}/runRun discovery nowconnector:run

    Parameters

    NameTypeRequiredNotes
    connector_id (path)string (uuid)yes

    Request body RunIn

    NameTypeRequiredNotes
    idempotency_keystring | nullno0–200 characters

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/connectors/{connector_id}/runsRunsintegration:read

    Parameters

    NameTypeRequiredNotes
    connector_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/dashboardExecutive security dashboard metricsagent:read

    Parameters

    NameTypeRequiredNotes
    days (query)integernodefault 30

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/integrationsList Integrationsintegration:read

    Responses

    200 Successful Response

  • POST/api/v1/integrationsCreate Integrationintegration:manage

    Request body IntegrationIn

    NameTypeRequiredNotes
    kindopenai | anthropic | mcp | entra_id | github | webhookyes
    namestringyes2–200 characters
    modelive | mocknodefault "mock"
    configobjectno
    credential_ref_idstring (uuid) | nullno

    Responses

    201 Successful Response422 Validation Error

  • POST/api/v1/integrations/{integration_id}/statusIntegration Statusintegration:manage

    Parameters

    NameTypeRequiredNotes
    integration_id (path)string (uuid)yes

    Request body IntegrationStatus

    NameTypeRequiredNotes
    reasonstringyes
    confirmbooleannodefault false
    statusactive | disabledyes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/integrations/catalogueCatalogueintegration:read

    Responses

    200 Successful Response

  • GET/api/v1/reportsList Reportsreport:read

    Responses

    200 Successful Response

  • POST/api/v1/reportsCreate Reportreport:create

    Request body ReportIn

    NameTypeRequiredNotes
    kindexecutive_summary | agent_inventory | risk_register | governance_readiness | evidence_bundleyes
    parametersobjectno

    Responses

    201 Successful Response422 Validation Error

  • GET/api/v1/reports/{report_id}/downloadDownloadreport:read

    Parameters

    NameTypeRequiredNotes
    report_id (path)string (uuid)yes

    Responses

    200 Successful Response422 Validation Error

  • GET/api/v1/reports/kindsReport Kindsreport:read

    Responses

    200 Successful Response

Public website endpoints

Unauthenticated endpoints used by the website (rate-limited).

  • GET/api/v1/public/form-configPublic site settings: Turnstile site key, analytics and docs URLpublic

    Responses

    200 Successful Response

  • POST/api/v1/public/leadsWebsite request: demo, contact, support or risk self-assessmentpublic

    Request body LeadIn

    NameTypeRequiredNotes
    kinddemo | assessmentyes
    request_typedemo | risk-assessment | support | partnership | other | nullno
    topicdemo | contact | design-partner | mcp-security-workshop | architecture-consultation | governance-readiness-review | cydrasoc-demo | devsec-pilot | industry-discovery | security-packs-pilot | industry-packs-pilot | security-report | nullno
    namestringyes2–120 characters
    emailstring (email)yes0–254 characters
    companystringyes2–160 characters
    rolestring | nullno0–120 characters
    messagestring | nullno0–4000 characters
    consentbooleannodefault false
    source_pagestring | nullno0–200 characters
    turnstile_tokenstring | nullno0–2048 characters
    assessmentobject | nullno
    websitestringno0–200 characters; default ""

    Responses

    202 Successful Response422 Validation Error

  • GET/api/v1/public/pricingPublished indicative pricing (schema version 1)public

    Responses

    200 Successful Response

  • POST/api/v1/public/pricing-quoteRequest a pricing quotationpublic

    Request body QuoteIn

    NameTypeRequiredNotes
    full_namestringyes2–120 characters
    work_emailstring (email)yes0–254 characters
    companystringyes2–160 characters
    job_titlestringyes2–120 characters
    countrystringyes2–80 characters
    estimated_agentsintegeryes1 to 1000000
    tierstring | nullno0–40 characters
    productsstring[]no
    deployment_modelstringyes0–40 characters
    retention_periodstringyes0–40 characters
    messagestringno0–4000 characters; default ""
    privacy_consentbooleanyes
    websitestringno0–200 characters; default ""

    Responses

    202 Successful Response422 Validation Error

Applies to the CydraLabs proof-of-concept platform. Last updated 4 October 2026. Questions or corrections: contact us.