API reference

Workspace

Workspace settings, branding and retention.

  1. GET/v1/workspace
  2. GET/v1/workspace/branding
  3. PATCH/v1/workspace/branding
  4. PATCH/v1/workspace/consent-retention
  5. PATCH/v1/workspace/name
  6. GET/v1/workspace/resolve/{slug}
  7. PATCH/v1/workspace/slug
  8. PATCH/v1/workspace/tracker-evidence
GET/v1/workspace

This workspace's name and address

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Responses
StatusBodyWhen
200WorkspaceDto
200 body · WorkspaceDto
FieldTypeWhat it is
id requiredstring
name requiredstring
slug requiredstringThe subdomain this workspace answers on.
url requiredstringThe workspace's own sign-in URL.
consentRetentionMonths requirednumberMonths a consent record is kept before it is deleted automatically. Records are never deleted any other way.
shareTrackerEvidence requiredbooleanWhether this workspace's tracker observations are shared. What is shared is a fact about a tracker (its name, the hosts it talks to, what it is for), with nothing that identifies the workspace. Turning it off costs nothing: scans still use what is already shared.
GET/v1/workspace/branding

This workspace's branding for client-facing documents

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Responses
StatusBodyWhen
200BrandingDto
200 body · BrandingDto
FieldTypeWhat it is
allowed requiredbooleanWhether this workspace's plan may brand client-facing documents. True on Agency and Enterprise; false on Starter and Professional.
senderName requiredstring | nullWho a document says it is from. Null falls back to the workspace name.
accentColor requiredstring | null#rrggbb, or null for the default rule colour.
headingColor requiredstring | null#rrggbb for headings, or null for the documents' own ink.
logo requiredstring | nullThe stored logo as a data: URL, or null.
logoType requiredstring | null
updatedAt requiredstring | null
PATCH/v1/workspace/branding

Set the logo, accent colour and sender name

Agency and Enterprise only. A logo is a base64 data URL of a PNG or a JPEG, at most 256 KB, and is checked by its magic bytes rather than by the media type it declares. Send logo: null to remove it.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Request body · UpdateBrandingDto
FieldTypeWhat it is
senderNamestring | null
accentColorstring | nullSix-digit hex only. The accent colours rules and a bar on the cover, never text, so a customer cannot pick a colour that makes their own report unreadable — which is the usual way a colour field goes wrong.
headingColorstring | nullThe second brand colour, used for headings. Six-digit hex. Because it is used for text, a colour without at least 4.5:1 contrast on white is refused, so reports stay readable.
logostring | nullThe logo as a data:image/png;base64,… or data:image/jpeg;base64,… URL, at most 256 KB, or null to remove it. The file's contents are checked, not only the media type it declares.
Responses
StatusBodyWhen
200BrandingDto
200 body · BrandingDto
FieldTypeWhat it is
allowed requiredbooleanWhether this workspace's plan may brand client-facing documents. True on Agency and Enterprise; false on Starter and Professional.
senderName requiredstring | nullWho a document says it is from. Null falls back to the workspace name.
accentColor requiredstring | null#rrggbb, or null for the default rule colour.
headingColor requiredstring | null#rrggbb for headings, or null for the documents' own ink.
logo requiredstring | nullThe stored logo as a data: URL, or null.
logoType requiredstring | null
updatedAt requiredstring | null
PATCH/v1/workspace/name

Change the workspace name

The name shown in the workspace switcher, in every notification email and in the operator console. Does not move the workspace — the address is unchanged.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Request body · RenameWorkspaceNameDto
FieldTypeWhat it is
name requiredstringThe workspace's display name. Free text with no uniqueness rule — this is the label, not the address. Use PATCH /v1/workspace/slug to move the workspace to a different subdomain. Example: "Acme Inc"
Responses
StatusBodyWhen
200WorkspaceDto
200 body · WorkspaceDto
FieldTypeWhat it is
id requiredstring
name requiredstring
slug requiredstringThe subdomain this workspace answers on.
url requiredstringThe workspace's own sign-in URL.
consentRetentionMonths requirednumberMonths a consent record is kept before it is deleted automatically. Records are never deleted any other way.
shareTrackerEvidence requiredbooleanWhether this workspace's tracker observations are shared. What is shared is a fact about a tracker (its name, the hosts it talks to, what it is for), with nothing that identifies the workspace. Turning it off costs nothing: scans still use what is already shared.
GET/v1/workspace/resolve/{slug}

Where does this workspace address point?

Needs: Nothing. This route is public.

Parameters
NameWhereTypeWhat it is
slug requiredpathstring
Responses
StatusBodyWhen
200WorkspaceResolutionDto
200 body · WorkspaceResolutionDto
FieldTypeWhat it is
exists requiredbooleanFalse for an address no workspace has ever used.
slugstring | nullThe address this workspace currently answers on. Null when unknown.
moved requiredbooleanTrue when the address asked for is a former one — the caller should redirect to url rather than serve the workspace on a stale hostname.
urlstring | null
PATCH/v1/workspace/slug

Change the workspace address

The previous address keeps resolving and is never released to another workspace, so existing links and bookmarks continue to work.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Request body · RenameWorkspaceDto
FieldTypeWhat it is
slug requiredstringSubdomain for the workspace. Lowercase letters, numbers and single hyphens. Example: "acme"
Responses
StatusBodyWhen
200WorkspaceDto
409—The address is unavailable. The body carries free alternatives.
200 body · WorkspaceDto
FieldTypeWhat it is
id requiredstring
name requiredstring
slug requiredstringThe subdomain this workspace answers on.
url requiredstringThe workspace's own sign-in URL.
consentRetentionMonths requirednumberMonths a consent record is kept before it is deleted automatically. Records are never deleted any other way.
shareTrackerEvidence requiredbooleanWhether this workspace's tracker observations are shared. What is shared is a fact about a tracker (its name, the hosts it talks to, what it is for), with nothing that identifies the workspace. Turning it off costs nothing: scans still use what is already shared.
PATCH/v1/workspace/tracker-evidence

Contribute this workspace’s tracker observations to the shared cache

What would be contributed is a fact about a TRACKER — its name, the hosts it talks to, what it is for — keyed by a hash with nothing of this workspace in it. Turning it off costs nothing: the cache is still read either way, so scans go on being classified from what other workspaces have already established.

Needs: A signed-in panel session, sent as Authorization: Bearer <access token>.

Request body · SetShareTrackerEvidenceDto
FieldTypeWhat it is
shareTrackerEvidence requiredboolean
Responses
StatusBodyWhen
200WorkspaceDto
200 body · WorkspaceDto
FieldTypeWhat it is
id requiredstring
name requiredstring
slug requiredstringThe subdomain this workspace answers on.
url requiredstringThe workspace's own sign-in URL.
consentRetentionMonths requirednumberMonths a consent record is kept before it is deleted automatically. Records are never deleted any other way.
shareTrackerEvidence requiredbooleanWhether this workspace's tracker observations are shared. What is shared is a fact about a tracker (its name, the hosts it talks to, what it is for), with nothing that identifies the workspace. Turning it off costs nothing: scans still use what is already shared.

Next groupBilling