---
canonical_url: "https://docs.composio.dev/reference/api-reference/webhook-events/composio_trigger_message"
markdown_url: "https://docs.composio.dev/reference/api-reference/webhook-events/composio_trigger_message.md"
product: "platform"
version: "3.1"
last_updated: null
---

# Trigger message

**Documentation:** /reference/api-reference/webhook-events/composio_trigger_message

> **API version:** This page documents Composio REST API v3.1, the current version, at `https://backend.composio.dev/api/v3.1`. `https://backend.composio.dev/api/v3` is the previous version and remains supported.

Fired when a trigger receives data from an external service.

---

## POST `composio.trigger.message`

**Event type:** `composio.trigger.message`

**Summary:** Trigger message

Fired when a trigger receives data from an external service.

### Delivery Headers

- `webhook-id` (string) *(required)*: Unique message id, stable across delivery retries. Use it as an idempotency key. Equals the payload `id`.
- `webhook-timestamp` (string) *(required)*: Unix timestamp (seconds) of this delivery attempt.
- `webhook-signature` (string) *(required)*: Base64 HMAC-SHA256 signature, formatted `v1,<signature>`, over `${webhook-id}.${webhook-timestamp}.${raw_body}`.
- `x-composio-webhook-version` (string) *(required)*: Payload version for this subscription (for example `V3`).
- `x-composio-delivery-attempt` (string) *(required)*: Attempt number for this delivery, starting at `1` and incrementing on each retry. The payload and `webhook-id` are identical across attempts, so use `webhook-id` for idempotency rather than this value.

### Request Body

**Schema:**

- `id` (string) *(required)*: Unique event id (msg_<uuid>). Also sent as the `webhook-id` header and stable across delivery retries — use it for idempotency.
- `timestamp` (string (date-time)) *(required)*: ISO 8601 timestamp of when the event was created.
- `type` (enum: "composio.trigger.message") *(required)*
- `metadata` (object) *(required)*
  - `log_id` (string) *(required)*: ID of the execution log.
  - `trigger_slug` (string) *(required)*: The trigger that fired (for example GITHUB_COMMIT_EVENT).
  - `trigger_id` (string) *(required)*: ID of the trigger instance.
  - `connected_account_id` (string) *(required)*: ID of the connected account the trigger belongs to.
  - `auth_config_id` (string) *(required)*: ID of the auth config.
  - `user_id` (string,null) *(required)*: ID of the user for this connection, or null if not set.
- `data` (object) *(required)*: The trigger event payload. Its shape depends on the trigger — see that trigger's documentation.
  - `[key: string]` (any)

**Example:**

```json
{
  "id": "msg_2f1c9e4a-3b6d-4a1e-9c2f-7d8e5a6b4c31",
  "type": "composio.trigger.message",
  "timestamp": "2026-01-15T10:30:00Z",
  "metadata": {
    "log_id": "log_abc123",
    "trigger_slug": "GITHUB_COMMIT_EVENT",
    "trigger_id": "ti_xyz789",
    "connected_account_id": "ca_def456",
    "auth_config_id": "ac_xyz789",
    "user_id": "user-123"
  },
  "data": {
    "commit_sha": "a1b2c3d",
    "message": "fix: resolve null pointer",
    "author": "jane"
  }
}
```

### Responses

#### 200 - Return any 2xx status to acknowledge receipt. Non-2xx responses are retried.

---

## REST API version

The current REST API version is **v3.1**, served at `https://backend.composio.dev/api/v3.1`. Prefer it for new code and new examples.

`https://backend.composio.dev/api/v3` is the previous version. It is frozen with pinned tool-version defaults and remains supported — existing v3 integrations keep working and do not need to migrate.