Everything else — a pipeline gate, a chat notification, a ticket created from a
finding — is built out of those two.
There is no CLI
The CI story iscurl, or any HTTP client, against a scoped API key. There is
no trustivan command to install, no binary to pin a version of, and nothing to
keep up to date on a build image. Every example in these docs is a shell
command you can paste.
That is a deliberate trade rather than an omission. A single-endpoint HTTP call
with a bearer token works in every CI system, every language and every
container, and it does not become a supply-chain dependency of the pipeline
whose supply chain you are trying to secure.
The machine API
Base path/api/v1, Authorization: Bearer twk_….
A machine principal has no role. Its authority is exactly the set of scopes
its credential was granted. That is what makes least privilege expressible:
a pipeline key holding scans:create, scans:read and verdicts:request can
gate a build and cannot silence the findings that failed it, because
findings:suppress is a separate scope and was not granted.
Three scopes are not grantable to a key at all — policies:manage,
webhooks:manage and apikeys:manage. Each closes a loop that would otherwise
make the surrounding control meaningless: a build that can rewrite the policy
it is judged by, a credential that can add a destination every future event is
copied to, or one that can mint its own successor.
The practical consequence is a division of labour. A human configures policies,
webhook endpoints and credentials, from the dashboard or a browser session. A
pipeline consumes them.
- API overview — conventions, credentials and the contract.
- Scopes — the full grantable set.
- CI pipelines — the recipe, and it as GitHub Actions and GitLab CI.
Webhooks
Three events, and the set is closed:scan.completed, verdict.recorded,
finding.state_changed. Signed with HMAC-SHA256, delivered at least once with
exponential backoff, and published from a transactional outbox so an event is a
committed row before it is a request.
- Webhooks — the events, the envelope and the guarantees.
- Verify a webhook signature — a working receiver.
What the GitHub connection is
TRUSTIVAN supports GitHub sign-in, and a GitHub App installation whose purpose is authentication and listing the repositories an installation can see. GitLab and Google sign-in exist on the same basis. That is the whole of it, and the distinction matters because the shape suggests otherwise:- There is no pull-request scanning. TRUSTIVAN does not comment on PRs, does not add a check run, and does not scan a branch.
- There is no push-triggered scanning.
POST /github/webhookverifies the signature and then acknowledges without processing. It is fail-closed and it does nothing else. The work it once dispatched belonged to a product TRUSTIVAN is not.
curl.
What does not exist
Stated rather than left to be discovered:- No infrastructure-as-code scanning. No shipped engine parses a Terraform or Kubernetes manifest; a scan subject is a container image, a Git repository, or — where the operator has permitted a directory — a filesystem path or an SBOM document. Connecting a cloud account or a Kubernetes cluster to inventory it is a separate capability that ships — see Cloud and Kubernetes.
- No credential can be read back. Registry authentication ships on Pro and Enterprise — store a credential against a registry host and scans of images from that host present it — but there is no endpoint that returns a stored secret at any role. A lost secret is rotated, not recovered.
- No mail sender. Members are invited from the dashboard and an invitation token is issued, but TRUSTIVAN does not send it — the administrator who created it delivers it. Directory-sourced membership through SCIM or just-in-time SSO login remains the way to avoid handling tokens at all.
- No reachability analysis. Findings carry an explainable 0–100 risk score built from severity, the CISA KEV catalogue, EPSS (opt-in), runtime evidence, fix availability and asset criticality, each factor shown with its source — but nothing determines whether vulnerable code is actually called.
- No third-party attestation. Evidence is mapped to controls in SOC 2, ISO 27001, PCI DSS 4.0, NIST SSDF and EU CRA, and the audit trail exports as a hash-chained package — but TRUSTIVAN holds no report or certificate of its own, and no control is ever reported as “compliant” or “pass”. The conclusion belongs to your auditor.
- No published price. A deployment with
BILLING_PROVIDER=stripeoffers a hosted checkout and the provider’s billing portal, and plans and their limits are enforced either way — but a price lives in the provider’s catalogue and none has been set up for this service, so a plan is arranged by conversation.
Where to go next
- Gate a pipeline on a policy — the first thing most teams build on the API.
- Request a scan — the smallest useful call.

