SecBoost API v1 authentication
API v1 uses Laravel Sanctum personal access tokens issued to an active human SecBoost user through the authenticated, credential-confirmed token page. Send secrets only as HTTPS bearer headers. Bearer credentials cannot issue credentials or administer users, membership, teams, roles or authentication.
Authority is the intersection of the credential's selected application permissions, its execution mode and type/target boundary, the actor's current permissions and access, and the operation's normal policy, workflow and lifecycle checks. Neither role names, global staff status nor the selected UI project bypass these checks. Removing access or permission takes effect on subsequent requests and protected queued-work checkpoints. There is no separate API permission vocabulary.
Execution mode and lifetime
Every new credential explicitly stores read_only, defaulting to true.
Read-only credentials can perform permitted reads but cannot change resources,
generate documents, comment/claim/release tasks, import provider data or publish.
Selecting editing, management or approval permissions never disables read-only
execution. Disable the checkbox explicitly for mutation-enabled automation.
A permission named view-tasks can permit ordinary task actions in the application,
but those API actions still require mutation-enabled execution.
| Credential | Maximum lifetime | Boundary |
|---|---|---|
| Project, read-only | 90 days | One explicit existing project |
| Project, mutation-enabled | 30 days | Same project |
| Organisation, either mode | 30 days | One explicit existing organisation |
| Administration, either mode | 30 days | Supported installation operations and explicitly accessible organisation identities |
These are the default configured maximum lifetimes. Choose the shortest practical expiry. Missing mode, malformed binding, empty, unknown, retired, mixed, wildcard or out-of-type grants fail closed. New issuance rejects them rather than dropping unsupported selections. Secrets are shown once, stored only as hashes, and omitted from audit metadata. Revocation retains safe audit history.
Supported application permissions
The transport/storage field remains abilities; its values are application
Permissions values. The catalogue has 20 distinct permissions, with 27 supported
type/permission combinations: four Administration, seven organisation and sixteen
project selections. Shared names never expand a credential type's route boundary.
The OpenAPI operation metadata specifies required and conditional permissions and
whether the operation requires mutation-enabled execution. The existing confirmed
web issuance request uses this shape (not a bearer API endpoint):
{
"token_type": "project",
"project_id": "<accessible project ULID>",
"name": "Project reader",
"abilities": ["view-projects", "view-controls"],
"read_only": true,
"expires_at": "<future ISO-8601 timestamp within the maximum lifetime>"
}
Organisation requests supply organisation_id instead of project_id.
Administration requests supply neither target ID. Unsupported fields/bindings and
unheld permissions are rejected; selecting a permission never changes the mode.
Administration
Issuance requires current manage-org-hierarchy. The issuer must additionally
hold every selected permission and dependency. Administration supports:
| Permission | Operations / dependency |
|---|---|
manage-org-hierarchy |
Accessible organisation discovery/identity and organisation creation; installation-owned provider identities, options, artefacts and imports |
publish-provider-assurance-packages |
Assertion review, release configuration/publication and provider deletion containing releases; requires manage-org-hierarchy |
view-restricted-provider-artefacts |
Conditional restricted projection, download, import, review or deletion; requires manage-org-hierarchy |
upload-restricted-provider-artefacts |
Conditional restricted upload/link creation; requires manage-org-hierarchy |
Read and write provider operations share hierarchy authority; execution mode controls whether mutations are allowed. Publication and restricted read/upload remain separate explicit selections. Upload-only restricted creation returns a minimal receipt and does not grant content reads. Bulk operations check every resource. Provider UI and API actions share the existing hierarchy authority; user permissions and seeded roles were not changed for this alignment.
GET /organisations is paginated with 50 identities per page. POST /organisations
requires mutation-enabled hierarchy authority, normal policy/licence/bootstrap
checks and Idempotency-Key. It grants no role or permission. Matching creates
replay for 24 hours; after expiry, discover before issuing another create.
Continue setup using a separately issued organisation-bound credential, then
operational work using a project-bound credential. Administration cannot use
organisation/system/project editing or project operational route families.
Organisation
Issuance requires current access to the bound organisation and either
manage-org-hierarchy or manage-projects. Eligibility grants no unselected
permission. Organisation supports:
| Permission | Operations / dependency |
|---|---|
manage-org-hierarchy |
Organisation/system full identity, canonical context and logo reads; identity/context/logo mutations and system creation |
view-projects |
Accessible project discovery, safe identity, engagement and population status |
manage-projects |
Project setup creation/editing, full scope/context/provider selections, setup options, artefacts and population; requires view-projects |
view-contacts |
Same-system active contact discovery |
manage-contacts |
Same-system contact creation/PATCH; requires view-contacts |
view-registers |
Organisation/system-owned manual definitions and rows |
manage-registers |
Canonical organisation/system manual-row creation/PATCH; requires view-registers |
Minimal system discovery accepts selected/live hierarchy authority or
view-projects plus manage-projects. Full system/context/logo operations still
require hierarchy authority. Project identity/status can remain readable with
view-projects; setup-only scope, readiness and provider fields are redacted
unless manage-projects is also selected and held. Project configuration and
population share management permission; initial population and failed-context retry retain normal readiness gates. Retry starts a new run under the requesting actor/credential, preserves existing records and requires current setup If-Match. Old jobs remain bound to their original credential.
Organisation credentials cannot create organisations, administer providers, change
access or read/edit project controls/assessments. Organisation register rows cannot
select project controls/documents or system contacts.
Project
Issuance requires current access to the bound project and every selected permission and dependency. Project supports:
| Permission | Operations / dependency |
|---|---|
view-projects |
Project discovery, safe inputs and engagement |
manage-projects |
Read full canonical context/scope; requires view-projects; does not enable organisation-key setup writes |
view-controls |
Non-assessment controls/evidence and library working-copy reads |
view-control-assessment |
Assessment fields/actions; requires view-controls |
edit-control-implementation |
Implementation editing/transitions, evidence creation/linking/metadata/replacement/removal/cancellation and library mutations; requires view-controls |
edit-control-assessment |
Assessment editing/transitions; requires view-controls and view-control-assessment |
approve-edits |
Implementation approval/rejection; requires view-controls |
approve-assessments |
Assessment approval/rejection; requires view-controls and view-control-assessment |
view-contacts |
Same-system active contacts; no contact authoring |
view-registers |
Project manual rows, same-system shared rows and project-context manual register review history |
manage-registers |
Editable project-owned manual rows and project-context review recording; requires view-registers |
view-docsuite |
Catalogue, dependencies, status and authorised draft/final downloads |
generate-docsuite |
Normal generation workflow; requires view-docsuite |
view-tasks |
Task visibility and permitted assignment/team actions; actions also require mutation-enabled mode |
manage-tasks |
Manager visibility and claim/release overrides; requires view-tasks |
view-restricted-provider-artefacts |
Conditional restricted provider material in control operations; requires view-controls |
Register/evidence source references require selected and live source permissions:
contacts use view-contacts, controls/library use view-controls, registers use
view-registers and Docsuite uses view-docsuite. Unreadable source fields are
redacted on reads and receipt replay; new unreadable references are rejected.
Assessment properties are omitted without selected/live assessment-read authority.
Task manager authority is not inherited just because the actor holds it: select
manage-tasks. Existing assignment, workflow, licence,
readiness, editability and archived-resource rules remain in force.
An approval-capable bearer can exercise its actor's approval authority without interactive confirmation for each decision. Editing does not imply approval, and approval does not imply editing. Select approval authority explicitly for the intended integration; normal workflow gates and decision-comment requirements apply.
Picker and credential handling
The token page filters supported permissions by type and live actor authority, selects shown dependencies, and keeps execution mode independent. Presets and select-all exclude approval and provider publication; select these explicitly. Presets are convenience selections, not role grants. Final document generation confirmation retains its normal workflow and grants no control approval authority.
The create-token form places type, name and searchable target selection first, then execution mode and expiry, followed by a searchable, scrollable permission table. Read/Write defaults off: credentials are read-only until the standard toggle is enabled. An explicit mode badge shows Read-only or Read/Write. The submit button names the chosen mode and uses an amber warning colour for Read/Write. The token list uses teal Read-only and amber Read/Write badges in the scope column. Permission filtering and Selected only affect visibility, not grants; required dependencies remain selected and locked. The checkbox is on the left; clicking a permission row toggles selection. Only friendly permission names are displayed. Switching token type clears the permission selection and filters. Permission presets never enable mutation execution automatically.
Create/revoke credentials through the authenticated web interface with its normal
MFA/session/recent-confirmation gates. Store the one-time plaintext in an approved
secret manager; never put it in URLs, code, logs, prompts, tickets or analytics.
Use separate named credentials for targets/integrations and rotate before expiry.
Revoke after exposure, departure or integration retirement. Disabled/deleted actors
cannot use existing credentials. Routine password expiry or a forced-change flag
alone does not revoke an otherwise valid bearer; explicitly revoke for incidents.
Owners can revoke their individual credentials under Profile → API tokens.
Administrators can selectively revoke another user's project, organisation or
Administration token under Admin → Users → select user → API tokens → Revoke.
This requires manage-users, plus manage-super-users when the owner is a Super
User, and the normal credential-confirmation gate. If prompted to confirm access,
return to the user page and select Revoke again. The confirmation names the token
and owner. Only that credential is deleted; the account and other tokens stay
available. The audit event records administrator, owner and token identifier
without the secret or hash. Disabling an actor still blocks all their credentials
when broader incident containment is needed.
API-started generation, population, provider imports, upload releases and context/ scope applicability work retain original actor/token attribution and revalidate before protected work and durable writes. Revocation, expiry, changed grants/mode, permission loss or access loss stops subsequent work; completed transactions are not rolled back. UI/system work retains its own authority path.
Creates retain bounded retry receipts; updates require current strong ETags under resource locks. Normal quarantine/scanning, parser/review and frozen-release gates remain. Linked URLs record references and are not fetched automatically.
Request budgets and security logging
Read and mutation limits apply per credential across all client IPs. Additional
actor and organisation budgets aggregate credentials and actors respectively;
Administration credentials use the actor budget because they have no bound organisation.
Limits apply across operations within each read/mutation class. An independent
per-IP ingress limit applies before authentication, including invalid credentials.
All budgets use the configured shared cache in production. Respect Retry-After
on 429 responses; changing IP or rotating credentials does not avoid aggregate budgets.
Defaults per minute: ingress 600/IP; reads 120/credential, 240/actor, 1200/organisation;
mutations 30/credential, 60/actor, 300/organisation. Operators can configure
API_INGRESS_RATE_LIMIT_PER_MINUTE, API_READ_RATE_LIMIT_PER_MINUTE,
API_MUTATION_RATE_LIMIT_PER_MINUTE, API_ACTOR_READ_RATE_LIMIT_PER_MINUTE,
API_ACTOR_MUTATION_RATE_LIMIT_PER_MINUTE, API_ORGANISATION_READ_RATE_LIMIT_PER_MINUTE
and API_ORGANISATION_MUTATION_RATE_LIMIT_PER_MINUTE. Values must be positive.
The shared-IP ingress budget may need tuning for integrations behind a common NAT.
Failed API requests include reads, deletions and authentication failures in safe application audit events. Correlation IDs are assigned before authentication. Events omit query values, request values and bearer credentials. Repeated 429 events are sampled once per IP per minute to avoid audit-write amplification; HTTP access logs retain individual response statuses.
Library Markdown attributes are limited to class and id. Arbitrary CSS and
URL-bearing attributes are rejected; legacy attributes are stripped during
rendering. PDF generation embeds only the document project's registered diagram and organisation logo as data and does not fetch
arbitrary network or local-file assets.
Unsupported credentials
Credentials with retired, mixed, wildcard or unsupported grants, or a missing stored execution mode, are invalid. Revoke and reissue through the token page with a reviewed permission selection. Replacing a credential never transfers queued work to the new key. Environment upgrade and worker coordination belong in the repository's development smoke-testing guide.