management alone does not grant any of these routes. Only an owner with access to both environments can issue the members and members_manage scopes. members_manage requires a service key. Scopes lists every scope.
A key without the scope answers 403 workspace_forbidden. A key acts only in its own workspace and environment. A test key on a team route, or a key on the other environment, answers 404 not_found.
Roles
Each member holds one role. A role is a built-in set of capabilities.
Two more fields narrow a role:
environmentslimits the member to["live"],["test"]or both. An invitation grants both when you omit it. Owners always keep both.denied_actionstakes away up to three capabilities from the role:evidence.read(detailed evidence and submitted identifiers),exports.read(exports) andpolicy.publish(active policy publication). An empty array clears the exclusions.
denied_actions applies to the next request. It also revokes the personal keys of that member.
Members
List members
mem_, its external_user_id at the identity provider of the console, role, environments and denied_actions.
PATCH /v1/workspaces/{workspace_id}/members/{member_id} changes a non-owner member. The body must have role. An omitted environments or denied_actions keeps its current value.
Make a member an investigator with test access only
DELETE /v1/workspaces/{workspace_id}/members/{member_id} revokes the workspace access of a non-owner member and answers 204. The member loses access at once. A later invitation restores the member with the same mem_ id.
API keys cannot make, change or invite owners, or revoke their access. An owner as the target answers 404 not_found.
Invitations
An invitation lets a person join the workspace with a role. Its lifecycle has four calls.1
Create the invitation
POST /v1/workspaces/{workspace_id}/invites answers 201 with the invitation and its secret token. NoResponse shows the token once.Invite a developer
email is for your records. NoResponse does not match it against the person who accepts. Set external_user_id instead to let only that user accept.2
Deliver the token
This call sends no email. Give the token to the person through a secure channel. The token works once and expires after seven days.
3
List pending invitations
GET /v1/workspaces/{workspace_id}/invites lists pending non-owner invitations, oldest first, without tokens.4
Revoke or reissue
DELETE /v1/workspaces/{workspace_id}/invites/{invite_id} revokes an invitation and answers 204. Its token stops working.POST /v1/workspaces/{workspace_id}/invites/{invite_id}/resend with an empty body {} replaces the token and renews the seven-day expiry. It also renews an expired invitation. The invitation keeps its id and grants. The old token stops working at once. Each call makes a new token. An accepted or revoked invitation answers 404 not_found.member_limit_reached. An invitation with the external_user_id of an active member answers 409 already_member.
Audit events
The audit log records each privileged change in your workspace: its actor, action, target, outcome and time. A successful change and its audit event commit together. Events hold no secrets and no submitted identifiers.Get denied key changes from the last day
Each page holds up to
limit events, from 1 to 100, with a default of 20. Events arrive newest first. When another page exists, the answer has next_cursor. Send it as cursor and keep every filter the same.
Each event has actor.type user or api_key. affected_environment is workspace for member and invitation changes. Only console members with access to both environments read these workspace-wide events. An API key reads only the events of its own environment. request_id links the event to the X-Request-ID of the request.
Audit retention
Each environment keeps audit events forretention_days, from 1 to 365. The default is 365. The live policy also covers workspace-wide events.
Read test audit retention
retention_days and oldest_available_at. oldest_available_at does not prove that capture was complete before that time.
A test key with audit_manage changes test retention with PATCH and a body such as { "retention_days": 90 }. Change live retention in the NoResponse console, as a member with both environment grants and audit administration access.
Audit streams
An audit stream sends each new audit event to one of your webhook endpoints as a signedaudit.event webhook. Use it to keep the audit log in your own SIEM or compliance store.
You need a registered and verified webhook endpoint in the same environment. See Webhooks.
1
Configure the stream
POST /v1/workspaces/{workspace_id}/streams/{environment} creates or updates the subscription for one endpoint. A key uses the environment of the key. The workspace environment streams workspace-wide events, and only a console member with access to both environments can use it.Stream key and member changes
actions takes up to 32 action names. An empty array sends every action in that environment.2
Receive audit.event
The stream starts at subscription creation. For earlier events, use an audit export. Verify the signature before you parse the body. Deliveries can repeat and arrive out of order, so deduplicate on the webhook
id. See audit.event.3
Check delivery health
GET /v1/workspaces/{workspace_id}/streams/{environment} lists up to 10 subscriptions. Each has endpoint_state (unverified, verified or disabled), last_attempt_at and last_delivered_at.POST /v1/workspaces/{workspace_id}/streams/{environment}/{endpoint_id}/replay with { "event_id": "evt_..." }. The body and event id stay the same, with a new signature. The current subscription, action filter and retention must still permit the event. Audit deliveries stay replayable for at most 30 days. The ordinary webhook replay route refuses audit events.
DELETE /v1/workspaces/{workspace_id}/streams/{environment}/{endpoint_id} stops the stream and cancels its queued deliveries. The endpoint stays registered for other event types.
Usage
GET /v1/workspaces/{workspace_id}/usage answers daily usage counts for the environments that you can access. A key with usage reads its own environment. The counts have no prices.
Get usage for October
from and to are UTC days as YYYY-MM-DD. NoResponse includes the to day. It cannot be later than today. Without from and to, the range is the 30 days that end today. With only one of them, the range is the 30 days that start or end on that day. A range is at most 366 days.
200 response
One item for each environment, day, metric, flow and depth with a count above 0. Live comes first.
assessmentscounts admitted assessments, withflowanddepth.webhook_deliveriescounts one delivery for each event and endpoint. Retries and replays add nothing.key_usage_eventscounts accepted key-usage events.screeningscounts one unit for each person that a screening screens. A screening counts each person one time. A person that a screening could not cover counts nothing.
The daily cap on the assessments that members make in the live console playground.
used is the lookups spent since the last reset. limit is the lookups allowed per UTC day. resets_at is the next midnight UTC, when used returns to 0. API keys spend no lookups. At the cap, the next console lookup answers 429 lookup_limit_reached.It is present only when the caller can read the live environment and the API enforces the cap. A test key or a member with test access only does not get it. from and to do not change it.Assessment budgets
Your workspace can have an assessment allowance for each billing period and a hard budget. A member with thebilling role sets the budget in the NoResponse console. When a new assessment would exceed either, POST /v1/assessments answers 429 assessment_budget_exhausted. The refused assessment does not spend a usage unit. Compare the assessments counts in your usage with your allowance to see how close you are to the limit.
Screening budgets
The billing period and its budgets apply to assessments. Thescreenings units count in the billing period and its settlements, but they have no price there. The spend of screenings has its own limit for each day: the screening_daily_cap setting of each environment.