@@ -181,7 +200,7 @@ This API is intended to manage the different ZITADEL instances within the system
Checkout the guide how to [access the ZITADEL System API](/guides/integrate/zitadel-apis/access-zitadel-system-api).
-
+
#### System GRPC
@@ -220,61 +239,22 @@ Endpoint:
`${CUSTOM_DOMAIN}/assets/v1/`
Definition:
-[Assets](./assets/assets)
+[Assets](/apis/assets/assets)
-## API definitions
+## Client libraries & schemas
-Each service's proto definition is located in the source control on GitHub.
-As we generate the REST services and Swagger file out of the proto definition we recommend that you rely on the proto file.
-We annotate the corresponding REST methods on each possible call as well as the AuthN and AuthZ requirements.
-The last API (assets) is only a REST API because ZITADEL uses multipart form data for certain elements.
-
-### SDKs
-
-ZITADEL provides some [official and community supported SDKs](/sdk-examples/introduction) for multiple languages and frameworks.
-Most languages allow you to build a client from proto definitions, which allows you to build your own client in case an SDK is missing.
-
-### Proto
-
-All of our APIs are generated by proto definitions. You can find all the proto definitions in the [Proto API Definitions](https://github.com/zitadel/zitadel/tree/main/proto/zitadel).
-
-> More about [Protocol Buffer](https://developers.google.com/protocol-buffers)
-
-### Example
-
-See below for an example with the call **GetMyUser**.
-
-```go
- //User
- rpc GetMyUser(google.protobuf.Empty) returns (UserView) {
- option (google.api.http) = {
- get: "/users/me"
- };
-
- option (zitadel.v1.auth_option) = {
- permission: "authenticated"
- };
- }
-```
-
-As you can see the `GetMyUser` function is also available as a REST service under the path `/users/me`.
-
-In the table below you can see the URI of those calls.
-
-| Service | URI |
-| :------ | :---------------------------------------------------- |
-| REST | `${CUSTOM_DOMAIN}/auth/v1/users/me` |
-| GRPC | `${CUSTOM_DOMAIN}/zitadel.auth.v1.AuthService/GetMyUser` |
+ZITADEL publishes [official and community-supported SDKs](/sdk-examples/introduction) for multiple languages and frameworks.
+All API services are defined as [proto definitions on GitHub](https://github.com/zitadel/zitadel/tree/main/proto/zitadel) — most languages let you generate a type-safe client directly from them.
## Domains
ZITADEL hosts everything under a single domain: `{instance}.zitadel.cloud` or your Custom Domain `${CUSTOM_DOMAIN}`
-The domain is used as the OIDC issuer and as the base url for the gRPC and REST APIs, the Login and Management Console UI, which you'll find under `${CUSTOM_DOMAIN}/ui/console/`.
+The domain is used as the OIDC issuer and as the base URL for the gRPC and REST APIs, the Management Console (`${CUSTOM_DOMAIN}/ui/console/`), and the hosted Login UI (`${CUSTOM_DOMAIN}/ui/v2/login`).
Are you self-hosting and having troubles with _Instance not found_ errors? [Check out this page](/self-hosting/manage/custom-domain).
@@ -283,7 +263,31 @@ Are you self-hosting and having troubles with _Instance not found_ errors? [Chec
If you run ZITADEL on a Custom Domain, you may want to reuse that domain for other applications.
For easy copying to your reverse proxy configuration, here is the list of URL path prefixes, ZITADEL uses.
-```yaml
+```
+# v2 APIs (recommended for new integrations)
+# REST (HTTP/JSON transcoding):
+/v2/
+# gRPC + Connect protocol (binary or JSON via connectRPC):
+/zitadel.action.v2.ActionService/
+/zitadel.application.v2.ApplicationService/
+/zitadel.authorization.v2.AuthorizationService/
+/zitadel.feature.v2.FeatureService/
+/zitadel.group.v2.GroupService/
+/zitadel.idp.v2.IdentityProviderService/
+/zitadel.instance.v2.InstanceService/
+/zitadel.oidc.v2.OIDCService/
+/zitadel.org.v2.OrganizationService/
+/zitadel.project.v2.ProjectService/
+/zitadel.saml.v2.SAMLService/
+/zitadel.session.v2.SessionService/
+/zitadel.settings.v2.SettingsService/
+/zitadel.user.v2.UserService/
+/zitadel.webkey.v2.WebKeyService/
+
+# v2beta — kept for backward compatibility, use /v2/ for new work
+/v2beta/
+
+# Legacy v1 APIs
/zitadel.admin.v1.AdminService/
/admin/v1/
/zitadel.auth.v1.AuthService/
@@ -293,7 +297,8 @@ For easy copying to your reverse proxy configuration, here is the list of URL pa
/zitadel.system.v1.SystemService/
/system/v1/
/assets/v1/
-/ui/
+
+# OpenID Connect, OAuth 2.0, SAML 2.0 & standards
/oidc/v1/
/saml/v2/
/oauth/v2/
@@ -301,18 +306,11 @@ For easy copying to your reverse proxy configuration, here is the list of URL pa
/.well-known/openid-configuration
/openapi/
/idps/callback
-/v2beta/
-/zitadel.user.v2beta.UserService/
-/zitadel.session.v2beta.SessionService/
-/zitadel.settings.v2beta.SettingsService/
-/zitadel.oidc.v2beta.OIDCService/
-/zitadel.org.v2beta.OrganizationService/
-/v2/
-/zitadel.user.v2.UserService/
-/zitadel.session.v2.SessionService/
-/zitadel.settings.v2.SettingsService/
-/zitadel.oidc.v2.OIDCService/
-/zitadel.org.v2.OrganizationService/
+
+# UIs
+/ui/console/ # Management Console (Angular admin UI)
+/ui/v2/login # Login UI v2 (Next.js; routes to a separate container in self-hosted deployments)
+/ui/login/ # Login UI v1 (legacy, built into the ZITADEL binary)
```
## Postman Collection (Beta)
diff --git a/apps/docs/content/apis/migration_v1_to_v2.mdx b/apps/docs/content/apis/migration_v1_to_v2.mdx
index 9e15ab6fb..0d46c1fbe 100644
--- a/apps/docs/content/apis/migration_v1_to_v2.mdx
+++ b/apps/docs/content/apis/migration_v1_to_v2.mdx
@@ -3,8 +3,9 @@ title: Migrate from v1 APIs to v2 APIs
description: "Migrate from ZITADEL's v1 APIs to v2 APIs and adopt a resource-based architecture for improved intuitiveness and efficiency"
---
-This guide gives you an overview for migrating from our v1 API to the new and improved v2 API.
-This upgrade introduces some significant architectural changes designed to make your development experience smoother, more intuitive, and efficient.
+This guide helps you migrate from our v1 APIs to v2 APIs.
+Use v2 where the required resource is available, and keep using v1 for capabilities that are not yet migrated.
+The sections below explain the architectural changes and the concrete migration considerations.
## The v1 Approach: Use-Case Based APIs
Our v1 API was structured around use cases, meaning we provided distinct APIs tailored to different user roles:
diff --git a/apps/docs/content/apis/v2.mdx b/apps/docs/content/apis/v2.mdx
index fed422b13..adbaafdb9 100644
--- a/apps/docs/content/apis/v2.mdx
+++ b/apps/docs/content/apis/v2.mdx
@@ -5,8 +5,10 @@ description: "Explore ZITADEL APIs V2. Organize access by resource and simplify
import DocCardList from '@/components/docusaurus/doc-card-list';
-APIs V2 organize access by resources (users, settings, etc.), unlike context-specific V1 APIs.
-This simplifies finding the right API, especially for multi-organization resources.
+The v2 APIs are the recommended way to interact with ZITADEL resources.
+They are resource-based, automatically scope results to the caller's permissions, and replace the context-specific v1 APIs over time.
+
+If a resource you need is not yet available here, use the corresponding [legacy v1 API](/apis/introduction#legacy-v1-apis) for that operation and check the [migration guide](/apis/migration_v1_to_v2) to plan your transition.
Users created with the V2 API have no initial state anymore, so new users are immediately active.
Requesting ZITADEL to send a verification email on user creation is still possible.