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.
Hooks allow you to customize Auth0’s behavior by executing custom code at specific extension points in the authentication pipeline.
List Hooks
Retrieve all hooks, optionally filtered by trigger.
func (c *Client) List(
ctx context.Context,
request *management.ListHooksRequestParameters,
opts ...option.RequestOption,
) (*core.Page[*int, *management.Hook, *management.ListHooksOffsetPaginatedResponseContent], error)
request
*management.ListHooksRequestParameters
Optional query parameters for listing hooks
TriggerID
*management.HookTriggerIDEnum
Filter by trigger type
Number of results per page (default: 50)
Include total count (default: true)
Comma-separated list of fields to include
*core.Page[*int, *management.Hook, *management.ListHooksOffsetPaginatedResponseContent]
Paginated list of hooks
Example
page, err := managementClient.Hooks.List(context.Background(), &management.ListHooksRequestParameters{
TriggerID: management.HookTriggerIDEnumCredentialsExchange.Ptr(),
PerPage: auth0.Int(10),
})
if err != nil {
// Handle error
}
for _, hook := range page.Results {
fmt.Printf("Hook: %s (enabled: %v)\n", hook.GetName(), hook.GetEnabled())
}
Create Hook
Create a new hook.
func (c *Client) Create(
ctx context.Context,
request *management.CreateHookRequestContent,
opts ...option.RequestOption,
) (*management.CreateHookResponseContent, error)
request
*management.CreateHookRequestContent
required
The hook to create
The trigger point for this hook
JavaScript code to execute
Whether the hook is enabled (default: false)
npm package dependencies as key-value map
*management.CreateHookResponseContent
The created hook with server-generated fields
Unique identifier for the hook
Whether the hook is enabled
Example
hook, err := managementClient.Hooks.Create(context.Background(), &management.CreateHookRequestContent{
TriggerID: auth0.String("credentials-exchange"),
Name: auth0.String("Add Custom Claims"),
Script: auth0.String(`
module.exports = function(client, scope, audience, context, cb) {
var access_token = {};
access_token['https://example.com/claim'] = 'custom_value';
cb(null, access_token);
};
`),
Enabled: auth0.Bool(true),
})
if err != nil {
// Handle error
}
fmt.Printf("Created hook: %s\n", hook.GetID())
Get Hook
Retrieve a specific hook by ID.
func (c *Client) Get(
ctx context.Context,
id string,
request *management.GetHookRequestParameters,
opts ...option.RequestOption,
) (*management.GetHookResponseContent, error)
ID of the hook to retrieve
request
*management.GetHookRequestParameters
Optional parameters
Comma-separated list of fields to include
*management.GetHookResponseContent
The requested hook
Example
hook, err := managementClient.Hooks.Get(context.Background(), "hook_abc123", &management.GetHookRequestParameters{})
if err != nil {
// Handle error
}
fmt.Printf("Hook: %s\n", hook.GetName())
Update Hook
Update an existing hook.
func (c *Client) Update(
ctx context.Context,
id string,
request *management.UpdateHookRequestContent,
opts ...option.RequestOption,
) (*management.UpdateHookResponseContent, error)
request
*management.UpdateHookRequestContent
required
Updated hook data
Enable or disable the hook
*management.UpdateHookResponseContent
The updated hook
Example
hook, err := managementClient.Hooks.Update(context.Background(), "hook_abc123", &management.UpdateHookRequestContent{
Enabled: auth0.Bool(false),
})
if err != nil {
// Handle error
}
Delete Hook
Delete a hook.
func (c *Client) Delete(
ctx context.Context,
id string,
opts ...option.RequestOption,
) error
Example
err := managementClient.Hooks.Delete(context.Background(), "hook_abc123")
if err != nil {
// Handle error
}
Hook Triggers
Hooks support the following trigger points:
- credentials-exchange: Customize access token claims during client credentials exchange
- pre-user-registration: Execute code before a user registration
- post-user-registration: Execute code after a user registration
- post-change-password: Execute code after a password change
- send-phone-message: Customize phone verification messages
const (
HookTriggerIDEnumCredentialsExchange = "credentials-exchange"
HookTriggerIDEnumPreUserRegistration = "pre-user-registration"
HookTriggerIDEnumPostUserRegistration = "post-user-registration"
HookTriggerIDEnumPostChangePassword = "post-change-password"
HookTriggerIDEnumSendPhoneMessage = "send-phone-message"
)
Hook Secrets
Manage sensitive configuration for hooks using the Secrets sub-resource:
// Add a secret
err := managementClient.Hooks.Secrets.Create(context.Background(), "hook_abc123", &management.CreateSecretRequest{
Key: auth0.String("API_KEY"),
Value: auth0.String("secret-value"),
})
// List secrets (values are not returned)
secrets, err := managementClient.Hooks.Secrets.List(context.Background(), "hook_abc123")
// Delete a secret
err = managementClient.Hooks.Secrets.Delete(context.Background(), "hook_abc123", "API_KEY")
Complete Example
package main
import (
"context"
"fmt"
"log"
"github.com/auth0/go-auth0/v2"
"github.com/auth0/go-auth0/v2/management"
)
func main() {
managementClient, err := management.New(
"yourtenant.auth0.com",
management.WithClientCredentials(clientID, clientSecret),
)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
// Create a hook with dependencies
hook, err := managementClient.Hooks.Create(ctx, &management.CreateHookRequestContent{
TriggerID: auth0.String("credentials-exchange"),
Name: auth0.String("Custom Claims Hook"),
Script: auth0.String(`
module.exports = function(client, scope, audience, context, cb) {
const axios = require('axios');
// Custom logic here
cb(null, {});
};
`),
Dependencies: &management.HookDependencies{
"axios": "^0.21.1",
},
Enabled: auth0.Bool(true),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created hook: %s\n", hook.GetID())
}