Build on the platform. Automate what you operate.
A public REST API on api.open.ch, one versioned service at a time: fleet inventory, Mission Control ticketing, threat protection. Validation-first writes, full audit trail, machine-readable spec. Self-serve, no black boxes.
https://api.open.chAuthorization: Bearer <token>12 hoursOverview
The Open Systems Public API is a resource-oriented REST API. It accepts and returns JSON, authenticates with short-lived bearer tokens, and uses standard HTTP verbs and status codes. Each service ships its own independently versioned API under a common base URL, and the full endpoint reference is generated straight from the OpenAPI specification.
HTTPS only · JSON request & response bodieshttps://api.open.ch/api/<service>/v1/<resource> · each path versioned independentlyOpenAPI 3.1 · Download the specification (JSON) · full reference in the API Knowledge Center (Mission Control)snake_case fields · IDs as strings · errors per RFC 9457Getting started
Four steps from zero to your first authenticated call. Everything is self-serve from Mission Control, the Open Systems Customer Portal.
client_id and client_secret. See API users →company_id. Find it in the Customer Portal URL (/companies/<company_id>) or ask your Technical Account Manager. See Fleet →Authorization header. See Conventions →Request
API users
API Users are dedicated machine identities, separate from the people who log in to the Customer Portal. Each one carries its own client credentials and a scoped set of permissions.
client_secret is shown once - save it.403.
403.Keep credentials out of public repositories and client-side code. If they leak, revoke or regenerate them immediately.
Authentication
Every request is authenticated with a bearer token obtained via the OAuth 2.0 client-credentials flow. Tokens are validated by the Open Systems Identity Platform and expire after 12 hours; request a new one the same way.
Request
Response · 200
Authorization: Bearer <api_token> on every request401 UnauthorizedConventions
Consistent rules across every service: predictable pagination, snake_case fields, string IDs, and structured errors.
?limit=100&offset=0, stable datasets) or cursor-based (?limit=100&cursor=…, large changing datasets), per endpointorder_by and order (ASC | DESC)snake_case, in bodies and query parameters"1234567"/companies/{company_id}/… · resource IDs via the Fleet APIOffset-based
Cursor-based
Reads & writes · CQRS
Writes follow the Command Query Responsibility Segregation pattern: every modification runs through an asynchronous change system that validates, audits and rolls out your configuration. You get a change ID to track, and a dry-run /validate twin for every write endpoint - so you can test a change before it touches anything.
/validate counterpart: same request, full validation, zero side effectsPOST · PUT · PATCH · DELETE return a change_id, not the modified dataCOMPLETED or FAILEDWrite response
Status response
Errors
Standard HTTP status codes, with a structured JSON body per RFC 9457 so you can handle failures programmatically. Every error carries a trace_id - include it when you contact support.
Example · 500
Common codes
400 Bad request401 Unauthorized403 Forbidden404 Not found429 Rate limited451 Inappropriate content500 Server error503 UnavailableRate limits
Limits protect availability for everyone and are applied per authentication token and per API path.
429 Too Many Requests · responses may include usage and reset headers429 gracefullyVersioning
Versions live in the URL and each path is versioned independently. Within a version, backwards compatibility is maintained; breaking changes ship as a new major version.
/api/ticketing/v1/… · independent per pathv2, v3)EA may change without notice - do not use in productionDeprecation header with the end-of-life date (RFC 9745)Fleet
Your inventory as an API: companies, hosts and services, with the identifiers (company_id, host_id, service_id) that scope requests across every other API.
Request
Excerpt - the complete endpoint list (including sites and services) is in the OpenAPI specification.
Ticketing
Drive Mission Control programmatically: create and update tickets, follow events, approve change requests and exchange attachments - the same workflows your operations teams already run, as an API.
customer_referenceAPPROVED · DENIED · ON_HOLDfile form-data part) · returns 201Excerpt - the complete endpoint list with all parameters and schemas is in the OpenAPI specification.
Threat Protection
Manage block lists and exclusion lists as code: bulk create, modify and delete entries for IPs, domains and URLs across categories like MALWARE, PHISHING and SPAM. All writes are asynchronous CQRS changes with a /validate dry run.
POST …/block-list-entries/validate to dry-runRequest body
Response
/validate twin available/validate twin availableExcerpt - the complete endpoint list with all parameters and schemas is in the OpenAPI specification.
Security Investigations
Work NDR security investigations programmatically: modify the status of hosts that triggered an investigation, with the same validate-first CQRS write flow as every other API. Requires write access on the Network Detection and Response scope.
/validate twin availableExcerpt - the complete endpoint list with all parameters and schemas is in the OpenAPI specification.
Firewall
Read your managed firewall configuration programmatically: objects, policies with their forward and NAT rules, plus IANA reference lookups for IP protocols and ICMP types.
/policies/{policy_id} returns a policy with all rules/ip-protocols · /icmp-types · /icmpv6-typesThe complete endpoint list with all parameters and schemas is in the OpenAPI specification.
Logs
Retrieve platform and security logs programmatically and feed them into your own analytics or SIEM stack.
The Logs API is a different type of API and not part of the OpenAPI specification - it is documented in the Mission Control Help Section.
Self-Service
The change system behind every write. Track any submitted change to completion - the audit-friendly backbone of the CQRS pattern.
RUNNING → COMPLETED | FAILEDExcerpt - the complete endpoint list (including change search) is in the OpenAPI specification.
Roadmap
The API surface grows service by service - same base URL, same conventions, same validate-first write flow. What shipped recently, what we are building, and how you shape what comes next.
Security Investigations API
Work NDR investigations programmatically.
Logs API
Platform and security logs for your own stack.
Threat Protection API
Bulk block and exclusion lists with /validate dry runs.
Change tracking
Follow every write to COMPLETED via the Self-Service API.
OpenAPI specification
Downloadable spec - generate typed clients in any language.
Policy & ZTNA
Zero-trust access policy as code: declarative rules, validated before rollout, driven from your CI pipeline.
Web security
Programmatic control over secure web gateway and cloud-app rules across every user and location.
Tell us what you need
Your integration needs an API we don't offer yet? Open a ticket in the Mission Control Portal - customer demand drives our sequence.
Early access program
New endpoints ship behind EA flags before general availability. Ask your Technical Account Manager to get in early. See Versioning →
OpenAPI & clients
The endpoint reference is generated from our OpenAPI specification - every request and response body fully typed and documented. Use the spec to generate a client in your language of choice.
Tooling
First-class tooling is on its way. Until then, the OpenAPI specification is the recommended path to typed clients in any language.
Terraform Coming soon
Declarative infrastructure-as-code for your platform configuration.
registry.terraform.ioMigrating from the Legacy APIs
Integrations built on api.open-systems.com keep working until end of 2026, but new development belongs on api.open.ch. The essentials of the move:
api.open-systems.com → api.open.chcamelCase → snake_case · integer IDs → stringsoffset = (page - 1) * limitRFC 9457)/tickets → Ticketing API · /hosts → Fleet API · /utp → Threat Protection APIchange_id tracking and /validate dry runsThe full migration guide with per-endpoint mappings and field renames lives in the API Knowledge Center in Mission Control.
Support
Run into an issue? Our Mission Control team has your back - the same Level-3 engineers who operate the platform.
trace_id from the error response · request timestamp · endpoint being accessedStart building today.
Create an API user in Mission Control, grab a token, and make your first call in minutes.