REST API Quickstart

The AutoCISO REST API lets you push software composition data into your compliance workspace from CI/CD pipelines and internal tools. This guide walks you through your first authenticated request.

Before you start

  • An API token — see API tokens
  • The token needs sbom:read to read and sbom:write to upload; Example 3 needs jml:read
  • Your plan must include Supply Chain Security, The Growth plan or higher (Examples 1 and 2), or Employee lifecycle, The Seed plan or higher (Example 3) — see Plans & features

Set your token as an environment variable so you don’t hard-code credentials:

export AUTOCISO_API_TOKEN="aci_your_token_here"

Base URL

All REST endpoints are under:

https://api.autociso.io/api/v1

Use api.autociso.io for every integration. It carries only the API, so it is unaffected by changes to the marketing site or the web console.

The apex host autociso.io routes to the same backend and stays supported, so older integrations keep working unchanged. Every example on this site uses api.autociso.io.

Authentication

Every request must include your token in the Authorization header:

Authorization: Bearer aci_your_token_here

Example 1 — List your SBOMs

A simple GET that returns the Software Bills of Materials registered in your organisation — the same list as SBOM Inventory in the console. Pass q to filter by name. Endpoint reference: List SBOMs.

curl -s \
-H "Authorization: Bearer $AUTOCISO_API_TOKEN" \
"https://api.autociso.io/api/v1/sscs/sboms"

A successful response looks like:

{
  "data": [
    {
      "sbomId": "sbom_1hgyun41rx48",
      "name": "payment-service",
      "version": "1.4.2",
      "source": "package.json",
      "componentCount": 412,
      "createdAt": "2026-03-01T09:00:00Z"
    }
  ],
  "error": null,
  "meta": null
}

Example 2 — Upload a manifest

Upload a dependency manifest so AutoCISO can inventory its components and match them against known vulnerabilities. Requires the sbom:write scope. Endpoint reference: Upload SBOM.

curl -s -X POST \
-H "Authorization: Bearer $AUTOCISO_API_TOKEN" \
-F "file=@package.json" \
-F "name=payment-service" \
-F "version=1.4.2" \
"https://api.autociso.io/api/v1/sscs/sboms/upload"

Example 3 — List leaver items that still need attention

Read the leaver items whose access is still outstanding or contradicts a completed task. Requires the jml:read scope and a plan that includes Employee lifecycle. The response is pseudonymised personal data: it carries employee IDs, not names, unless the token also holds pii:read. Call it from a server, never from a browser.

curl -s -G \
-H "Authorization: Bearer $AUTOCISO_API_TOKEN" \
--data-urlencode "filter[status][in]=OUTSTANDING,DISCREPANCY" \
--data-urlencode "limit=100" \
"https://api.autociso.io/api/v1/jml/offboarding/items"

A successful response looks like this. itemKey is the stable key to de-duplicate on between runs:

{
  "data": [
    {
      "itemId": "ltsk_example000001",
      "itemKey": "lfc_example000001:ast_example000001",
      "taskId": "ltsk_example000001",
      "caseId": "lfc_example000001",
      "employeeId": "empl_example000001",
      "assetId": "ast_example000001",
      "assetName": "Example CRM",
      "status": "DISCREPANCY",
      "taskStatus": "COMPLETED",
      "accessStatus": "ACTIVE",
      "source": "TASK",
      "openedAt": "2026-09-15T08:00:00Z",
      "taskCompletedAt": "2026-09-16T10:30:00Z",
      "accessLastDetectedAt": "2026-09-29T02:00:00Z"
    }
  ],
  "error": null,
  "meta": {
    "limit": 100,
    "offset": 0,
    "total": 1,
    "summary": { "total": 1, "revoked": 0, "outstanding": 0, "discrepancy": 1, "attested": 0 },
    "accessDataAsOf": "2026-09-29T02:00:00Z"
  }
}

If you exceed the rate limit (5 requests per second, burst of 30, per token) the API answers 429 RATE_LIMITED with a Retry-After header; honour it. See the Off-boarding API for statuses, filters and errors, and Poll off-boarding discrepancies nightly for a complete recipe.

Error handling

Every response uses the same envelope. On failure, data is null and error.code is a stable, machine-readable code:

{
  "data":  null,
  "error": { "code": "MISSING_FILE", "message": "multipart field 'file' is required" }
}

The codes you will meet first are 401 INVALID_TOKEN (expired or revoked token), 403 INSUFFICIENT_SCOPE (the token lacks a scope), 403 FORBIDDEN (the endpoint does not accept tokens at all) and 402 FEATURE_GATED (your plan does not include the feature). The full table is in Errors & rate limits.

Next steps

Last reviewed: 2026-10-10

Was this page helpful?

Esc