--- title: "Introduction" slug: "endpoints-introduction" updated: 2026-07-07T10:12:21Z published: 2026-07-07T10:12:21Z canonical: "apidocs.document360.com/endpoints-introduction" --- > ## Documentation Index > Fetch the complete documentation index at: https://apidocs.document360.com/llms.txt > Use this file to discover all available pages before exploring further. # Introduction ## Document360 Customer API 2.0.0 Document360 RESTful APIs let you integrate your documentation with your software — onboard readers, manage articles, automate publishing, and more. ## Authentication Every request must include your API token in the `api_token` header. Generate tokens in the Document360 portal under **Settings** > **Knowledge base portal** > **API tokens**. Tokens are project-scoped and can be revoked at any time. If your client cannot set custom headers, you can pass the same token in the `api_token` query string instead — but the header form is strongly preferred. ## Project context Many endpoints implicitly resolve the project from the API token. When an endpoint requires explicit project context, pass the project identifier in the `ProjectId` header. ## Identifiers — how to fetch them Most endpoints accept one or more identifiers as path, query, or body parameters. Instead of hard-coding values, use the discovery endpoints below to look them up programmatically: | Identifier | What it is | Where to fetch it | |---|---|---| | `projectVersionId` (a.k.a. workspaceId) | A workspace/version inside the project. Content — articles, categories, and languages — lives within one. | `GET /v2/projectversions` returns all workspaces with their `id`. Call this first to discover articles, categories, and languages. | | `categoryId` | A category in the category tree. | `GET /v2/projectversions/{projectVersionId}/categories` returns the full category hierarchy with each category's `id`. | | `articleId` | An article inside a category. | `GET /v2/projectversions/{projectVersionId}/articles` lists all articles in the workspace. Article IDs also appear in the categories tree response. | | `langCode` | The two-letter or locale code (`en`, `fr`, `de-DE`, `pt-BR`, …) of an article or category translation. | `GET /v2/language/{projectVersionId}` returns the languages enabled for the workspace, including each `code` and `name`. | | `versionNumber` | A specific version of an article or category translation. | `GET /v2/articles/{articleId}/{langCode}/versions` for articles; `GET /v2/categories/{categoryId}/{langCode}/versions` for categories. | | `userId` (team account) | A portal user (team member). | `GET /v2/teams` lists all team accounts with their `userId`; `GET /v2/teams/{userId}` returns full details for one. | | `groupId` (team) | A team account group. | `GET /v2/teams/groups` lists all team account groups. | | `roleId` | A role assignable to team accounts. | `GET /v2/teams/roles` lists all available roles. | | `readerId` | A reader account, used for private documentation and reader analytics. | `GET /v2/readers` lists all readers; supports pagination and `searchEmail` filtering. | | `groupId` (reader) | A reader group. | `GET /v2/readers/groups` lists all reader groups. | > **Tip:** In the Document360 portal, article and category IDs are visible in the URL when an item is open in the editor — for example, `…/docs//edit/`. You can find the `projectId` under **Settings → API tokens** and the `projectVersionId` under **Documentation → Workspaces**. ## Query parameter casing V1 and V2 query parameters use **snake_case** on the wire — for example, `search_email`, `exclude_readers`, and `version_number`. The server transparently maps snake_case query keys to the camelCase parameter names shown in this specification, so either casing is accepted. However, snake_case is the documented convention for V1/V2. ## Response envelope All responses are wrapped in a consistent envelope: - `success` (boolean) — `true` when the operation succeeded, `false` otherwise. Always check this before reading the payload. - `errors` (array) — populated when `success` is `false`. Each entry includes a human-readable `description`. - `warnings` / `information` (arrays) — non-fatal advisories returned alongside a successful response. - `result` or `data` — the operation's payload (the property name depends on the endpoint). HTTP status codes follow standard semantics: `200` success, `400` validation or business error, `401` missing or invalid token, `403` plan or permission restriction, `404` not found, `429` rate-limited, and `5xx` server error. The envelope applies to non-`200` responses as well — inspect `errors[].description` for details. ## Rate limits Endpoints are rate-limited per API token, per project. When a request is throttled, the server returns `429 Too Many Requests` along with the `Retry-After`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers. Honor the `Retry-After` value, and retry using exponential backoff with jitter. ## Versioning All routes are prefixed with the API version: `/v1/...` and `/v2/...`. V1 and V2 are stable; V3 is in Beta. In V1 and V2, new endpoints and fields may be added without notice, but existing ones will never be removed or renamed in a backwards-incompatible way. ## Servers | Server | URL | |---|---| | Document360 API Hub | `https://apihub.document360.io` | | Document360 API Hub — US data center | `https://apihub.us.document360.io` | | Private hosting — provide your subdomain | `https://apihub.{private_hosting}.document360.io` | **Server variables** | Variable | Default | Description | |---|---|---| | `private_hosting` | `domain` | Subdomain for private hosting |