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

Device Agent API

Overview of the Device Agent API, the push-only JSON protocol behind probo-agent, covering device states, base URLs, and the enrollment lifecycle.

View as Markdown

The Device Agent API is the JSON protocol used by the official probo-agent. You can implement this protocol to enroll devices and report posture from operating systems, appliances, or environments that the official agent does not yet support.

The protocol is deliberately small and push-only. The device initiates every request; Probo cannot send commands, scripts, or check definitions to it.

Append /api/agent/v1 to the origin of the Probo deployment where the device was created.

Deployment Base URL
US cloud https://us.probo.com/api/agent/v1
EU cloud https://eu.probo.com/api/agent/v1
Self-hosted https://probo.example.com/api/agent/v1

The API is intended for native agents, not browser clients, and does not expose cross-origin browser access.

Each device record moves through a small state machine. Only the Device Agent API and administrator revocation change these states after creation.

State Meaning
PENDING Enrollment token issued; no successful heartbeat yet
ACTIVE First heartbeat succeeded; heartbeats and posture uploads are allowed
REVOKED Enrollment ended by an administrator or by /unenroll

The first successful /heartbeat activates a PENDING device. /postures requires ACTIVE. A revoked device cannot be un-revoked; create a new device and enroll again.

The sequence diagram shows enrollment, independent heartbeat and posture schedules, and the two ways an agent enrollment ends.

sequenceDiagram
  actor Admin as Organization administrator
  participant Probo as Probo server
  participant Agent as Device agent

  Admin->>Probo: Create device
  Probo-->>Admin: Server URL and one-shot enrollment token
  Admin->>Agent: Configure server URL and token

  Agent->>Probo: POST /enroll with token
  Probo-->>Agent: Device API key
  Agent->>Probo: POST /heartbeat with API key
  Probo-->>Agent: Device ID, heartbeat interval, posture interval, server time

  par Heartbeat schedule
    loop Every heartbeat_interval_seconds
      Agent->>Probo: POST /heartbeat with device identity
      Probo-->>Agent: Updated intervals and server time
    end
  and Posture schedule
    loop Every posture_interval_seconds
      Agent->>Agent: Run local posture checks
      Agent->>Probo: POST /postures with results
      Probo-->>Agent: 204 No Content
    end
  end

  alt Device is revoked
    Agent->>Probo: POST /heartbeat or /postures
    Probo-->>Agent: 401 Unauthorized
    Agent->>Agent: Stop reporting and delete API key
  else Agent is removed
    Agent->>Probo: POST /unenroll
    Probo-->>Agent: 204 No Content
    Agent->>Agent: Delete local credentials
  end

Heartbeat and posture intervals are separate values returned by every successful heartbeat. Treat each as its own timer. The server returns scheduling metadata, but it never sends work to the device. See Probo Agent security for the security boundary and threat model.

  • Accept the Probo origin and enrollment token as separate inputs.
  • Require HTTPS outside local development and reject server URLs containing credentials, query strings, or fragments.
  • Store the device API key in an OS-appropriate secret store or a file readable only by the service account.
  • Send Content-Type: application/json and Accept: application/json.
  • Identify the implementation with a User-Agent, such as my-probo-agent/1.0.0.
  • Send a successful /heartbeat before the first /postures request.
  • Honor the intervals returned by every successful heartbeat as separate timers.
  • Batch no more than 100 posture results in one request.
  • Do not log enrollment tokens, API keys, or sensitive posture evidence.
  • On 401 Unauthorized after activation, stop reporting and clear the device API key.

Use the official agent as a working reference when implementing the protocol:

Prefer contributing to the official agent when the change belongs in the shared binary. See Contributing to Probo Agent for source paths, DCO requirements, and the security review timeline. Pull requests that touch the device agent can take longer to merge because we review them extensively for endpoint security.

If you need support sooner than the official release cycle allows, implement this API in your own agent instead.