VERISCO Shield Reference
API reference
Every endpoint a client application, the CLI or the SDK calls, with how each one is authenticated.
Base address#
Every path below is relative to your VERISCO platform's address, written https://your-verisco-host in the examples. Responses are JSON unless stated. An error is a JSON object with a detail or an error field and an HTTP status that means what it says.
Authentication#
Three schemes, each for a different caller.
| Scheme | Who uses it | How |
|---|---|---|
| None | Anyone | Endpoints that carry no tenant value: the contract, the package downloads. |
| Analyzer key | The CLI, your pipeline | Authorization: Bearer <analyzer key>. The key is on your integration page in the console. |
| Client credentials | The SDK, in SDK mode | HTTP Basic with your client id (<tenant-id>-user) and client secret. |
Keep both secrets out of your repository
The analyzer key can read your integration guide and turn protection on or off. The client secret completes sign-ins as your application. Store them in your environment or your secret manager.
Integration#
GET/api/v1/contract
The machine-readable integration contract: the cookie and header names, the signing algorithm, the claims, the package names, the supported frameworks and the code to paste.
Authentication: none. It contains no tenant value.
curl -fsS https://your-verisco-host/api/v1/contract{
"contract_version": "1.0",
"transport": {
"session_cookie": "verisco_session",
"claims_header": "X-Verisco-Claims",
"user_header": "X-Verisco-User",
"verified_header": "X-Verisco-Verified",
"algorithm": "RS256"
},
"public_key": { "path": "/api/v1/public-key", "filename": "verisco_public.pem" },
"packages": { "cli_binary": "verisco-analyzer" },
"frameworks": {},
"snippets": {}
}GET/api/v1/public-key
Your tenant's RS256 public key, as a PEM file.
Authentication: the analyzer key, as the api_key query parameter.
| Status | Meaning |
|---|---|
200 |
The key, application/x-pem-file. |
401 |
The key is not valid. |
404 |
No signing key yet. The tenant has not been published. |
curl -fsS "https://your-verisco-host/api/v1/public-key?api_key=$VERISCO_ANALYZER_KEY" -o verisco_public.pemGET/tenants/{tenant_id}/public-key
Every public key your application should currently accept. During a key rotation that is two: the one in use and the one about to be. An application that fetches this while a key is staged is ready before anything changes.
Authentication: none. A public key is public.
GET/api/v1/sdk/node
The Node middleware, as a tarball that npm installs directly.
Authentication: none.
npm install https://your-verisco-host/api/v1/sdk/nodeGET/api/v1/cli/install
A POSIX shell installer for the CLI. It verifies the download's checksum before installing it.
Authentication: none.
curl -fsSL https://your-verisco-host/api/v1/cli/install | shAnalysis#
POST/api/v1/ai-analyze
Asks for an AI-written integration guide for the files sent. Called by verisco-analyzer analyze --use-ai.
Authentication: analyzer key. Rate limit: 5 requests per hour, per tenant.
| Field | Type | Meaning |
|---|---|---|
files |
object | File path to file content, for the authentication-related files. |
package_json |
object | Optional. Your project's package.json. |
The guide is saved to your tenant and shown on your integration page.
GET/api/v1/guide
The stored guide's edits, in the form verisco-analyzer apply writes them.
Authentication: the analyzer key, as the api_key query parameter.
Verification and going live#
GET/api/v1/verify/status
Where your integration stands: an overall status and every check.
Authentication: analyzer key.
{
"status": "pass",
"ran": 4,
"checks": [
{
"check": "middleware_mounted",
"status": "pass",
"detail": "",
"next_action": "",
"at": "2026-10-04T09:12:44Z"
}
]
}| Field | Meaning |
|---|---|
status |
pass, fail, or unknown when no check has run. A single check can also be warn or skip. |
checks[].check |
The name of the check. |
checks[].detail |
What was found. |
checks[].next_action |
What to do about a failure. |
POST/api/v1/verify/local
The CLI reports what it found on your machine. Recorded as a self-report and labelled as one.
Authentication: analyzer key.
POST/api/v1/verify/probe
Runs the checks only the platform can run: that a request to your hostname reaches your application through VERISCO.
Authentication: analyzer key.
POST/api/v1/go-live
Turns protection on. Every request then goes through VERISCO sign-in.
Authentication: analyzer key.
| Status | Meaning |
|---|---|
200 |
Protection is on. |
409 |
Refused. Verify has not confirmed the middleware and the key; the body says which is missing. |
401 |
The key is not valid. |
POST/api/v1/go-back
Returns to pass-through. Never refused.
Authentication: analyzer key.
POST/api/v1/integration-complete
Marks your integration as complete, after you have checked it end to end.
Authentication: analyzer key.
Enforcement feed#
For SDK mode only. The middleware calls both for you.
GET/api/v1/enforcement/state
What your application must enforce right now, as a full snapshot.
Authentication: client credentials.
Send the ETag from the previous response as If-None-Match. When nothing changed the answer is 304 with no body.
| Request header | Meaning |
|---|---|
If-None-Match |
The last ETag received. |
X-Verisco-Instance |
A name for this instance, shown on your console. |
X-Verisco-Sdk-Version |
The middleware's version. |
{
"poll_after": 30,
"tenant": {
"tenant_id": "your-tenant-id",
"mode": "sdk",
"status": "published",
"licence": "active",
"licence_blocks_signin": false,
"sealed": ["/login"],
"excluded": ["/public"],
"health": "/health",
"max_session_seconds": 28800,
"idle_seconds": 900,
"session_binding": "off"
},
"revoked": {
"all": 0,
"subjects": {},
"sids": {}
}
}| Field | Meaning |
|---|---|
poll_after |
Seconds to wait before the next poll. |
tenant.sealed |
Path prefixes to answer 404 for. |
tenant.excluded |
Path prefixes served without a session. |
tenant.session_binding |
off, step_up or terminate. |
revoked.all |
A time, in epoch seconds. Sessions issued before it are no longer valid. |
revoked.subjects |
The same, per user. |
revoked.sids |
The same, per session. |
A revocation is a not-before time, not a flag: a user who signs in again afterwards is accepted.
| Status | Meaning |
|---|---|
200 |
The state, with an ETag. |
304 |
Unchanged since the ETag you sent. |
401 |
The credentials were rejected. Sent with WWW-Authenticate, so an application cannot mistake it for "nothing to enforce". |
409 |
The tenant is not in SDK mode. In gateway and connector mode VERISCO enforces at the edge. |
POST/api/v1/enforcement/events
What your application enforced, in batches, so it appears in your console.
Authentication: client credentials.
{
"events": [
{
"outcome": "terminate",
"subject": "1042",
"reason": "revoked",
"ip": "203.0.113.7",
"app_host": "app.example.com"
}
]
}{ "accepted": 1, "rejected": 0 }outcome is required: what the middleware did, such as sealed, step_up or terminate. The time of each event is set by VERISCO when it arrives, not taken from your clock.
Sign-in endpoints#
Your realm is a standard OpenID Connect provider. In SDK mode the middleware discovers everything it needs from the issuer.
| Issuer | https://your-verisco-host/auth/realms/<tenant-id> |
| Discovery | https://your-verisco-host/auth/realms/<tenant-id>/.well-known/openid-configuration |
| Client id | <tenant-id>-user |
Paths on your own hostname#
Served by the gateway in gateway and connector mode, and by the middleware in SDK mode.
| Path | Purpose |
|---|---|
/verisco/login?returnTo=<path> |
Starts a sign-in and comes back to returnTo. |
/verisco/callback |
Where the sign-in page returns. |
/verisco/logout |
Ends the session. |
/verisco/me |
The user's own sessions and devices. Gateway and connector mode. |
Device agent#
| Endpoint | Purpose |
|---|---|
GET /install/linux?ticket=<ticket> |
The Linux install script, for the holder of a ticket issued from Devices. |
GET /install/windows?ticket=<ticket> |
The Windows install script, for the holder of a ticket. |
GET /install/linux/<tenant-id>, GET /install/windows/<tenant-id> |
The same scripts as a file, for a signed-in administrator of that tenant. Anybody else is answered 404. |
Webhooks#
Outgoing, from VERISCO to you. See Webhooks.
Something missing or wrong on this page? Tell us and we will fix it.