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

# Create a hook

`POST /v1/hooks`

Creates a new hook configuration

## Request body

- SchemasCreateHookRequest
  - `failure_mode` 'fail_closed' | 'fail_open', required
  - `hook_point` 'tool.access' | 'tool.pre' | 'tool.post', required
  - `name` string, required
  - `phase` 'before' | 'after', required
  - `plugin_id` string, required
  - `priority` integer
  - `status` 'inactive' | 'active'
  - `timeout_ms` integer

## Response `201`

Created

- SchemasHookResponse
  - `cache_enabled` boolean
  - `cache_ttl_ms` integer
  - `created_at` string
  - `failure_mode` 'fail_closed' | 'fail_open'
  - `hook_point` string
  - `id` string
  - `name` string
  - `phase` 'before' | 'after'
  - `plugin_id` string
  - `priority` integer
  - `status` 'inactive' | 'active'
  - `timeout_ms` integer
  - `updated_at` string
  - `version` integer

## Other responses

- `400` — Bad Request
- `404` — Not Found
- `409` — Conflict
- `500` — Internal Server Error

## Changes

- **2026-02-06** `b0c6cc68de34` — 2 info
  - added the optional property `cache_enabled` to the response with the `201` status
  - added the optional property `cache_ttl_ms` to the response with the `201` status
- **2026-01-24** `ba1aa76b5489` — 1 info
  - the `priority` request property's min was decreased from `1.00` to `0.00`
- **2026-01-17** `26fe911710c2` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/arcadeai/apis/arcade-api/changes/v1/hooks/post.md)

---

[API](https://skmtc.dev/arcadeai/apis/arcade-api.md) · [All operations](https://skmtc.dev/arcadeai/apis/arcade-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/arcadeai/arcade-api/revisions/a509111298b2/schema)
