---
title: "Create a hook"
method: POST
path: "/api/hooks"
tags: ["Hooks"]
---

# Create a hook

`POST /api/hooks`

Create a new hook with the given data.

## Request body

- object
  - `tenantId` string
  - `name` string — The name of the hook.
  - `event` 'PostRegister' | 'PostSignIn' | 'PostSignInAdaptiveMfaTriggered' | 'PostResetPassword' | 'User.Created' | 'User.Deleted' | 'User.Data.Updated' | 'User.SuspensionStatus.Updated' | 'Role.Created' | 'Role.Deleted' | 'Role.Data.Updated' | 'Role.Scopes.Updated' | 'Scope.Created' | 'Scope.Deleted' | 'Scope.Data.Updated' | 'Organization.Created' | 'Organization.Deleted' | 'Organization.Data.Updated' | 'Organization.Membership.Updated' | 'OrganizationRole.Created' | 'OrganizationRole.Deleted' | 'OrganizationRole.Data.Updated' | 'OrganizationRole.Scopes.Updated' | 'OrganizationScope.Created' | 'OrganizationScope.Deleted' | 'OrganizationScope.Data.Updated' | 'Identifier.Lockout' | 'Message.RateLimited' | 'Grant.LimitExceeded' — Use `events` instead.
  - `events` string[] — An array of hook events.
  - `config` object, required
    - `url` string, required
    - `headers` object
    - `retries` number — Now the retry times is fixed to 3. Keep for backward compatibility.
  - `enabled` boolean
  - `createdAt` number

## Response `201`

The hook was created successfully.

- object
  - `tenantId` string, required
  - `id` string, required
  - `name` string, required
  - `event` 'PostRegister' | 'PostSignIn' | 'PostSignInAdaptiveMfaTriggered' | 'PostResetPassword' | 'User.Created' | 'User.Deleted' | 'User.Data.Updated' | 'User.SuspensionStatus.Updated' | 'Role.Created' | 'Role.Deleted' | 'Role.Data.Updated' | 'Role.Scopes.Updated' | 'Scope.Created' | 'Scope.Deleted' | 'Scope.Data.Updated' | 'Organization.Created' | 'Organization.Deleted' | 'Organization.Data.Updated' | 'Organization.Membership.Updated' | 'OrganizationRole.Created' | 'OrganizationRole.Deleted' | 'OrganizationRole.Data.Updated' | 'OrganizationRole.Scopes.Updated' | 'OrganizationScope.Created' | 'OrganizationScope.Deleted' | 'OrganizationScope.Data.Updated' | 'Identifier.Lockout' | 'Message.RateLimited' | 'Grant.LimitExceeded', nullable, required
  - `events` string[], required
  - `config` object, required
    - `url` string, required
    - `headers` object
    - `retries` number
  - `signingKey` string, required
  - `enabled` boolean, required
  - `createdAt` number, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden

---

[API](https://skmtc.net/logto/apis/logto-api-references.md) · [All operations](https://skmtc.net/logto/apis/logto-api-references/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/logto/logto-api-references/revisions/a163dc77d842/schema)
