diff --git a/.fernignore b/.fernignore
new file mode 100644
index 000000000..b48f3efae
--- /dev/null
+++ b/.fernignore
@@ -0,0 +1,90 @@
+# Specify files that shouldn't be modified by Fern
+
+# README should not be overwritten as it combines both SDKs
+README.md
+
+# Examples and Migration Guide from auth0-real
+EXAMPLES.md
+v3_MIGRATION_GUIDE.md
+MIGRATION_GUIDE.md
+LICENSE
+CHANGELOG.md
+
+# Legacy management API from auth0-real
+src/main/java/com/auth0/client/legacy/
+
+# Authentication API (manually maintained from auth0-real)
+src/main/java/com/auth0/client/auth/
+src/test/java/com/auth0/client/auth/
+
+# Supporting packages from auth0-real
+src/main/java/com/auth0/net/
+src/main/java/com/auth0/exception/
+src/main/java/com/auth0/utils/
+src/main/java/com/auth0/json/auth/
+src/main/java/com/auth0/json/mgmt/
+src/main/java/com/auth0/json/ObjectMapperProvider.java
+
+# Client options from auth0-real
+src/main/java/com/auth0/client/HttpOptions.java
+src/main/java/com/auth0/client/ProxyOptions.java
+src/main/java/com/auth0/client/LoggingOptions.java
+
+# TokenProvider interface (shared between Fern-generated Management API and auth0-provided Authentication API)
+src/main/java/com/auth0/client/mgmt/TokenProvider.java
+
+# Test infrastructure from auth0-real
+src/test/java/com/auth0/net/
+src/test/java/com/auth0/exception/
+src/test/java/com/auth0/utils/
+src/test/java/com/auth0/json/
+src/test/resources/
+src/test/resources/auth/
+src/test/resources/keys/
+src/test/resources/mgmt/
+src/test/resources/mockito-extensions/
+src/test/java/com/auth0/client/legacy/
+
+# Custom client builder and examples
+src/main/java/com/auth0/client/Auth0ClientBuilder.java
+src/main/java/com/auth0/client/ClientCredentialsTokenProvider.java
+src/main/java/com/auth0/client/ManagementApiWithTokenProvider.java
+src/main/java/com/auth0/client/TokenProvider.java
+src/main/java/com/auth0/client/interceptors/
+
+# Custom OAuth client credentials support
+src/main/java/com/auth0/client/mgmt/core/RequestOptions.java
+src/main/java/com/auth0/client/mgmt/core/ClientOptions.java
+src/main/java/com/auth0/client/mgmt/core/OAuthTokenSupplier.java
+src/main/java/com/auth0/client/mgmt/core/OAuthTokenException.java
+
+# Custom builder with domain-based initialization
+src/main/java/com/auth0/client/mgmt/ManagementApiBuilder.java
+
+# Custom tests
+src/test/java/com/auth0/client/mgmt/DynamicTokenManagementTest.java
+src/test/java/com/auth0/client/mgmt/OAuthTokenSupplierTest.java
+src/test/java/com/auth0/client/mgmt/ManagementApiBuilderTest.java
+
+# Configuration files from auth0-real
+.codecov.yml
+.editorconfig
+.semgrepignore
+.shiprc
+.snyk
+.version
+opslevel.yml
+.fern/
+
+# GitHub workflows
+.github/
+
+# Build files and configs
+gradle/
+gradlew
+gradlew.bat
+gradle.properties
+settings.gradle
+build.gradle
+sample-app/
+
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index fece2c04f..05ffc76b8 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -4,7 +4,7 @@ on:
pull_request:
merge_group:
push:
- branches: ["master", "main", "v1"]
+ branches: ["master", "main", "v3"]
jobs:
gradle:
@@ -19,8 +19,8 @@ jobs:
- name: Set up Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
- - name: Test and Assemble and ApiDiff with Gradle
- run: ./gradlew assemble apiDiff check jacocoTestReport --continue --console=plain
+ - name: Test and Assemble with Gradle
+ run: ./gradlew assemble check --continue --console=plain
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
with:
diff --git a/.github/workflows/rl-scanner.yml b/.github/workflows/rl-scanner.yml
index 1455774ea..810c5277c 100644
--- a/.github/workflows/rl-scanner.yml
+++ b/.github/workflows/rl-scanner.yml
@@ -42,8 +42,8 @@ jobs:
- name: Set up Gradle
uses: gradle/actions/setup-gradle@4d9f0ba0025fe599b4ebab900eb7f3a1d93ef4c2 # v5.0.0
- - name: Test and Assemble and ApiDiff with Gradle
- run: ./gradlew assemble apiDiff check jacocoTestReport --continue --console=plain
+ - name: Test and Assemble with Gradle
+ run: ./gradlew assemble check --continue --console=plain
- id: get_version
uses: ./.github/actions/get-version
diff --git a/.gitignore b/.gitignore
index c4a5be0b0..d4199abc2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,122 +1,24 @@
-bin/
-
-# Created by https://www.gitignore.io/api/java,gradle,osx,windows,intellij+iml
-
-### OSX ###
-*.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-# Thumbnails
-._*
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-.com.apple.timemachine.donotpresent
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-
-
-### Windows ###
-# Windows thumbnail cache files
-Thumbs.db
-ehthumbs.db
-ehthumbs_vista.db
-
-# Folder config file
-Desktop.ini
-
-# Recycle Bin used on file shares
-$RECYCLE.BIN/
-
-# Windows Installer files
-*.cab
-*.msi
-*.msm
-*.msp
-
-# Windows shortcuts
-*.lnk
-
-
-### Java ###
*.class
-
-# BlueJ files
-*.ctxt
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
-
-# Package Files #
-*.jar
-*.war
-*.ear
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-
-
-### Gradle ###
+.project
.gradle
-/build/
-
-# Ignore Gradle GUI config
-gradle-app.setting
-
-# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
-!gradle-wrapper.jar
-
-# Cache of project
-.gradletasknamecache
-
-# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
-# gradle/wrapper/gradle-wrapper.properties
-
-# End of https://www.gitignore.io/api/java,gradle,osx,windows
-
-
-### Intellij+iml ###
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-
-# User-specific stuff:
-.idea/workspace.xml
-.idea/tasks.xml
-
-# Sensitive or high-churn files:
-.idea/
-
-# Gradle:
-.idea/gradle.xml
-.idea/libraries
-
-# Mongo Explorer plugin:
-.idea/mongoSettings.xml
-
-## File-based project format:
-*.iws
-
-### Intellij+iml Patch ###
-# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
-
+?
+.classpath
+.checkstyle
+.settings
+.node
+build
+
+# IntelliJ
*.iml
-modules.xml
-.idea/misc.xml
*.ipr
-/out/
+*.iws
+.idea/
+out/
-# End of https://www.gitignore.io/api/intellij+iml
+# Eclipse/IntelliJ APT
+generated_src/
+generated_testSrc/
+generated/
-# NetBeans IDE files
-/.nb-gradle/
\ No newline at end of file
+bin
+build
\ No newline at end of file
diff --git a/.version b/.version
index a5f3e61bd..7e9b52499 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-2.27.0
+3.0.0-beta.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8dc5a666b..249367a6b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Change Log
+## [3.0.0-beta.0](https://github.com/auth0/auth0-java/tree/3.0.0-beta.0) (2025-12-18)
+[Full Changelog](https://github.com/auth0/auth0-java/compare/2.27.0...3.0.0-beta.0)
+
+> **Warning** This SDK is in beta and is subject to breaking changes. It is not recommended for production use, but your feedback and help in testing is appreciated!
+
+**Added**
+- Complete rewrite of the **Management API client** using Fern code generation
+- Update OkHttp to 5.2.1
+- API attributes can set null for patch operations
+- Nullability annotations to POJO classes
+- Fully compatible **Authentication API client** — no breaking changes
+
+- [Migration guide](MIGRATION_GUIDE) available for upgrading from v2.x
+
+
## [2.27.0](https://github.com/auth0/auth0-java/tree/2.27.0) (2025-12-18)
[Full Changelog](https://github.com/auth0/auth0-java/compare/2.26.0...2.27.0)
@@ -160,7 +175,7 @@
**Added**
- Support organization in client credentials [\#582](https://github.com/auth0/auth0-java/pull/582) ([jimmyjames](https://github.com/jimmyjames))
-
+
# [2.8.0](https://github.com/auth0/auth0-java/tree/2.8.0) (2023-11-07)
[Full Changelog](https://github.com/auth0/auth0-java/compare/2.7.0...2.8.0)
@@ -218,7 +233,7 @@
[Full Changelog](https://github.com/auth0/auth0-java/compare/2.1.0...2.2.0)
**Added**
-- Add support for client credential management [\#525](https://github.com/auth0/auth0-java/pull/525) ([jimmyjames](https://github.com/jimmyjames))
+- Add support for client credential management [\#525](https://github.com/auth0/auth0-java/pull/525) ([jimmyjames](https://github.com/jimmyjames))
**Fixed**
- Fix headers to lowercase [\#528](https://github.com/auth0/auth0-java/pull/528) ([alexz75](https://github.com/alexz75))
@@ -228,7 +243,7 @@
[Full Changelog](https://github.com/auth0/auth0-java/compare/2.0.0...2.1.0)
**Added**
-- Add missing LogEvent fields [\#521](https://github.com/auth0/auth0-java/pull/521) ([jimmyjames](https://github.com/jimmyjames))
+- Add missing LogEvent fields [\#521](https://github.com/auth0/auth0-java/pull/521) ([jimmyjames](https://github.com/jimmyjames))
**Changed**
- authentication_methods is an object, not a string [\#520](https://github.com/auth0/auth0-java/pull/520) ([jimmyjames](https://github.com/jimmyjames))
@@ -247,7 +262,6 @@
- ... and more!
As a major version release, 2.0.0 does include breaking changes.
-Please see the [Migration Guide](MIGRATION_GUIDE.md) for additional details as well as guidance for updating your application.
## [2.0.0 Beta 2](https://github.com/auth0/auth0-java/tree/2.0.0-beta.2) (2023-02-13)
[Full Changelog](https://github.com/auth0/auth0-java/compare/2.0.0-beta.1...2.0.0-beta.2)
@@ -274,8 +288,6 @@ This release introduces several enhancement, including:
- Authentication API improvements to not require a client secret
- ... and more!
-Please see the [Migration Guide](MIGRATION_GUIDE.md) for guidance on updating your application.
-
## [1.44.2](https://github.com/auth0/auth0-java/tree/1.44.2) (2023-01-11)
[Full Changelog](https://github.com/auth0/auth0-java/compare/1.44.1...1.44.2)
@@ -839,18 +851,17 @@ ManagementAPI mgmt = new ManagementAPI("{YOUR_DOMAIN}", "{YOUR_API_TOKEN}");
The Management API is divided into different entities. Each of them have the list, create, update, delete and update methods plus a few more if corresponds. The calls are authenticated using the API Token given in the `ManagementAPI` instance creation and must contain the `scope` required by each entity. See the javadoc for details on which `scope` is expected for each call.
-* **Client Grants:** See [Docs](https://auth0.com/docs/api/management/v2#!/Client_Grants/get_client_grants). Access the methods by calling `mgmt.clientGrants()`.
-* **Clients:** See [Docs](https://auth0.com/docs/api/management/v2#!/Clients/get_clients). Access the methods by calling `mgmt.clients()`.
-* **Connections:** See [Docs](https://auth0.com/docs/api/management/v2#!/Connections/get_connections). Access the methods by calling `mgmt.connections()`.
-* **Device Credentials:** See [Docs](https://auth0.com/docs/api/management/v2#!/Device_Credentials/get_device_credentials). Access the methods by calling `mgmt.deviceCredentials()`.
-* **Logs:** See [Docs](https://auth0.com/docs/api/management/v2#!/Logs/get_logs). Access the methods by calling `mgmt.logEvents()`.
-* **Rules:** See [Docs](https://auth0.com/docs/api/management/v2#!/Rules/get_rules). Access the methods by calling `mgmt.rules()`.
-* **User Blocks:** See [Docs](https://auth0.com/docs/api/management/v2#!/User_Blocks/get_user_blocks). Access the methods by calling `mgmt.userBlocks()`.
-* **Users:** See [Docs](https://auth0.com/docs/api/management/v2#!/Users/get_users). Access the methods by calling `mgmt.users()`.
-* **Blacklists:** See [Docs](https://auth0.com/docs/api/management/v2#!/Blacklists/get_tokens). Access the methods by calling `mgmt.blacklists()`.
-* **Emails:** See [Docs](https://auth0.com/docs/api/management/v2#!/Emails/get_provider). Access the methods by calling `mgmt.emailProvider()`.
-* **Guardian:** See [Docs](https://auth0.com/docs/api/management/v2#!/Guardian/get_factors). Access the methods by calling `mgmt.guardian()`.
-* **Stats:** See [Docs](https://auth0.com/docs/api/management/v2#!/Stats/get_active_users). Access the methods by calling `mgmt.stats()`.
-* **Tenants:** See [Docs](https://auth0.com/docs/api/management/v2#!/Tenants/get_settings). Access the methods by calling `mgmt.tenants()`.
+* **Client Grants:** See [Docs](https://auth0.com/docs/api/management/v2#!/Client_Grants/get_client_grants). Access the methods by calling `mgmt.clientGrants()`.
+* **Clients:** See [Docs](https://auth0.com/docs/api/management/v2#!/Clients/get_clients). Access the methods by calling `mgmt.clients()`.
+* **Connections:** See [Docs](https://auth0.com/docs/api/management/v2#!/Connections/get_connections). Access the methods by calling `mgmt.connections()`.
+* **Device Credentials:** See [Docs](https://auth0.com/docs/api/management/v2#!/Device_Credentials/get_device_credentials). Access the methods by calling `mgmt.deviceCredentials()`.
+* **Logs:** See [Docs](https://auth0.com/docs/api/management/v2#!/Logs/get_logs). Access the methods by calling `mgmt.logEvents()`.
+* **Rules:** See [Docs](https://auth0.com/docs/api/management/v2#!/Rules/get_rules). Access the methods by calling `mgmt.rules()`.
+* **User Blocks:** See [Docs](https://auth0.com/docs/api/management/v2#!/User_Blocks/get_user_blocks). Access the methods by calling `mgmt.userBlocks()`.
+* **Users:** See [Docs](https://auth0.com/docs/api/management/v2#!/Users/get_users). Access the methods by calling `mgmt.users()`.
+* **Blacklists:** See [Docs](https://auth0.com/docs/api/management/v2#!/Blacklists/get_tokens). Access the methods by calling `mgmt.blacklists()`.
+* **Emails:** See [Docs](https://auth0.com/docs/api/management/v2#!/Emails/get_provider). Access the methods by calling `mgmt.emailProvider()`.
+* **Guardian:** See [Docs](https://auth0.com/docs/api/management/v2#!/Guardian/get_factors). Access the methods by calling `mgmt.guardian()`.
+* **Stats:** See [Docs](https://auth0.com/docs/api/management/v2#!/Stats/get_active_users). Access the methods by calling `mgmt.stats()`.
+* **Tenants:** See [Docs](https://auth0.com/docs/api/management/v2#!/Tenants/get_settings). Access the methods by calling `mgmt.tenants()`.
* **Tickets:** See [Docs](https://auth0.com/docs/api/management/v2#!/Tickets/post_email_verification). Access the methods by calling `mgmt.tickets()`.
-
diff --git a/LICENSE b/LICENSE
index d865b7591..5e57a4f8a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md
index 5327386a6..d6c7e9ac0 100644
--- a/MIGRATION_GUIDE.md
+++ b/MIGRATION_GUIDE.md
@@ -1,154 +1,369 @@
-# Migration Guide
+# V3 Migration Guide
-## Migrating from v1 to v2
+A guide to migrating the Auth0 Java SDK from `v2` to `v3`.
-The version 2 release includes several notable improvements, including:
+- [Overall changes](#overall-changes)
+ - [Java versions](#java-versions)
+ - [Authentication API](#authentication-api)
+ - [Management API](#management-api)
+- [Specific changes to the Management API](#specific-changes-to-the-management-api)
+ - [Client initialization](#client-initialization)
+ - [Sub-client organization](#sub-client-organization)
+ - [Request and response patterns](#request-and-response-patterns)
+ - [Pagination](#pagination)
+ - [Exception handling](#exception-handling)
+ - [Accessing raw HTTP responses](#accessing-raw-http-responses)
+ - [Request-level configuration](#request-level-configuration)
+ - [Type changes](#type-changes)
-* Requests can now be configured with additional parameters and headers, without needing to downcast to `CustomRequest`.
-* Responses are now wrapped in a new `com.auth0.net.Response` type, which provides information about the HTTP response such as headers and status code.
-* The `AuthAPI` and `ManagementAPI` clients can now share the same HTTP client.
-* The `AuthAPI` client no longer requires a client secret, enabling support for APIs and scenarios where a secret is not required.
+## Overall changes
-Version 2 includes breaking changes. Please read this guide to learn how to update your application for v2.
+### Java versions
-### Configuring `auth0-java` v2
+Both v2 and v3 require Java 8 or above.
-To create the API clients, use the new builders, and specify any HTTP-related configurations with the new `DefaultHttpClient`:
+### Authentication API
+
+This major version change does not affect the Authentication API. The `AuthAPI` class has been ported directly from v2 to v3. Any code written for the Authentication API in the v2 version should work in the v3 version.
```java
-Auth0HttpClient http = DefaultHttpClient.newBuilder()
- .withConnectTimeout(10)
- .withReadTimeout(10)
- // additional configurations as needed
- .build();
+// Works in both v2 and v3
+AuthAPI auth = AuthAPI.newBuilder("{YOUR_DOMAIN}", "{YOUR_CLIENT_ID}", "{YOUR_CLIENT_SECRET}").build();
+```
+
+### Management API
+
+V3 introduces significant improvements to the Management API SDK by migrating to [Fern](https://github.com/fern-api/fern) as the code generation tool. This provides:
+
+- Better resource grouping with sub-client organization
+- Type-safe request and response objects using builder patterns
+- Automatic pagination with `SyncPagingIterable> permissionsRequest = mgmt.users().getPermissions("user_id", new PermissionsFilter());
+Request
> rolesRequest = mgmt.users().getRoles("user_id", new RolesFilter());
+Request
> com.auth0.client.mgmt.ClientGrantsEntity#list()` has been removed. Use `Request
> com.auth0.client.mgmt.ClientsEntity#list()` has been removed. Use `Request
> com.auth0.client.mgmt.ClientsEntity#list(ConnectionFilter filter)` has been removed. Use `Request
> com.auth0.client.mgmt.GrantsEntity#list(String userId)` has been removed. Use `Request
> com.auth0.client.mgmt.ResourceServerEntity#list()` has been removed. Use `Request
> com.auth0.client.mgmt.RulesEntity#list(RulesFilter filter)` has been removed. Use `Request
Auth0 is an easy to implement, adaptable authentication and authorization platform. To learn more checkout Why Auth0?
-This project is licensed under the MIT license. See the LICENSE file for more info.
\ No newline at end of file +This project is licensed under the MIT license. See the LICENSE file for more info. diff --git a/build.gradle b/build.gradle index 0cf814cb5..92aeb6f7e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,160 +1,72 @@ -buildscript { - repositories { - jcenter() - } - - dependencies { - // https://github.com/melix/japicmp-gradle-plugin/issues/36 - classpath 'com.google.guava:guava:31.1-jre' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:2.1.0" - } -} - - plugins { - id 'java' - id 'jacoco' - id 'me.champeau.gradle.japicmp' version '0.2.9' - id 'io.github.gradle-nexus.publish-plugin' version '2.0.0' + id 'java-library' + id 'maven-publish' + id 'com.diffplug.spotless' version '6.11.0' + id 'io.github.gradle-nexus.publish-plugin' version '2.0.0' } repositories { - mavenCentral() + mavenCentral() + maven { + url 'https://s01.oss.sonatype.org/content/repositories/releases/' + } } apply from: rootProject.file('gradle/versioning.gradle') version = getVersionFromFile() group = GROUP + logger.lifecycle("Using version ${version} for ${name} group $group") -jacocoTestReport { - reports { - xml.enabled = true - html.enabled = true - } +dependencies { + // Core dependencies + api 'com.squareup.okhttp3:okhttp:5.2.1' + api 'com.fasterxml.jackson.core:jackson-databind:2.18.2' + api 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.2' + api 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2' + + // Dependencies for legacy management code from auth0-real + implementation 'com.squareup.okhttp3:logging-interceptor:5.2.1' + implementation 'com.auth0:java-jwt:4.4.0' + implementation 'com.auth0:jwks-rsa:0.22.1' + implementation 'net.jodah:failsafe:2.4.4' + + // Test dependencies + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2' + testImplementation 'org.mockito:mockito-core:4.11.0' + testImplementation 'com.squareup.okhttp3:mockwebserver:5.2.1' + testImplementation 'org.hamcrest:hamcrest:2.2' } java { - toolchain { - languageVersion = JavaLanguageVersion.of(8) - } + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } } -compileJava { - sourceCompatibility '1.8' - targetCompatibility '1.8' - - options.compilerArgs << "-Xlint:deprecation" << "-Xlint:unchecked" << "-Werror" -} +sourceCompatibility = 1.8 +targetCompatibility = 1.8 -compileTestJava { - options.compilerArgs << "-Xlint:deprecation" << "-Werror" +tasks.withType(Javadoc) { + failOnError false + options.addStringOption('Xdoclint:none', '-quiet') } -import me.champeau.gradle.japicmp.JapicmpTask - -project.afterEvaluate { - - def versions = project.ext.testInJavaVersions - for (pluginJavaTestVersion in versions) { - def taskName = "testInJava-${pluginJavaTestVersion}" - tasks.register(taskName, Test) { - def versionToUse = taskName.split("-").getAt(1) as Integer - description = "Runs unit tests on Java version ${versionToUse}." - project.logger.quiet("Test will be running in ${versionToUse}") - group = 'verification' - javaLauncher.set(javaToolchains.launcherFor { - languageVersion = JavaLanguageVersion.of(versionToUse) - }) - shouldRunAfter(tasks.named('test')) - } - tasks.named('check') { - dependsOn(taskName) - } - } - - project.configure(project) { - def baselineVersion = project.ext.baselineCompareVersion - task('apiDiff', type: JapicmpTask, dependsOn: 'jar') { - oldClasspath = files(getBaselineJar(project, baselineVersion)) - newClasspath = files(jar.archiveFile) - onlyModified = true - failOnModification = true - ignoreMissingClasses = true - htmlOutputFile = file("$buildDir/reports/apiDiff/apiDiff.html") - txtOutputFile = file("$buildDir/reports/apiDiff/apiDiff.txt") - doLast { - project.logger.quiet("Comparing against baseline version ${baselineVersion}") - } - } - } -} - -private static File getBaselineJar(Project project, String baselineVersion) { - // Use detached configuration: https://github.com/square/okhttp/blob/master/build.gradle#L270 - def group = project.group - try { - def baseline = "${project.group}:${project.name}:$baselineVersion" - project.group = 'virtual_group_for_japicmp' - def dependency = project.dependencies.create(baseline + "@jar") - return project.configurations.detachedConfiguration(dependency).files.find { - it.name == "${project.name}-${baselineVersion}.jar" - } - } finally { - project.group = group +spotless { + java { + palantirJavaFormat() } } test { - testLogging { - events "skipped", "failed" - exceptionFormat "short" - } - useJUnitPlatform() -} - -ext { - okhttpVersion = '4.12.0' - hamcrestVersion = '2.2' - jupiterVersion = '5.9.3' - - baselineCompareVersion = '2.0.0' - testInJavaVersions = [8, 11, 17, 21] + useJUnitPlatform() + testLogging { + showStandardStreams = true + } } -dependencies { - // TODO remove direct dependency when OkHttp 4.12.0 is released - implementation ("com.squareup.okhttp3:okhttp:${okhttpVersion}") { - exclude group: 'com.squareup.okhttp3', module: 'okio' - exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' - exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' - } - implementation "com.squareup.okio:okio:3.5.0" - - implementation "org.jetbrains.kotlin:kotlin-stdlib:2.1.0" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.0" - - implementation "com.squareup.okhttp3:logging-interceptor:${okhttpVersion}" - implementation "com.fasterxml.jackson.core:jackson-databind:2.15.0" - implementation "com.auth0:java-jwt:4.4.0" - implementation "net.jodah:failsafe:2.4.4" - - testImplementation "org.mockito:mockito-core:4.8.1" - testImplementation "com.squareup.okhttp3:mockwebserver:${okhttpVersion}" - testImplementation "org.hamcrest:hamcrest:${hamcrestVersion}" - testImplementation "org.junit.jupiter:junit-jupiter-api:${jupiterVersion}" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}" - - // Override MockWebServer's junit transitive dependency to latest v4 - constraints { - testImplementation( group: 'junit', name: 'junit'){ - version{ - strictly "[4.13.2]" - } - } - } -} apply from: rootProject.file('gradle/maven-publish.gradle') diff --git a/gradle.properties b/gradle.properties index 69714a96a..9a6dd7708 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ GROUP=com.auth0 POM_ARTIFACT_ID=auth0 -VERSION_NAME=2.12.0 +VERSION_NAME=3.0.0-beta.0 POM_NAME=auth0-java POM_DESCRIPTION=Java client library for the Auth0 platform diff --git a/gradle/maven-publish.gradle b/gradle/maven-publish.gradle index e458d769b..0b16478d5 100644 --- a/gradle/maven-publish.gradle +++ b/gradle/maven-publish.gradle @@ -35,7 +35,7 @@ publishing { groupId = GROUP artifactId = POM_ARTIFACT_ID - version = getVersionName() + version = project.version pom { name = POM_NAME diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f..1b33c55ba 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8049c684f..ff23a68d7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb6c..23d15a936 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,16 +200,20 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 53a6b238d..5eed7ee84 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -26,6 +28,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -42,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,22 +59,22 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/reference.md b/reference.md new file mode 100644 index 000000000..f3faa4c56 --- /dev/null +++ b/reference.md @@ -0,0 +1,28789 @@ +# Reference +## Actions +client.actions.list() -> SyncPagingIterable<Action>client.actions.create(request) -> CreateActionResponseContentclient.actions.get(id) -> GetActionResponseContentclient.actions.delete(id)client.actions.update(id, request) -> UpdateActionResponseContentclient.actions.deploy(id) -> DeployActionResponseContentclient.actions.test(id, request) -> TestActionResponseContentclient.branding.get() -> GetBrandingResponseContentclient.branding.update(request) -> UpdateBrandingResponseContentclient.clientGrants.list() -> SyncPagingIterable<ClientGrantResponseContent>client.clientGrants.create(request) -> CreateClientGrantResponseContentclient.clientGrants.delete(id)client.clientGrants.update(id, request) -> UpdateClientGrantResponseContentclient.clients.list() -> SyncPagingIterable<Client>client_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scope:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scope:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client.clients.create(request) -> CreateClientResponseContentclient_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use
+client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method
+to configure the client with client secret (basic or post) or with no authentication method (none).
+- When using client_authentication_methods to configure the client with Private Key JWT authentication method, specify fully defined credentials.
+These credentials will be automatically enabled for Private Key JWT authentication on the client.
+- To configure client_authentication_methods, the create:client_credentials scope is required.
+- To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+
+true to disable Single Sign On, false otherwise (default: false)
+
+true if the custom login page is to be used, false otherwise. Defaults to true
+
+client.clients.get(id) -> GetClientResponseContentclient_id, app_type, name, and description.
+ read:clients or
+ read:client_keys scopes:
+ callbacks, oidc_logout, allowed_origins,
+ web_origins, tenant, global, config_route,
+ callback_url_template, jwt_configuration,
+ jwt_configuration.lifetime_in_seconds, jwt_configuration.secret_encoded,
+ jwt_configuration.scopes, jwt_configuration.alg, api_type,
+ logo_uri, allowed_clients, owners, custom_login_page,
+ custom_login_page_off, sso, addons, form_template,
+ custom_login_page_codeview, resource_servers, client_metadata,
+ mobile, mobile.android, mobile.ios, allowed_logout_urls,
+ token_endpoint_auth_method, is_first_party, oidc_conformant,
+ is_token_endpoint_ip_header_trusted, initiate_login_uri, grant_types,
+ refresh_token, refresh_token.rotation_type, refresh_token.expiration_type,
+ refresh_token.leeway, refresh_token.token_lifetime, refresh_token.policies, organization_usage,
+ organization_require_behavior.
+ read:client_keys or read:client_credentials scopes:
+ encryption_key, encryption_key.pub, encryption_key.cert,
+ client_secret, client_authentication_methods and signing_key.
+ client.clients.delete(id)client.clients.update(id, request) -> UpdateClientResponseContentclient_authentication_methods and token_endpoint_auth_method properties are mutually exclusive. Use client_authentication_methods to configure the client with Private Key JWT authentication method. Otherwise, use token_endpoint_auth_method to configure the client with client secret (basic or post) or with no authentication method (none).
+- When using client_authentication_methods to configure the client with Private Key JWT authentication method, only specify the credential IDs that were generated when creating the credentials on the client.
+- To configure client_authentication_methods, the update:client_credentials scope is required.
+- To configure client_authentication_methods, the property jwt_configuration.alg must be set to RS256.
+- To change a client's is_first_party property to false, the organization_usage and organization_require_behavior properties must be unset.
+140)
+
+true to use Auth0 instead of the IdP to do Single Sign On, false otherwise (default: false)
+
+true if this client can be used to make cross-origin authentication requests, false otherwise if cross origin is disabled
+
+true to disable Single Sign On, false otherwise (default: false)
+
+true if the custom login page is to be used, false otherwise.
+
+client.clients.rotateSecret(id) -> RotateClientSecretResponseContentclient.connectionProfiles.list() -> SyncPagingIterable<ConnectionProfile>client.connectionProfiles.create(request) -> CreateConnectionProfileResponseContentclient.connectionProfiles.listTemplates() -> ListConnectionProfileTemplateResponseContentclient.connectionProfiles.getTemplate(id) -> GetConnectionProfileTemplateResponseContentclient.connectionProfiles.get(id) -> GetConnectionProfileResponseContentclient.connectionProfiles.delete(id)client.connectionProfiles.update(id, request) -> UpdateConnectionProfileResponseContentclient.connections.list() -> SyncPagingIterable<ConnectionForList>from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.create(request) -> CreateConnectionResponseContentbody.true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+false.)
+
+client.connections.get(id) -> GetConnectionResponseContenttrue if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.delete(id)client.connections.update(id, request) -> UpdateConnectionResponseContentoptions parameter, the entire options object is overriden. To avoid partial data or other issues, ensure all parameters are present when using this option.
+true promotes to a domain-level connection so that third-party applications can use it. false does not promote the connection, so only first-party applications with the connection enabled can use it. (Defaults to false.)
+
+false.)
+
+client.connections.checkStatus(id)ID. 200 OK http status code response is returned when the connection is online, otherwise a 404 status code is returned along with an error message
+client.customDomains.list() -> List<CustomDomain>domain:1 (ascending order by domain) is supported at this time.
+
+client.customDomains.create(request) -> CreateCustomDomainResponseContentclient.customDomains.get(id) -> GetCustomDomainResponseContentclient.customDomains.delete(id)client.customDomains.update(id, request) -> UpdateCustomDomainResponseContentcustom_client_ip_header for a domain, the body to
+send should be:
+{ "custom_client_ip_header": "cf-connecting-ip" }
+
+tls_policy for a domain, the body to send should be:
+{ "tls_policy": "recommended" }
+
+
+TLS Policies:
+
+- recommended - for modern usage this includes TLS 1.2 only
+
+
+Some considerations:
+
+- The TLS ciphers and protocols available in each TLS policy follow industry recommendations, and may be updated occasionally.
+- The compatible TLS policy is no longer supported.
+client.customDomains.test(id) -> TestCustomDomainResponseContentclient.customDomains.verify(id) -> VerifyCustomDomainResponseContentstatus field to see its verification status. Once verification is complete, it may take up to 10 minutes before the custom domain can start accepting requests.
+
+For self_managed_certs, when the custom domain is verified for the first time, the response will also include the cname_api_key which you will need to configure your proxy. This key must be kept secret, and is used to validate the proxy requests.
+
+Learn more about verifying custom domains that use Auth0 Managed certificates.
+Learn more about verifying custom domains that use Self Managed certificates.
+client.deviceCredentials.list() -> SyncPagingIterable<DeviceCredential>public_key, refresh_token, or rotating_refresh_token) associated with a specific user.
+client.deviceCredentials.createPublicKey(request) -> CreatePublicKeyDeviceCredentialResponseContentuser_id. Device Credentials APIs are designed for ad-hoc administrative use only and paging is by default enabled for GET requests.
+
+When refresh token rotation is enabled, the endpoint becomes consistent. For more information, read Signing Keys.
+client.deviceCredentials.delete(id)client.emailTemplates.create(request) -> CreateEmailTemplateResponseContentclient.emailTemplates.get(templateName) -> GetEmailTemplateResponseContentclient.emailTemplates.set(templateName, request) -> SetEmailTemplateResponseContentclient.emailTemplates.update(templateName, request) -> UpdateEmailTemplateResponseContentclient.eventStreams.list() -> ListEventStreamsResponseContentclient.eventStreams.create(request) -> CreateEventStreamResponseContentclient.eventStreams.get(id) -> GetEventStreamResponseContentclient.eventStreams.delete(id)client.eventStreams.update(id, request) -> UpdateEventStreamResponseContentclient.eventStreams.test(id, request) -> CreateEventStreamTestEventResponseContentclient.flows.list() -> SyncPagingIterable<FlowSummary>client.flows.create(request) -> CreateFlowResponseContentclient.flows.get(id) -> GetFlowResponseContentclient.flows.delete(id)client.flows.update(id, request) -> UpdateFlowResponseContentclient.forms.list() -> SyncPagingIterable<FormSummary>client.forms.create(request) -> CreateFormResponseContentclient.forms.get(id) -> GetFormResponseContentclient.forms.delete(id)client.forms.update(id, request) -> UpdateFormResponseContentclient.userGrants.list() -> SyncPagingIterable<UserGrant>client.userGrants.deleteByUserId()client.userGrants.delete(id)client.hooks.list() -> SyncPagingIterable<Hook>client.hooks.create(request) -> CreateHookResponseContentclient.hooks.get(id) -> GetHookResponseContentclient.hooks.delete(id)client.hooks.update(id, request) -> UpdateHookResponseContentclient.jobs.get(id) -> GetJobResponseContentclient.logStreams.list() -> List<LogStreamResponseSchema>[{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+}, {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "eventgrid",
+ "status": "active|paused|suspended",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+},
+{
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}]
+client.logStreams.create(request) -> CreateLogStreamResponseContenttype of log stream being created determines the properties required in the sink payload.
+http Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "http",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpAuthorization": "string"
+ }
+}
+eventbridge Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "eventbridge",
+ "sink": {
+ "awsRegion": "string",
+ "awsAccountId": "string"
+ }
+}
+The response will include an additional field awsPartnerEventSource in the sink: {
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+}
+Azure Event Grid Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "eventgrid",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active",
+ "sink": {
+ "azureSubscriptionId": "string",
+ "azureResourceGroup": "string",
+ "azureRegion": "string",
+ "azurePartnerTopic": "string"
+ }
+}
+Datadog Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "datadog",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+Splunk Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "splunk",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+Sumo Logic Stream, the sink properties are listed in the payload below
+Request: {
+ "name": "string",
+ "type": "sumo",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+}
+Response: {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+}
+client.logStreams.get(id) -> GetLogStreamResponseContent{
+ "id": "string",
+ "name": "string",
+ "type": "eventbridge",
+ "status": "active|paused|suspended",
+ "sink": {
+ "awsAccountId": "string",
+ "awsRegion": "string",
+ "awsPartnerEventSource": "string"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "http",
+ "status": "active|paused|suspended",
+ "sink": {
+ "httpContentFormat": "JSONLINES|JSONARRAY",
+ "httpContentType": "string",
+ "httpEndpoint": "string",
+ "httpAuthorization": "string"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "datadog",
+ "status": "active|paused|suspended",
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+
+}{
+ "name": "string",
+ "type": "mixpanel",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string"
+ }
+ }
+
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "mixpanel",
+ "status": "active",
+ "sink": {
+ "mixpanelRegion": "string", // "us" | "eu",
+ "mixpanelProjectId": "string",
+ "mixpanelServiceAccountUsername": "string",
+ "mixpanelServiceAccountPassword": "string" // the following is redacted on return
+ }
+ }
+
+ {
+ "name": "string",
+ "type": "segment",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+ Response: {
+ "id": "string",
+ "name": "string",
+ "type": "segment",
+ "status": "active",
+ "sink": {
+ "segmentWriteKey": "string"
+ }
+ }
+
+{
+ "id": "string",
+ "name": "string",
+ "type": "splunk",
+ "status": "active|paused|suspended",
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+} {
+ "id": "string",
+ "name": "string",
+ "type": "sumo",
+ "status": "active|paused|suspended",
+ "sink": {
+ "sumoSourceAddress": "string",
+ }
+} status of a log stream maybe any of the following:
+1. active - Stream is currently enabled.
+2. paused - Stream is currently user disabled and will not attempt log delivery.
+3. suspended - Stream is currently disabled because of errors and will not attempt log delivery.
+client.logStreams.delete(id)client.logStreams.update(id, request) -> UpdateLogStreamResponseContenteventbridge and eventgrid, updating the sink is not permitted.
+{
+ "status": "active|paused"
+}
+{
+ "name": "string"
+}
+http{
+ "sink": {
+ "httpEndpoint": "string",
+ "httpContentType": "string",
+ "httpContentFormat": "JSONARRAY|JSONLINES",
+ "httpAuthorization": "string"
+ }
+}
+datadog{
+ "sink": {
+ "datadogRegion": "string",
+ "datadogApiKey": "string"
+ }
+}
+splunk{
+ "sink": {
+ "splunkDomain": "string",
+ "splunkToken": "string",
+ "splunkPort": "string",
+ "splunkSecure": "boolean"
+ }
+}
+sumo{
+ "sink": {
+ "sumoSourceAddress": "string"
+ }
+}
+client.logs.list() -> SyncPagingIterable<Log>q parameter, or search from a specific log ID ("search from checkpoint").
+
+For more information on all possible event types, their respective acronyms, and descriptions, see Log Event Type Codes.
+
+fields and sort, see Searchable Fields.
+
+Auth0 limits the number of logs you can return by search criteria to 100 logs per request. Furthermore, you may paginate only through 1,000 search results. If you exceed this threshold, please redefine your search or use the get logs by checkpoint method.
+
+take parameter. If you use from at the same time as q, from takes precedence and q is ignored.from parameter.from and take will be ignored, and date ordering is not guaranteed.
+50. Max value: 100
+
+:1 for ascending and :-1 for descending. e.g. date:-1
+
+include_fields) in the result. Leave empty to retrieve all fields.
+
+true) or excluded (false)
+
+client.logs.get(id) -> GetLogResponseContentclient.networkAcls.list() -> SyncPagingIterable<NetworkAclsResponseContent>client.networkAcls.create(request)client.networkAcls.get(id) -> GetNetworkAclsResponseContentclient.networkAcls.set(id, request) -> SetNetworkAclsResponseContentclient.networkAcls.delete(id)client.networkAcls.update(id, request) -> UpdateNetworkAclResponseContentclient.organizations.list() -> SyncPagingIterable<Organization>from: Optional id from which to start selection.take: The total number of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1. We currently support sorting by the following fields: name, display_name and created_at.
+
+client.organizations.create(request) -> CreateOrganizationResponseContentclient.organizations.getByName(name) -> GetOrganizationByNameResponseContentclient.organizations.get(id) -> GetOrganizationResponseContentclient.organizations.delete(id)client.organizations.update(id, request) -> UpdateOrganizationResponseContentclient.prompts.getSettings() -> GetSettingsResponseContentclient.prompts.updateSettings(request) -> UpdateSettingsResponseContentclient.refreshTokens.get(id) -> GetRefreshTokenResponseContentclient.refreshTokens.delete(id)client.refreshTokens.update(id, request) -> UpdateRefreshTokenResponseContentclient.resourceServers.list() -> SyncPagingIterable<ResourceServer>client.resourceServers.create(request) -> CreateResourceServerResponseContentclient.resourceServers.get(id) -> GetResourceServerResponseContentclient.resourceServers.delete(id)client.resourceServers.update(id, request) -> UpdateResourceServerResponseContentclient.roles.list() -> SyncPagingIterable<Role>client.roles.create(request) -> CreateRoleResponseContentclient.roles.get(id) -> GetRoleResponseContentclient.roles.delete(id)client.roles.update(id, request) -> UpdateRoleResponseContentclient.rules.list() -> SyncPagingIterable<Rule>client.rules.create(request) -> CreateRuleResponseContentlogin_success can change the rule's function signature to have user omitted.
+client.rules.get(id) -> GetRuleResponseContentclient.rules.delete(id)client.rules.update(id, request) -> UpdateRuleResponseContentclient.rulesConfigs.list() -> List<RulesConfig>client.rulesConfigs.set(key, request) -> SetRulesConfigResponseContentclient.rulesConfigs.delete(key)client.selfServiceProfiles.list() -> SyncPagingIterable<SelfServiceProfile>client.selfServiceProfiles.create(request) -> CreateSelfServiceProfileResponseContentclient.selfServiceProfiles.get(id) -> GetSelfServiceProfileResponseContentclient.selfServiceProfiles.delete(id)client.selfServiceProfiles.update(id, request) -> UpdateSelfServiceProfileResponseContentclient.sessions.get(id) -> GetSessionResponseContentclient.sessions.delete(id)client.sessions.update(id, request) -> UpdateSessionResponseContentclient.sessions.revoke(id)client.stats.getActiveUsersCount() -> Doubleclient.stats.getDaily() -> List<DailyStats>client.supplementalSignals.get() -> GetSupplementalSignalsResponseContentclient.supplementalSignals.patch(request) -> PatchSupplementalSignalsResponseContentclient.tickets.verifyEmail(request) -> VerifyEmailTicketResponseContentclient.tickets.changePassword(request) -> ChangePasswordTicketResponseContentclient.tokenExchangeProfiles.list() -> SyncPagingIterable<TokenExchangeProfileResponseContent>from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+client.tokenExchangeProfiles.create(request) -> CreateTokenExchangeProfileResponseContentclient.tokenExchangeProfiles.get(id) -> GetTokenExchangeProfileResponseContentclient.tokenExchangeProfiles.delete(id)client.tokenExchangeProfiles.update(id, request)client.userAttributeProfiles.list() -> SyncPagingIterable<UserAttributeProfile>client.userAttributeProfiles.create(request) -> CreateUserAttributeProfileResponseContentclient.userAttributeProfiles.listTemplates() -> ListUserAttributeProfileTemplateResponseContentclient.userAttributeProfiles.getTemplate(id) -> GetUserAttributeProfileTemplateResponseContentclient.userAttributeProfiles.get(id) -> GetUserAttributeProfileResponseContentclient.userAttributeProfiles.delete(id)client.userAttributeProfiles.update(id, request) -> UpdateUserAttributeProfileResponseContentclient.userBlocks.listByIdentifier() -> ListUserBlocksByIdentifierResponseContentclient.userBlocks.deleteByIdentifier()client.userBlocks.list(id) -> ListUserBlocksResponseContentclient.userBlocks.delete(id)client.users.list() -> SyncPagingIterable<UserResponseSchema>q query parameter can be used to get users that match the specified criteria using query string syntax.
+
+Learn more about searching for users.
+
+Read about best practices when working with the API endpoints for retrieving users.
+
+Auth0 limits the number of users you can return. If you exceed this threshold, please redefine your search, use the export job, or the User Import / Export extension.
+field:order where order is 1 for ascending and -1 for descending. e.g. created_at:1
+
+search_engine=v1. To filter by connection with search_engine=v2|v3, use q=identities.connection:"connection_name"
+
+client.users.create(request) -> CreateUserResponseContentconnection is required but other parameters such as email and password are dependent upon the type of connection.
+client.users.listUsersByEmail() -> List<UserResponseSchema>client.users.get(id) -> GetUserResponseContentclient.users.delete(id)client.users.update(id, request) -> UpdateUserResponseContentuser_metadata and app_metadata). These properties are merged instead of being replaced but be careful, the merge only occurs on the first level.email, email_verified, phone_number, phone_verified, username or password of a secondary identity, you need to specify the connection property too.email or phone_number you can specify, optionally, the client_id property.email_verified is not supported for enterprise and passwordless sms connections.blocked to false does not affect the user's blocked state from an excessive amount of incorrectly provided credentials. Use the "Unblock a user" endpoint from the "User Blocks" API to change the user's state.null as the value.{ "email_verified": true }
+
+user_metadata:
+{ "user_metadata" : { "profileCode": 1479 } }
+
+To add the field addresses the body to send should be:
+{ "user_metadata" : { "addresses": {"work_address": "100 Industrial Way"} }}
+
+The modified object ends up with the following user_metadata property:{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": { "work_address": "100 Industrial Way" }
+ }
+}
+
+"home_address": "742 Evergreen Terrace" (using the addresses property) we should send the whole addresses object. Since this is a first-level object, the object will be merged in, but its own properties will not be. The body to send should be:
+{
+ "user_metadata": {
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+}
+
+The modified object ends up with the following user_metadata property:
+{
+ "user_metadata": {
+ "profileCode": 1479,
+ "addresses": {
+ "work_address": "100 Industrial Way",
+ "home_address": "742 Evergreen Terrace"
+ }
+ }
+}
+client.users.regenerateRecoveryCode(id) -> RegenerateUsersRecoveryCodeResponseContentclient.users.revokeAccess(id, request)client.actions.versions.list(actionId) -> SyncPagingIterable<ActionVersion>client.actions.versions.get(actionId, id) -> GetActionVersionResponseContentclient.actions.versions.deploy(actionId, id, request) -> DeployActionVersionResponseContentclient.actions.executions.get(id) -> GetActionExecutionResponseContentclient.actions.triggers.list() -> ListActionTriggersResponseContentclient.actions.triggers.bindings.list(triggerId) -> SyncPagingIterable<ActionBinding>client.actions.triggers.bindings.updateMany(triggerId, request) -> UpdateActionBindingsResponseContentclient.anomaly.blocks.checkIp(id)client.anomaly.blocks.unblockIp(id)client.attackProtection.botDetection.get() -> GetBotDetectionSettingsResponseContentclient.attackProtection.botDetection.update(request) -> UpdateBotDetectionSettingsResponseContentclient.attackProtection.breachedPasswordDetection.get() -> GetBreachedPasswordDetectionSettingsResponseContentclient.attackProtection.breachedPasswordDetection.update(request) -> UpdateBreachedPasswordDetectionSettingsResponseContentblock, user_notification, admin_notification.
+
+immediately, daily, weekly, monthly.
+
+client.attackProtection.bruteForceProtection.get() -> GetBruteForceSettingsResponseContentclient.attackProtection.bruteForceProtection.update(request) -> UpdateBruteForceSettingsResponseContentblock, user_notification.
+
+count_per_identifier_and_ip, count_per_identifier.
+
+client.attackProtection.captcha.get() -> GetAttackProtectionCaptchaResponseContentclient.attackProtection.captcha.update(request) -> UpdateAttackProtectionCaptchaResponseContentclient.attackProtection.suspiciousIpThrottling.get() -> GetSuspiciousIpThrottlingSettingsResponseContentclient.attackProtection.suspiciousIpThrottling.update(request) -> UpdateSuspiciousIpThrottlingSettingsResponseContentblock, admin_notification.
+
+client.branding.templates.getUniversalLogin() -> GetUniversalLoginTemplateResponseContentclient.branding.templates.updateUniversalLogin(request)When content-type header is set to application/json:
+{
+ "template": "<!DOCTYPE html>{% assign resolved_dir = dir | default: "auto" %}<html lang="{{locale}}" dir="{{resolved_dir}}"><head>{%- auth0:head -%}</head><body class="_widget-auto-layout">{%- auth0:widget -%}</body></html>"
+}
+
+
+
+ When content-type header is set to text/html:
+
+<!DOCTYPE html>
+{% assign resolved_dir = dir | default: "auto" %}
+<html lang="{{locale}}" dir="{{resolved_dir}}">
+ <head>
+ {%- auth0:head -%}
+ </head>
+ <body class="_widget-auto-layout">
+ {%- auth0:widget -%}
+ </body>
+</html>
+
+client.branding.templates.deleteUniversalLogin()client.branding.themes.create(request) -> CreateBrandingThemeResponseContentclient.branding.themes.getDefault() -> GetBrandingDefaultThemeResponseContentclient.branding.themes.get(themeId) -> GetBrandingThemeResponseContentclient.branding.themes.delete(themeId)client.branding.themes.update(themeId, request) -> UpdateBrandingThemeResponseContentclient.branding.phone.providers.list() -> ListBrandingPhoneProvidersResponseContentclient.branding.phone.providers.create(request) -> CreateBrandingPhoneProviderResponseContentcredentials object requires different properties depending on the phone provider (which is specified using the name property).
+client.branding.phone.providers.get(id) -> GetBrandingPhoneProviderResponseContentclient.branding.phone.providers.delete(id)client.branding.phone.providers.update(id, request) -> UpdateBrandingPhoneProviderResponseContentcredentials object requires different properties depending on the phone provider (which is specified using the name property).
+client.branding.phone.providers.test(id, request) -> CreatePhoneProviderSendTestResponseContentclient.branding.phone.templates.list() -> ListPhoneTemplatesResponseContentclient.branding.phone.templates.create(request) -> CreatePhoneTemplateResponseContentclient.branding.phone.templates.get(id) -> GetPhoneTemplateResponseContentclient.branding.phone.templates.delete(id)client.branding.phone.templates.update(id, request) -> UpdatePhoneTemplateResponseContentclient.branding.phone.templates.reset(id, request) -> ResetPhoneTemplateResponseContentclient.branding.phone.templates.test(id, request) -> CreatePhoneTemplateTestNotificationResponseContentclient.clientGrants.organizations.list(id) -> SyncPagingIterable<Organization>client.clients.credentials.list(clientId) -> List<ClientCredential>client_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+client.clients.credentials.create(clientId, request) -> PostClientCredentialResponseContent{
+ "credential_type": "public_key",
+ "name": "string",
+ "pem": "string",
+ "alg": "RS256",
+ "parse_expiry_from_cert": false,
+ "expires_at": "2022-12-31T23:59:59Z"
+}
+{
+ "credential_type": "x509_cert",
+ "name": "string",
+ "pem": "string"
+}CA-signed Certificate Sample (subject_dn): {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "subject_dn": "string"
+}Self-signed Certificate Sample: {
+ "credential_type": "cert_subject_dn",
+ "name": "string",
+ "pem": "string"
+}
+
+The credential will be created but not yet enabled for use until you set the corresponding properties in the client:
+client_authentication_methods property on the client. For more information, read Configure Private Key JWT Authentication and Configure mTLS Authenticationsigned_request_objectproperty on the client. For more information, read Configure JWT-secured Authorization Requests (JAR)client.clients.credentials.get(clientId, credentialId) -> GetClientCredentialResponseContentclient_authentication_methods property on the client. To enable credentials to be used for JWT-Secured Authorization requests set the signed_request_object property on the client.
+client.clients.credentials.delete(clientId, credentialId)client.clients.credentials.update(clientId, credentialId, request) -> PatchClientCredentialResponseContentclient.clients.connections.get(id) -> SyncPagingIterable<ConnectionForList>read:connections scope and any one of read:clients or read:client_summary.
+ from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+ true if the fields specified are to be included in the result, false otherwise (defaults to true)
+
+client.connections.clients.get(id) -> SyncPagingIterable<ConnectionEnabledClient>from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no further results are remaining.
+client.connections.clients.update(id, request)client.connections.directoryProvisioning.get(id) -> GetDirectoryProvisioningResponseContentclient.connections.directoryProvisioning.create(id, request) -> CreateDirectoryProvisioningResponseContentclient.connections.directoryProvisioning.delete(id)client.connections.directoryProvisioning.update(id, request) -> UpdateDirectoryProvisioningResponseContentclient.connections.directoryProvisioning.getDefaultMapping(id) -> GetDirectoryProvisioningDefaultMappingResponseContentclient.connections.keys.get(id) -> List<ConnectionKey>client.connections.keys.rotate(id, request) -> RotateConnectionsKeysResponseContentclient.connections.scimConfiguration.get(id) -> GetScimConfigurationResponseContentconnectionId.
+client.connections.scimConfiguration.create(id, request) -> CreateScimConfigurationResponseContentclient.connections.scimConfiguration.delete(id)connectionId.
+client.connections.scimConfiguration.update(id, request) -> UpdateScimConfigurationResponseContentconnectionId.
+client.connections.scimConfiguration.getDefaultMapping(id) -> GetScimConfigurationDefaultMappingResponseContentconnectionId.
+client.connections.users.deleteByEmail(id)client.connections.directoryProvisioning.synchronizations.create(id) -> CreateDirectorySynchronizationResponseContentclient.connections.scimConfiguration.tokens.get(id) -> List<ScimTokenItem>id.
+client.connections.scimConfiguration.tokens.create(id, request) -> CreateScimTokenResponseContentclient.connections.scimConfiguration.tokens.delete(id, tokenId)id and tokenId.
+client.emails.provider.get() -> GetEmailProviderResponseContentclient.emails.provider.create(request) -> CreateEmailProviderResponseContentcredentials object
+requires different properties depending on the email provider (which is specified using the name property):
+mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+options, which will be used when sending an email:
+smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ client.emails.provider.delete()client.emails.provider.update(request) -> UpdateEmailProviderResponseContentcredentials object
+requires different properties depending on the email provider (which is specified using the name property):
+mandrill requires api_keysendgrid requires api_keysparkpost requires api_key. Optionally, set region to eu to use
+ the SparkPost service hosted in Western Europe; set to null to use the SparkPost service hosted in
+ North America. eu or null are the only valid values for region.
+ mailgun requires api_key and domain. Optionally, set region to
+ eu to use the Mailgun service hosted in Europe; set to null otherwise. eu or
+ null are the only valid values for region.
+ ses requires accessKeyId, secretAccessKey, and regionsmtp requires smtp_host, smtp_port, smtp_user, and
+ smtp_pass
+ settings object with different configuration
+options, which will be used when sending an email:
+smtp provider, settings may contain headers object.
+ X-SES-Configuration-Set header. Value must be a string.
+ X-MSYS_API header. Value must be an object.
+ ses provider, settings may contain message object, where you can provide
+ a name of configuration set in configuration_set_name property. Value must be a string.
+ client.eventStreams.deliveries.list(id) -> List<EventStreamDelivery>client.eventStreams.deliveries.getHistory(id, eventId) -> GetEventStreamDeliveryHistoryResponseContentclient.eventStreams.redeliveries.create(id, request) -> CreateEventStreamRedeliveryResponseContentclient.eventStreams.redeliveries.createById(id, eventId)client.flows.executions.list(flowId) -> SyncPagingIterable<FlowExecutionSummary>client.flows.executions.get(flowId, executionId) -> GetFlowExecutionResponseContentclient.flows.executions.delete(flowId, executionId)client.flows.vault.connections.list() -> SyncPagingIterable<FlowsVaultConnectionSummary>client.flows.vault.connections.create(request) -> CreateFlowsVaultConnectionResponseContentclient.flows.vault.connections.get(id) -> GetFlowsVaultConnectionResponseContentclient.flows.vault.connections.delete(id)client.flows.vault.connections.update(id, request) -> UpdateFlowsVaultConnectionResponseContentclient.guardian.enrollments.createTicket(request) -> CreateGuardianEnrollmentTicketResponseContentclient.guardian.enrollments.get(id) -> GetGuardianEnrollmentResponseContentclient.guardian.enrollments.delete(id)client.guardian.factors.list() -> List<GuardianFactor>client.guardian.factors.set(name, request) -> SetGuardianFactorResponseContentclient.guardian.policies.list() -> List<MfaPolicyEnum>all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+client.guardian.policies.set(request) -> List<MfaPolicyEnum>all-applications policy prompts with MFA for all logins.confidence-score policy prompts with MFA only for low confidence logins.confidence-score policy is part of the Adaptive MFA feature. Adaptive MFA requires an add-on for the Enterprise plan; review Auth0 Pricing for more details.
+client.guardian.factors.phone.getMessageTypes() -> GetGuardianFactorPhoneMessageTypesResponseContentclient.guardian.factors.phone.setMessageTypes(request) -> SetGuardianFactorPhoneMessageTypesResponseContentclient.guardian.factors.phone.getTwilioProvider() -> GetGuardianFactorsProviderPhoneTwilioResponseContentclient.guardian.factors.phone.setTwilioProvider(request) -> SetGuardianFactorsProviderPhoneTwilioResponseContentclient.guardian.factors.phone.getSelectedProvider() -> GetGuardianFactorsProviderPhoneResponseContentclient.guardian.factors.phone.setProvider(request) -> SetGuardianFactorsProviderPhoneResponseContentclient.guardian.factors.phone.getTemplates() -> GetGuardianFactorPhoneTemplatesResponseContentclient.guardian.factors.phone.setTemplates(request) -> SetGuardianFactorPhoneTemplatesResponseContentclient.guardian.factors.pushNotification.getApnsProvider() -> GetGuardianFactorsProviderApnsResponseContentclient.guardian.factors.pushNotification.setApnsProvider(request) -> SetGuardianFactorsProviderPushNotificationApnsResponseContentclient.guardian.factors.pushNotification.updateApnsProvider(request) -> UpdateGuardianFactorsProviderPushNotificationApnsResponseContentclient.guardian.factors.pushNotification.setFcmProvider(request) -> Map<String, Object>client.guardian.factors.pushNotification.updateFcmProvider(request) -> Map<String, Object>client.guardian.factors.pushNotification.setFcmv1Provider(request) -> Map<String, Object>client.guardian.factors.pushNotification.updateFcmv1Provider(request) -> Map<String, Object>client.guardian.factors.pushNotification.getSnsProvider() -> GetGuardianFactorsProviderSnsResponseContentclient.guardian.factors.pushNotification.setSnsProvider(request) -> SetGuardianFactorsProviderPushNotificationSnsResponseContentclient.guardian.factors.pushNotification.updateSnsProvider(request) -> UpdateGuardianFactorsProviderPushNotificationSnsResponseContentclient.guardian.factors.pushNotification.getSelectedProvider() -> GetGuardianFactorsProviderPushNotificationResponseContentclient.guardian.factors.pushNotification.setProvider(request) -> SetGuardianFactorsProviderPushNotificationResponseContentclient.guardian.factors.sms.getTwilioProvider() -> GetGuardianFactorsProviderSmsTwilioResponseContentclient.guardian.factors.sms.setTwilioProvider(request) -> SetGuardianFactorsProviderSmsTwilioResponseContentclient.guardian.factors.sms.getSelectedProvider() -> GetGuardianFactorsProviderSmsResponseContentclient.guardian.factors.sms.setProvider(request) -> SetGuardianFactorsProviderSmsResponseContentclient.guardian.factors.sms.getTemplates() -> GetGuardianFactorSmsTemplatesResponseContentclient.guardian.factors.sms.setTemplates(request) -> SetGuardianFactorSmsTemplatesResponseContentclient.guardian.factors.duo.settings.get() -> GetGuardianFactorDuoSettingsResponseContentclient.guardian.factors.duo.settings.set(request) -> SetGuardianFactorDuoSettingsResponseContentclient.guardian.factors.duo.settings.update(request) -> UpdateGuardianFactorDuoSettingsResponseContentclient.hooks.secrets.get(id) -> Map<String, String>client.hooks.secrets.create(id, request)client.hooks.secrets.delete(id, request)client.hooks.secrets.update(id, request)client.jobs.usersExports.create(request) -> CreateExportUsersResponseContentclient.jobs.usersImports.create(request) -> CreateImportUsersResponseContentclient.jobs.verificationEmail.create(request) -> CreateVerificationEmailResponseContentclient.jobs.errors.get(id) -> ErrorsGetResponseclient.keys.customSigning.get() -> GetCustomSigningKeysResponseContentclient.keys.customSigning.set(request) -> SetCustomSigningKeysResponseContentclient.keys.customSigning.delete()client.keys.encryption.list() -> SyncPagingIterable<EncryptionKey>client.keys.encryption.create(request) -> CreateEncryptionKeyResponseContentclient.keys.encryption.rekey()client.keys.encryption.get(kid) -> GetEncryptionKeyResponseContentclient.keys.encryption.import_(kid, request) -> ImportEncryptionKeyResponseContentclient.keys.encryption.delete(kid)client.keys.encryption.createPublicWrappingKey(kid) -> CreateEncryptionKeyPublicWrappingResponseContentclient.keys.signing.list() -> List<SigningKeys>client.keys.signing.rotate() -> RotateSigningKeysResponseContentclient.keys.signing.get(kid) -> GetSigningKeysResponseContentclient.keys.signing.revoke(kid) -> RevokedSigningKeysResponseContentclient.organizations.clientGrants.list(id) -> SyncPagingIterable<OrganizationClientGrant>client.organizations.clientGrants.create(id, request) -> AssociateOrganizationClientGrantResponseContentclient.organizations.clientGrants.delete(id, grantId)client.organizations.discoveryDomains.list(id) -> SyncPagingIterable<OrganizationDiscoveryDomain>client.organizations.discoveryDomains.create(id, request) -> CreateOrganizationDiscoveryDomainResponseContentstatus field must be either pending or verified. The use_for_organization_discovery field can be true or false (default: true).
+client.organizations.discoveryDomains.getByName(id, discoveryDomain) -> GetOrganizationDiscoveryDomainByNameResponseContentclient.organizations.discoveryDomains.get(id, discoveryDomainId) -> GetOrganizationDiscoveryDomainResponseContentclient.organizations.discoveryDomains.delete(id, discoveryDomainId)client.organizations.discoveryDomains.update(id, discoveryDomainId, request) -> UpdateOrganizationDiscoveryDomainResponseContentstatus field must be either pending or verified. The use_for_organization_discovery field can be true or false (default: true).
+client.organizations.enabledConnections.list(id) -> SyncPagingIterable<OrganizationConnection>client.organizations.enabledConnections.add(id, request) -> AddOrganizationConnectionResponseContentclient.organizations.enabledConnections.get(id, connectionId) -> GetOrganizationConnectionResponseContentclient.organizations.enabledConnections.delete(id, connectionId)client.organizations.enabledConnections.update(id, connectionId, request) -> UpdateOrganizationConnectionResponseContentclient.organizations.invitations.list(id) -> SyncPagingIterable<OrganizationInvitation>client.organizations.invitations.create(id, request) -> CreateOrganizationInvitationResponseContentclient.organizations.invitations.get(id, invitationId) -> GetOrganizationInvitationResponseContentclient.organizations.invitations.delete(id, invitationId)client.organizations.members.list(id) -> SyncPagingIterable<OrganizationMember>fields parameter to optionally define the specific member details retrieved. If fields is left blank, all fields (except roles) are returned.
+ fields=roles to retrieve the roles assigned to each listed member. To use this parameter, you must include the read:organization_member_roles scope in the token.
+ from parameter. If there are more results, a next value will be included in the response. You can use this for subsequent API calls. When next is no longer included in the response, this indicates there are no more pages remaining.
+client.organizations.members.create(id, request)client.organizations.members.delete(id, request)client.organizations.members.roles.list(id, userId) -> SyncPagingIterable<Role>client.organizations.members.roles.assign(id, userId, request)client.organizations.members.roles.delete(id, userId, request)client.prompts.rendering.list() -> SyncPagingIterable<AculResponseContent>client.prompts.rendering.bulkUpdate(request) -> BulkUpdateAculResponseContentclient.prompts.rendering.get(prompt, screen) -> GetAculResponseContentclient.prompts.rendering.update(prompt, screen, request) -> UpdateAculResponseContentclient.prompts.customText.get(prompt, language) -> Map<String, Object>client.prompts.customText.set(prompt, language, request)client.prompts.partials.get(prompt) -> Map<String, Object>client.prompts.partials.set(prompt, request)client.riskAssessments.settings.get() -> GetRiskAssessmentsSettingsResponseContentclient.riskAssessments.settings.update(request) -> UpdateRiskAssessmentsSettingsResponseContentclient.riskAssessments.settings.newDevice.get() -> GetRiskAssessmentsSettingsNewDeviceResponseContentclient.riskAssessments.settings.newDevice.update(request) -> UpdateRiskAssessmentsSettingsNewDeviceResponseContentclient.roles.permissions.list(id) -> SyncPagingIterable<PermissionsResponsePayload>client.roles.permissions.add(id, request)client.roles.permissions.delete(id, request)client.roles.users.list(id) -> SyncPagingIterable<RoleUser>from: Optional id from which to start selection.take: The total amount of entries to retrieve when using the from parameter. Defaults to 50.from parameter. If there are more results, a next value is included in the response. You can use this for subsequent API calls. When next is no longer included in the response, no pages are remaining.
+client.roles.users.assign(id, request)client.selfServiceProfiles.customText.list(id, language, page) -> Map<String, String>client.selfServiceProfiles.customText.set(id, language, page, request) -> Map<String, String>client.selfServiceProfiles.ssoTicket.create(id, request) -> CreateSelfServiceProfileSsoTicketResponseContentclient.selfServiceProfiles.ssoTicket.revoke(profileId, id)client.tenants.settings.get() -> GetTenantSettingsResponseContentclient.tenants.settings.update(request) -> UpdateTenantSettingsResponseContentclient.users.authenticationMethods.list(id) -> SyncPagingIterable<UserAuthenticationMethod>client.users.authenticationMethods.create(id, request) -> CreateUserAuthenticationMethodResponseContentclient.users.authenticationMethods.set(id, request) -> List<SetUserAuthenticationMethodResponseContent>client.users.authenticationMethods.deleteAll(id)client.users.authenticationMethods.get(id, authenticationMethodId) -> GetUserAuthenticationMethodResponseContentclient.users.authenticationMethods.delete(id, authenticationMethodId)client.users.authenticationMethods.update(id, authenticationMethodId, request) -> UpdateUserAuthenticationMethodResponseContentclient.users.authenticators.deleteAll(id)client.users.connectedAccounts.list(id) -> SyncPagingIterable<ConnectedAccount>client.users.enrollments.get(id) -> List<UsersEnrollment>client.users.federatedConnectionsTokensets.list(id) -> List<FederatedConnectionTokenSet>client.users.federatedConnectionsTokensets.delete(id, tokensetId)client.users.identities.link(id, request) -> List<UserIdentity>update:current_user_identities scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer PRIMARY_ACCOUNT_JWT"
+ {
+ "link_with": "SECONDARY_ACCOUNT_JWT"
+ }
+
+ In this case, only the link_with param is required in the body, which also contains the JWT obtained upon the secondary account's authentication.
+ update:users scope:
+
+ POST /api/v2/users/PRIMARY_ACCOUNT_USER_ID/identities
+ Authorization: "Bearer YOUR_API_V2_TOKEN"
+ {
+ "provider": "SECONDARY_ACCOUNT_PROVIDER",
+ "connection_id": "SECONDARY_ACCOUNT_CONNECTION_ID(OPTIONAL)",
+ "user_id": "SECONDARY_ACCOUNT_USER_ID"
+ }
+
+ In this case you need to send provider and user_id in the body. Optionally you can also send the connection_id param which is suitable for identifying a particular database connection for the 'auth0' provider.
+ client.users.identities.delete(id, provider, userId) -> List<DeleteUserIdentityResponseContentItem>client.users.logs.list(id) -> SyncPagingIterable<Log>client.users.multifactor.invalidateRememberBrowser(id)client.users.multifactor.deleteProvider(id, provider)client.users.organizations.list(id) -> SyncPagingIterable<Organization>client.users.permissions.list(id) -> SyncPagingIterable<UserPermissionSchema>client.users.permissions.create(id, request)client.users.permissions.delete(id, request)client.users.riskAssessments.clear(id, request)client.users.roles.list(id) -> SyncPagingIterable<Role>client.users.roles.assign(id, request)client.users.roles.delete(id, request)client.users.refreshToken.list(userId) -> SyncPagingIterable<RefreshTokenResponseContent>client.users.refreshToken.delete(userId)client.users.sessions.list(userId) -> SyncPagingIterable<SessionResponseContent>client.users.sessions.delete(userId)client.verifiableCredentials.verification.templates.list() -> SyncPagingIterable<VerifiableCredentialTemplateResponse>client.verifiableCredentials.verification.templates.create(request) -> CreateVerifiableCredentialTemplateResponseContentclient.verifiableCredentials.verification.templates.get(id) -> GetVerifiableCredentialTemplateResponseContentclient.verifiableCredentials.verification.templates.delete(id)client.verifiableCredentials.verification.templates.update(id, request) -> UpdateVerifiableCredentialTemplateResponseContent