Skip to content
Foxx Cyberfoxxcyber/docs

Agent ISSO

An organization-scoped API key that lets your own tooling — Claude Code, Codex, or a script — read a compliance package and make safe updates through the Bedrock CMMC API.

Agent ISSO is Bedrock CMMC's automation credential. It is an API key, owned by your organization, that works on the /api/v1/* API and nowhere else. You bring the intelligence — a Claude Code session, an OpenAI Codex agent, a CI job, a Python script — and the key gives that tool a tightly-scoped way to read your packages and record the kind of changes an Information System Security Officer would make: mark an objective met, attach evidence, open a POA&M.

Bedrock does not run a model on your behalf and does not bill you for one. Your tooling calls the API; the API enforces the scopes you granted and writes every change to the same audit trail your team sees in the app.

Keys never open the web app

An Agent ISSO key authenticates only against https://api.bedrock-cmmc.com/api/v1/*. Presenting one to the web application, to /api/osc/*, or to any other route is rejected. There is no way to sign in to a portal with a key.

What a key can and cannot do

The ceiling is fixed by the platform and cannot be raised by any scope: read everything in your packages, plus the writes an ISSO makes day to day.

A key with the right scopes can:

  • List and read packages, controls, objectives, evidence, POA&Ms, assets, the ConMon schedule, the SSP, and the SPRS score.
  • Set an objective's status (MET, NOT_MET, NOT_APPLICABLE, NOT_ASSESSED) and its narrative fields — assessment notes, implementation statement, policy and procedure references.
  • Edit a control's implementation and assessment notes.
  • Create an evidence record, upload the file, and link it to an objective or control.
  • Create a POA&M and update its status, milestones, dates, and risk level.

No key, with any combination of scopes, can:

  • Delete anything. There are no *:delete scopes.
  • Create or delete a package.
  • Approve or archive a System Security Plan.
  • Invite, remove, or change team members, or manage roles.
  • Touch billing, your plan, or organization settings.
  • Enable Agent ISSO, or mint, rotate, or revoke keys — those are UI actions for humans.

Every write a key makes goes through the same validation as the same action in the web app, and the audit feed records it with actor type agent and the key's name, so you always know which automation did what.

Who can turn it on and who can mint keys

Agent ISSO follows your organization's roles:

ActionOwnerAdminUser / Viewer
Enable or disable Agent ISSO for the organizationYesNoNo
Create, rotate, or revoke a keyYesYesNo
See the key table (names, prefixes, scopes, status)YesYesRead-only

Agent ISSO is off for every organization until an Owner turns it on. It is available on every paid Contractor and MSP plan. RP partner and Guest accounts cannot hold keys.

Enabling Agent ISSO

  1. Open Settings → Agent ISSO in the sidebar (MSPs: the same page in the MSP workspace's settings).
  2. In the Enable Agent ISSO row, flip the switch. The row records who enabled it and when.

Turning the switch off later does not delete your keys — it makes the API reject all of them with AGENT_ISSO_DISABLED until an Owner turns it back on, at which point existing keys work again without being re-issued. That makes the switch a one-click kill switch for every automation at once.

Creating a key

Click New key. The dialog asks for three things:

  • Name — describe the consumer, not the person: claude-code (jane), ci-evidence-sync, quarterly-report (read-only). Names are unique within your organization and up to 64 characters.
  • Expires in — 30, 90, 180, or 365 days. Every key expires; there is no non-expiring option. Shorter is better for anything interactive; pick 365 only for a service you have a rotation habit for.
  • Scopes — a grid of resources with Read and Write columns (see the scope table below). The Write box is disabled for resources that have no writes at all. Select all and Read-only preset fill the grid in one click. A key must have at least one scope.

Click Create. The token is shown once:

bcmmc_3f9a1c2e8b7d4650_Qm9vaGFuZ2VyLWlzLW5vdC1hLXJlYWwtc2VjcmV0

Copy it into your secret manager or the environment variable your tool reads (see Keep the key safe). Close the dialog and the token is gone for good — the table shows only the key's prefix (bcmmc_3f9a1c2e8b7d4650) so you can tell keys apart. If you lose a token, rotate the key; nothing can recover the original.

One token, shown once

The platform stores only a SHA-256 hash of the secret half of the token. It cannot show it to you again, and support cannot retrieve it either. Treat the reveal dialog like a password reset link: copy it now, or start over.

Token format

bcmmc_<key id>_<secret>
       16 hex   43 chars, base64url of 32 random bytes

The key id is public — it appears in the table as the prefix and is safe to paste into a support ticket. The secret half is never stored in the clear.

Scopes

Scopes are the only permission model a key has. Each API endpoint requires exactly one scope; a request without it fails with 403 FORBIDDEN_SCOPE before anything is read or written. The vocabulary is fixed — a key request with any scope outside this list is rejected.

ScopeGrants
packages:readList your organization's packages and read a package's profile.
controls:readList a package's controls with status, points, and objective progress; read a control's full detail (objectives, evidence links, ESP mappings).
controls:writeSet an objective's status and narrative fields; edit a control's implementation and assessment notes.
evidence:readList a package's evidence records.
evidence:writeCreate an evidence record (returns a presigned upload URL) and link evidence to an objective or control.
poams:readList a package's POA&Ms with milestones and linked requirements.
poams:writeCreate a POA&M for a POA&M-eligible requirement; update status, milestones, dates, description, and risk level.
assets:readList a package's hardware, software, and network assets.
conmon:readRead the continuous-monitoring schedule and freshness of each control.
ssp:readRead the System Security Plan's sections and status (no diagram bytes).
sprs:readRead the package's SPRS score, family rollup, and certification blockers.

Five resources — packages, assets, conmon, ssp, sprs — are read-only by design; the API has no write for them, so no write scope exists.

Two rules of thumb:

  • A reporting agent needs only the *:read scopes it touches. A script that posts your SPRS score to a dashboard needs packages:read sprs:read and nothing else.
  • An agent that does ISSO work — assessing objectives, filing evidence, opening POA&Ms — needs packages:read controls:read controls:write evidence:read evidence:write poams:read poams:write. That is the set the Claude Code quickstart uses.

GET /api/v1/me works with any key regardless of scopes, so an agent can always discover what it has been granted before it plans a task.

The key table

ColumnMeaning
NameThe label you gave the key.
Prefixbcmmc_ plus the key id — identification only, not a credential.
ScopesThe granted scopes as chips (collapsed to a count when there are many).
ExpiresRelative time and date. Amber inside 14 days, red once expired.
Last usedWhen the key last authenticated a request (updated at most once a minute).
StatusActive, Expired, or Revoked.
ActionsRotate and Revoke.

An organization can hold 25 active keys at a time. Expired and revoked keys do not count; a 26th mint fails with 409 AGENT_KEY_LIMIT until you revoke one.

Rotating a key

Rotate mints a brand-new key with the same name and scopes and shows its token once. The old key keeps working until you revoke it, so you can re-point a consumer without an outage: mint, update the secret, confirm the new key shows a Last used time, then revoke the old one. Rotate whenever a token may have leaked, when the person who held it leaves, and before any 365-day key gets close to expiry.

Revoking a key

Revoke ends a key immediately and permanently — the next request with it returns 401 KEY_REVOKED. Revoked keys stay in the table for the record. There is no undo; mint a new key instead.

Audit trail

Enabling or disabling Agent ISSO and every mint, rotate, and revoke is written to your organization's audit feed as agent_isso.enabled, agent_isso.disabled, agent_isso.key_created, agent_isso.key_rotated, or agent_isso.key_revoked, with the key name and scopes. Changes the key itself makes appear as ordinary control, evidence, and POA&M events with actor type agent and the key name as the actor.

Next steps

  • API reference — every endpoint, error code, and the OpenAPI document.
  • Claude Code quickstart — mint a key, verify it, and walk through a full assess → evidence → POA&M cycle, then hand the API to Claude Code.

Last updated September 2, 2026