Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
30384f5
Document the account configuration endpoints
claude Jul 30, 2026
0e7b327
Require category_id when creating a service, not when updating one
claude Jul 30, 2026
1b5a8e7
Document admin-only mutations and the review fixes
claude Jul 30, 2026
ba1cc99
Drop TCF vendors, document compliance report and banner templates
claude Jul 30, 2026
9dbb405
Declare account_id, and document from-template as an unwrapped body
claude Jul 30, 2026
071c5a4
Scope the account selector, and document translations and Canadian ta…
claude Jul 30, 2026
1c5ac04
Split banner create from update, and scope the selector requirement
claude Jul 30, 2026
5740b59
List every request wrapper, including the ones that don't match the path
claude Jul 30, 2026
18bfa8d
Note that banner templates are not a paginated listing
claude Jul 30, 2026
20049b5
Return the account settings and translation copy the API accepts
claude Jul 30, 2026
91f4521
Document every writable translation field, not most of them
claude Jul 30, 2026
d291d13
Document every banner setting, and the failure modes this PR introduced
claude Jul 30, 2026
a15f2ee
Restore the banner targeting fields, and fix the nullable composition
claude Jul 30, 2026
6685e48
Reconcile the errors table with every failure the API declares
claude Jul 30, 2026
a0cb74b
Keep enabled out of the banner creation schema
claude Jul 30, 2026
8ebe8dd
Document onboarding_status as unknowable during an outage
claude Jul 30, 2026
f888c9f
Document service translations, and stop advertising a field create re…
claude Jul 30, 2026
6f408e8
Say which translation fields a new entry needs, and drop them from cr…
claude Jul 30, 2026
f02e047
Return targeting where update accepts it
claude Jul 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions api-reference/account/update-account.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: patch /accounts/{id}
---
42 changes: 35 additions & 7 deletions api-reference/authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ If you exceed a limit you receive a `429 Too Many Requests` response with a `Ret

## Pagination

List endpoints support pagination with the following query parameters:
List endpoints support pagination with the following query parameters. [Banner templates](/api-reference/consent-banners/list-banner-templates) is the one exception — it returns the whole catalogue and accepts neither parameter.

| Parameter | Description | Default |
|-----------|-------------|---------|
Expand All @@ -90,22 +90,49 @@ Resource endpoints expect the resource wrapped under its own key rather than at
}
```

The wrapper matches the resource: `category`, `storage_item`, `group`, `account_user`, `account_invitation`, and `user` for [Change password](/api-reference/auth/change-password).
The wrapper matches the resource, though not always the path — `/services` wraps in `site_service`:

[Log in](/api-reference/auth/login) is the exception — it takes `email` and `password` at the top level, unwrapped.
| Endpoint | Wrapper |
|---|---|
| `/categories` | `category` |
| `/storage-items` | `storage_item` |
| `/services` | `site_service` |
| `/consent-banners` | `consent_banner` |
| `/scans` | `scan` |
| `/integrations` | `integration` |
| `/accounts` | `account` |
| `/groups` | `group` |
| `/account-users` | `account_user` |
| `/account-invitations` | `account_invitation` |
| [Change password](/api-reference/auth/change-password) | `user` |

Two endpoints take their body unwrapped: [Log in](/api-reference/auth/login), which takes `email` and `password` at the top level, and [Create consent banner from a template](/api-reference/consent-banners/create-consent-banner-from-template), which takes `jurisdiction_id` — a selector for which template to build from, not an attribute of the banner it creates.

## Choosing an account

An account API key identifies exactly one account, so there is nothing to choose. A user API key can reach several, and the endpoints that declare an `account_id` query parameter — the account's API id — let you say which one you mean. Endpoints that don't declare it act on the account the key resolves to on its own.

Where an endpoint accepts it, reads treat it as optional — it just narrows the request — while writes require it whenever the key can reach more than one account: without it the request would act on an account it picked rather than one you named, so it is refused with a `400`. Endpoints that don't accept the parameter are unaffected either way.
Comment thread
danielpaul marked this conversation as resolved.

```
POST /api/v1/consent-banners?account_id=aBcD1234
```

## Response Envelopes

| Response | Shape |
|----------|-------|
| List endpoints | `{ "pagination": { ... }, "data": [ ... ] }` |
| [Banner templates](/api-reference/consent-banners/list-banner-templates) | `{ "data": [ ... ] }` — no pagination |
| Single resource | `{ "data": { ... } }` |
| A single group or account | The resource itself, unwrapped |
| Resource-deletion endpoints | `{ "message": "..." }` |
| [Log out](/api-reference/auth/logout) | `{}` |

Group and account **listings** use the standard list envelope in the first row — only their single-resource responses are unwrapped.

Banner templates are a fixed catalogue rather than a collection of the account's own records, so that endpoint is not paginated and returns no `pagination` object.

## Errors

The API returns standard HTTP status codes.
Expand All @@ -114,10 +141,11 @@ The API returns standard HTTP status codes.
|-------------|-------------|
| `200` | Success |
| `201` | Created |
| `400` | Bad request — an invalid `page` parameter |
| `401` | Unauthorized — invalid or missing API token, or a token of the wrong type |
| `404` | Not found |
| `422` | Validation error |
| `400` | Bad request — an invalid `page` parameter, or a write from a user key that can reach more than one account without an `account_id` |
| `401` | Unauthorized — invalid or missing API token, a token of the wrong type, or, on [Log in](/api-reference/auth/login), the wrong email or password |
| `403` | Forbidden — the key resolved to a user who is not an admin of the account, on a change the dashboard reserves for admins; or the account's plan does not include the feature, as with the [compliance report](/api-reference/compliance/get-compliance-report) |
| `404` | Not found — including a referenced record that belongs to another account |
| `422` | Validation error, or a setting the account's plan does not allow |
| `429` | Rate limit exceeded |

Authentication, pagination and not-found errors return an `errors` array of objects with `code` and `message`:
Expand Down
3 changes: 3 additions & 0 deletions api-reference/compliance/get-compliance-report.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /compliance
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: post /consent-banners/from-template
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/create-consent-banner.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: post /consent-banners
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/delete-consent-banner.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: delete /consent-banners/{id}
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/duplicate-consent-banner.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: post /consent-banners/{id}/duplicate
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/get-consent-banner.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /consent-banners/{id}
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/list-banner-templates.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /banner-templates
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/list-consent-banners.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /consent-banners
---
3 changes: 3 additions & 0 deletions api-reference/consent-banners/update-consent-banner.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: put /consent-banners/{id}
---
3 changes: 3 additions & 0 deletions api-reference/integrations/get-integration.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /integrations/{id}
---
3 changes: 3 additions & 0 deletions api-reference/integrations/list-integrations.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /integrations
---
3 changes: 3 additions & 0 deletions api-reference/integrations/update-integration.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: put /integrations/{id}
---
3 changes: 3 additions & 0 deletions api-reference/scans/create-scan.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: post /scans
---
3 changes: 3 additions & 0 deletions api-reference/scans/get-scan.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /scans/{id}
---
3 changes: 3 additions & 0 deletions api-reference/scans/list-scans.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /scans
---
3 changes: 3 additions & 0 deletions api-reference/services/create-service.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: post /services
---
3 changes: 3 additions & 0 deletions api-reference/services/delete-service.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: delete /services/{id}
---
3 changes: 3 additions & 0 deletions api-reference/services/get-service.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /services/{id}
---
3 changes: 3 additions & 0 deletions api-reference/services/list-services.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: get /services
---
3 changes: 3 additions & 0 deletions api-reference/services/update-service.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
openapi: put /services/{id}
---
57 changes: 54 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@
"library": "lucide"
},
"contextual": {
"options": ["copy", "view", "chatgpt", "claude"]
"options": [
"copy",
"view",
"chatgpt",
"claude"
]
},
"favicon": "/favicon.png",
"navigation": {
Expand Down Expand Up @@ -163,7 +168,53 @@
"group": "Account",
"pages": [
"api-reference/account/list-accounts",
"api-reference/account/get-account"
"api-reference/account/get-account",
"api-reference/account/update-account"
]
},
{
"group": "Consent Banners",
"pages": [
"api-reference/consent-banners/list-consent-banners",
"api-reference/consent-banners/create-consent-banner",
"api-reference/consent-banners/list-banner-templates",
"api-reference/consent-banners/create-consent-banner-from-template",
"api-reference/consent-banners/get-consent-banner",
"api-reference/consent-banners/update-consent-banner",
"api-reference/consent-banners/duplicate-consent-banner",
"api-reference/consent-banners/delete-consent-banner"
]
},
{
"group": "Services",
"pages": [
"api-reference/services/list-services",
"api-reference/services/create-service",
"api-reference/services/get-service",
"api-reference/services/update-service",
"api-reference/services/delete-service"
]
},
{
"group": "Compliance",
"pages": [
"api-reference/compliance/get-compliance-report"
]
},
{
"group": "Scans",
"pages": [
"api-reference/scans/list-scans",
"api-reference/scans/create-scan",
"api-reference/scans/get-scan"
]
},
{
"group": "Integrations",
"pages": [
"api-reference/integrations/list-integrations",
"api-reference/integrations/get-integration",
"api-reference/integrations/update-integration"
]
},
{
Expand Down Expand Up @@ -317,4 +368,4 @@
"appId": "r4jecam1"
}
}
}
}
Loading