---
title: "Create a webhook subscription"
method: POST
path: "/modules/{moduleId}/webhooks"
tags: ["Webhooks"]
---

# Create a webhook subscription

`POST /modules/{moduleId}/webhooks`

## Request

- Base URL: `https://api.teamo360.com/api/v1`
- URL: `https://api.teamo360.com/api/v1/modules/{moduleId}/webhooks`
- Auth: HTTP bearer

Events: record.created, record.updated, record.deleted, record.archived, activity.created, activity.updated, activity.deleted, detail.created, detail.updated, detail.deleted. Record events carry the record as `data.record` (`record.deleted`: `data.recordId`). Activity and detail events carry the row as `data.activity` or `data.detail`, plus `data.recordId` (the parent record) and `data.activityGroupId`. A filter (`filters.fieldId` with optional `values`) matches against that row's fields. The signing secret is returned exactly once. Deliveries carry an HMAC-SHA256 signature header and an eventId for de-duplication; failed deliveries retry with exponential backoff.

Requires the `data:write` token scope.

Admin-role principals only.

## Path parameters

- `moduleId` string, required

## Request body

- object

## Response `200`

Success

## Other responses

- `400`: Malformed parameters or body
- `401`: Missing, invalid, expired, or legacy token
- `403`: Blocked by role, token scope, module grant, or org policy
- `404`: Entity missing or outside the principal’s access
- `429`: Rate limit exceeded - see Retry-After

---

[API](https://skmtc.dev/teamo360/apis/teamo-public-api.md) · [All operations](https://skmtc.dev/teamo360/apis/teamo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/teamo360/apis/teamo-public-api/revisions/32528ecbc4f4?raw)
