API overview
The OSPulse API is a JSON REST API served from https://api.ospulse.app. Every operation
documented here is generated from the same OpenAPI 3.0.1 description the service publishes —
246 operations across 360 schemas — so the reference and the running API cannot drift apart.
Interactive reference
Browse and try every endpoint, with request and response schemas.
Raw OpenAPI document
The machine-readable spec. Feed it to your generator, client, or agent.
Base URL and versioning
All production traffic goes to a single host over HTTPS. Plain HTTP is not served; requests
to http:// are rejected rather than redirected, so a downgraded request never leaks a token.
| Item | Value |
|---|---|
| Base URL | https://api.ospulse.app |
| Version prefix | /api/v1/ |
| Protocol | HTTPS only (TLS) |
| Request encoding | application/json, UTF-8 |
| Response encoding | application/json, UTF-8 |
| Authentication | HTTP Bearer token |
A full URL is therefore the base, the version prefix, and the resource path:
https://api.ospulse.app/api/v1/packages
└──────── base ────────┘└─ prefix ─┘└ path ┘Two surfaces sit outside the /api/v1/ prefix by design, because their paths are fixed by
external standards or by consumers that predate the version prefix:
| Surface | Path | Why |
|---|---|---|
| SCIM 2.0 provisioning | /scim/v2/… | Path shape is mandated by RFC 7644 |
| Public status endpoints | /status/… | Consumed by status pages, feeds, and uptime probes |
See Versioning for what counts as a breaking change and how new versions are introduced.
Authentication
Every endpoint except the health, version, and public status endpoints requires a bearer
token in the Authorization header:
Authorization: Bearer {token}Tokens are created in the app under API tokens in the main navigation
(app.ospulse.app/api-tokens, administrators only), or
through the API itself with POST /api/v1/api-tokens. List them with
GET /api/v1/api-tokens and revoke one with DELETE /api/v1/api-tokens/{apiTokenId}. A
token is scoped to the tenant that created it — there is no cross-tenant token, and no tenant
identifier is sent on the request.
Tokens are shown once
The token value is returned only in the response to POST /api/v1/api-tokens. It is not
recoverable afterwards. Store it in a secret manager, never in source control.
Full detail, including scoping, expiry, and rotation, is in Authentication.
Content types
| Direction | Header | Notes |
|---|---|---|
| Request body | Content-Type: application/json | Required whenever a body is sent. UTF-8 assumed. |
| Response body | application/json | Errors use application/problem+json semantics with the RFC 7807 shape. |
| File uploads | multipart/form-data | Only where explicitly documented, such as SBOM upload. An unsupported media type returns 415. |
| File downloads | Varies | Report, SBOM, and evidence download endpoints stream the generated artefact with its own content type. |
Requests that send a body without a JSON content type are rejected with 415. Bodies that
are syntactically valid JSON but semantically invalid return 400 or 422 — see
Errors.
Your first call
The health endpoint needs no credentials, so it is the fastest way to confirm connectivity before you introduce a token into the equation.
curl https://api.ospulse.app/api/v1/healthThen make an authenticated request. This lists the packages OSPulse tracks for your tenant, five at a time:
curl "https://api.ospulse.app/api/v1/packages?take=5" \
-H "Authorization: Bearer $OSPULSE_TOKEN"Collection endpoints return a page envelope rather than a bare array, so the paging state
travels with the data. Note the counter field differs between endpoints — this one reports
totalReturned, the size of this page, while most collections report an approximate
totalEstimate:
{
"items": [
{
"packageId": "9d3f7c21-8a4b-4e15-b6c0-3f8e2a91d574",
"name": "express",
"ecosystem": "Npm",
"latestVersion": "4.21.2",
"status": "Active",
"sourceRepositoryUrl": "https://github.com/expressjs/express"
}
],
"take": 5,
"skip": 0,
"totalReturned": 5
}See Pagination for the full envelope and an iteration loop.
Resource groups
Endpoints are grouped by the domain object they act on. Each group below links to its area of the interactive reference, where the exact parameters, schemas, and status codes are listed.
| Group | Base path | What it covers |
|---|---|---|
| Repositories | /api/v1/repositories | Import, list, and update tracked repositories; read dependencies, dependency graphs, and risk summaries; trigger a scan. |
| Packages | /api/v1/packages | Package inventory, health scores and history, evidence bundles, risk indicators, usage, replacement candidates, and the watchlist. |
| Scans | /api/v1/scans | Scan status, detail, logs, and cancellation for scans queued against a repository. |
| Alerts | /api/v1/alerts, /api/v1/alert-rules | Read and acknowledge alerts; create, update, and delete the rules that generate them. |
| Vulnerabilities | /api/v1/vulnerabilities, /api/v1/vulnerability-exposures | The vulnerability catalogue, and your tenant's exposures to it, including workflow transitions. |
| Policies | /api/v1/policies, /api/v1/policy-violations | Policy definitions and dry-run testing; violations, their workflow state, and granted exceptions. |
| SBOM | /api/v1/sbom | Import an SBOM, request an export, and download completed export artefacts. |
| CRA | /api/v1/cra | EU Cyber Resilience Act products, releases, findings, reporting clocks, duties, Annex I items, incidents, and evidence packs. |
| Quantum | /api/v1/quantum, /api/v1/repositories/{repositoryId}/quantum | Post-quantum readiness: cryptographic scans, CBOM download, findings, certificates, TLS observations, probe endpoints, scores, and reports. |
| Reports | /api/v1/reports, /api/v1/generated-reports | Report definitions, generation runs, and downloading generated output. |
| Analytics | /api/v1/analytics | Trend series and contributors, peer benchmarking, quarterly summaries, and warehouse export destinations and runs. |
| Compliance | /api/v1/compliance, /api/v1/privacy | Control dashboards and evidence, evidence archives, compliance settings, and data-subject request handling. |
| Integrations | /api/v1/integrations | Connect Slack, Teams, email, and outbound webhooks; test and delete connections. |
| Source Control | /api/v1/source-control | Provider connections and the repositories available to import through each one. |
| Webhooks | /api/v1/webhooks/{provider} | Inbound ingest for GitHub, GitLab, Azure DevOps, and Bitbucket events. |
| Status | /api/v1/status/public, /status | Public component status, incidents, changelog, Atom feed, and subscriptions. |
| Billing | /api/v1/billing | Subscription, plan catalogue, usage, invoices, and hosted checkout or portal sessions. |
| Tenants | /api/v1/tenants/current | Tenant usage counters and quotas, scoring weights, benchmark profile, data export, and deletion. |
| SCIM | /scim/v2 | Standards-based user and group provisioning for identity providers. |
| Audit | /api/v1/audit-log | Query the tenant audit trail and export it. |
| API tokens | /api/v1/api-tokens | Create, list, and revoke the bearer tokens used to call everything above. |
Several smaller groups round out the surface: /api/v1/ai/* for generated summaries,
remediation advice, and natural-language queries; /api/v1/health and /api/v1/version for
liveness; /api/v1/onboarding, /api/v1/feature-flags, /api/v1/settings/retention, and
/api/v1/cli-version for account and client plumbing; and /api/v1/ide/verdicts:batch for
editor integrations.
How this reference is produced
The service emits its OpenAPI description at build time from the same route definitions,
request models, and response models that handle live traffic. That document is published at
/openapi.json and rendered into the
interactive reference.
Consequences worth knowing:
- The spec is the source of truth. If a prose page here and the interactive reference disagree, the reference is correct — tell us so we can fix the prose.
- Schemas are complete. Every request and response body has a named schema in the document, so client generators produce usable types without hand-editing.
- The
serversblock is not the production URL. The generated document carries a local development server entry. Point generated clients athttps://api.ospulse.appexplicitly.
Generating a client
Any OpenAPI 3.0 generator works against /openapi.json. A Python SDK and the
OSPulse CLI are published and maintained by us; for other languages, generate a
client or call the API directly over HTTP.
Reading the rest of the reference
| Page | Answers |
|---|---|
| Conventions | Field naming, timestamps, identifiers, enums, null handling, verb semantics. |
| Errors | Status codes, the RFC 7807 body, validation errors, retry guidance. |
| Pagination | The take/skip model and the items/totalEstimate envelope. |
| Filtering & sorting | Narrowing collections, and how ordering is determined. |
| Rate limits | How throttling is signalled and how to back off. |
| Webhooks | Inbound ingest and outbound delivery. |
| Versioning | Compatibility guarantees and change policy. |
