Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/auth0/go-auth0/llms.txt

Use this file to discover all available pages before exploring further.

The User Management API provides comprehensive methods for managing users in your Auth0 tenant.

Prerequisites

Ensure you have initialized a management client:
import (
    "context"
    "github.com/auth0/go-auth0/v2/management"
    "github.com/auth0/go-auth0/v2/management/client"
    "github.com/auth0/go-auth0/v2/management/option"
)

mgmt, err := client.New(
    "your-tenant.auth0.com",
    option.WithClientCredentials(
        context.Background(),
        "YOUR_CLIENT_ID",
        "YOUR_CLIENT_SECRET",
    ),
)

Creating Users

Create a user with email and password:
createRequest := &management.CreateUserRequestContent{
    Email:      "user@example.com",
    Connection: "Username-Password-Authentication",
    Password:   management.String("SecurePassword123!"),
}

user, err := mgmt.Users.Create(ctx, createRequest)
if err != nil {
    return err
}

fmt.Printf("Created user: %s (ID: %s)\n",
    *user.GetEmail(),
    *user.GetUserID(),
)
User Metadata vs App Metadata
  • User Metadata: Editable by users, stores user preferences and non-sensitive data
  • App Metadata: Only editable via Management API, stores sensitive data like roles and permissions

Reading Users

Get a Single User

userID := "auth0|123456789"

user, err := mgmt.Users.Read(ctx, userID)
if err != nil {
    return err
}

fmt.Printf("User: %s\n", *user.GetEmail())
fmt.Printf("Created: %s\n", *user.GetCreatedAt())
fmt.Printf("Email Verified: %v\n", *user.GetEmailVerified())

List All Users

listRequest := &management.ListUsersRequestParameters{
    PerPage: management.Int(50),
}

usersPage, err := mgmt.Users.List(ctx, listRequest)
if err != nil {
    return err
}

for _, user := range usersPage.Results {
    fmt.Printf("User: %s\n", *user.GetEmail())
}

Updating Users

Update basic profile information:
updateRequest := &management.UpdateUserRequestContent{
    GivenName:  management.String("Jane"),
    FamilyName: management.String("Smith"),
    Name:       management.String("Jane Smith"),
    Nickname:   management.String("janes"),
    Picture:    management.String("https://example.com/new-photo.jpg"),
}

user, err := mgmt.Users.Update(ctx, userID, updateRequest)

Searching Users

Auth0 provides powerful search capabilities using Lucene query syntax.

Search by Email

searchRequest := &management.ListUsersRequestParameters{
    Search:  management.String("email:\"*@example.com\""),
    PerPage: management.Int(25),
}

usersPage, err := mgmt.Users.List(ctx, searchRequest)

Search with Multiple Criteria

searchRequest := &management.ListUsersRequestParameters{
    Search: management.String("email:\"*@company.com\""),
    Sort:   management.String("created_at:1"),
}

Sorting Results

searchRequest := &management.ListUsersRequestParameters{
    Search:  management.String("email:\"*@example.com\""),
    Sort:    management.String("created_at:-1"), // -1 for descending
    PerPage: management.Int(50),
}
Sort options:
  • created_at:1 - Oldest first
  • created_at:-1 - Newest first
  • last_login:1 - Least recently logged in first
  • last_login:-1 - Most recently logged in first

Pagination

Use the iterator pattern for efficient pagination:
searchRequest := &management.ListUsersRequestParameters{
    Search:  management.String("email:\"*@example.com\""),
    PerPage: management.Int(50),
}

usersPage, err := mgmt.Users.List(ctx, searchRequest)
if err != nil {
    return err
}

iterator := usersPage.Iterator()
for iterator.Next(ctx) {
    user := iterator.Current()
    fmt.Printf("User: %s (Created: %s)\n",
        *user.GetEmail(),
        *user.GetCreatedAt(),
    )
}

if iterator.Err() != nil {
    return iterator.Err()
}

Deleting Users

err := mgmt.Users.Delete(ctx, userID)
if err != nil {
    return err
}

fmt.Printf("Deleted user: %s\n", userID)
Deleting a user is permanent and cannot be undone. Consider blocking users instead if you need to preserve data.

Working with User Roles

Assign Roles to User

roleIDs := []string{"rol_abc123", "rol_xyz789"}

err := mgmt.Users.AssignRoles(ctx, userID, roleIDs)
if err != nil {
    return err
}

List User Roles

rolesPage, err := mgmt.Users.Roles(ctx, userID, nil)
if err != nil {
    return err
}

for _, role := range rolesPage.Results {
    fmt.Printf("Role: %s\n", *role.GetName())
}

Remove Roles from User

roleIDs := []string{"rol_abc123"}

err := mgmt.Users.RemoveRoles(ctx, userID, roleIDs)
if err != nil {
    return err
}

Working with User Permissions

Assign Permissions to User

permissions := []management.Permission{
    {
        ResourceServerIdentifier: management.String("https://api.example.com"),
        PermissionName:          management.String("read:data"),
    },
    {
        ResourceServerIdentifier: management.String("https://api.example.com"),
        PermissionName:          management.String("write:data"),
    },
}

err := mgmt.Users.AssignPermissions(ctx, userID, permissions)

List User Permissions

permissionsPage, err := mgmt.Users.Permissions(ctx, userID, nil)
if err != nil {
    return err
}

for _, perm := range permissionsPage.Results {
    fmt.Printf("Permission: %s on %s\n",
        *perm.GetPermissionName(),
        *perm.GetResourceServerIdentifier(),
    )
}

Remove Permissions from User

permissions := []management.Permission{
    {
        ResourceServerIdentifier: management.String("https://api.example.com"),
        PermissionName:          management.String("delete:data"),
    },
}

err := mgmt.Users.RemovePermissions(ctx, userID, permissions)

Complete Example

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/auth0/go-auth0/v2/management"
    "github.com/auth0/go-auth0/v2/management/client"
    "github.com/auth0/go-auth0/v2/management/option"
)

func main() {
    mgmt, err := client.New(
        "your-tenant.auth0.com",
        option.WithClientCredentials(
            context.Background(),
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    if err != nil {
        log.Fatalf("Error creating management client: %v", err)
    }

    ctx := context.Background()

    // Create a new user
    createUserRequest := &management.CreateUserRequestContent{
        Email:      "newuser@example.com",
        Connection: "Username-Password-Authentication",
        Password:   management.String("TempPassword123!"),
        UserMetadata: map[string]interface{}{
            "preference": "email",
            "plan":       "premium",
        },
        AppMetadata: map[string]interface{}{
            "role":  "user",
            "scope": "read:profile",
        },
    }

    user, err := mgmt.Users.Create(ctx, createUserRequest)
    if err != nil {
        log.Fatalf("Error creating user: %v", err)
    }

    fmt.Printf("Created user: %s (ID: %s)\n",
        *user.GetEmail(),
        *user.GetUserID(),
    )

    // Search for users by email domain
    searchRequest := &management.ListUsersRequestParameters{
        Search:  management.String("email:\"*@example.com\""),
        Sort:    management.String("created_at:1"),
        PerPage: management.Int(25),
    }

    usersPage, err := mgmt.Users.List(ctx, searchRequest)
    if err != nil {
        log.Fatalf("Error searching users: %v", err)
    }

    fmt.Println("\nUsers with @example.com domain:")
    for _, u := range usersPage.Results {
        fmt.Printf("- %s (Created: %s)\n",
            *u.GetEmail(),
            *u.GetCreatedAt(),
        )
    }

    // Update user metadata
    updateUserRequest := &management.UpdateUserRequestContent{
        UserMetadata: map[string]interface{}{
            "preference":   "sms",
            "plan":         "premium",
            "last_updated": "2024-01-01",
        },
    }

    updatedUser, err := mgmt.Users.Update(
        ctx,
        *user.GetUserID(),
        updateUserRequest,
    )
    if err != nil {
        log.Fatalf("Error updating user: %v", err)
    }

    fmt.Printf("\nUpdated user metadata: %v\n",
        updatedUser.UserMetadata,
    )
}

Next Steps

Client Management

Learn how to manage applications

Connection Management

Learn how to manage connections

Request Options

Customize user operations with request options

Build docs developers (and LLMs) love