# Create or update a trigger

**Documentation:** /reference/api-reference/triggers/postTriggerInstancesBySlugUpsert

Creates a new trigger instance or updates an existing one with the same configuration. Triggers listen for events from external services (webhooks or polling) and can invoke your workflows. If a matching trigger already exists and is disabled, it will be re-enabled. Requires a connected account ID to associate the trigger with a specific user connection.

---

## POST `/api/v3/trigger_instances/{slug}/upsert`

**Endpoint:** `https://backend.composio.dev/api/v3/trigger_instances/{slug}/upsert`

**Summary:** Create or update a trigger

Creates a new trigger instance or updates an existing one with the same configuration. Triggers listen for events from external services (webhooks or polling) and can invoke your workflows. If a matching trigger already exists and is disabled, it will be re-enabled. Requires a connected account ID to associate the trigger with a specific user connection.

### Authentication

**ApiKeyAuth** - API Key in `header` header `x-api-key` OR **UserApiKeyAuth** - API Key in `header` header `x-user-api-key`

### Path Parameters

- `slug` (string) *(required)*: The slug of the trigger instance. Case-insensitive (internally normalized to uppercase).

### Request Body

**Schema:**

- `connectedAuthId` (string (connectedAccountId)): DEPRECATED: This parameter will be removed in a future version. Please use connected_account_id instead.
- `triggerConfig` (object): DEPRECATED: This parameter will be removed in a future version. Please use trigger_config instead.
  - `[key: string]` (any)
- `connected_account_id` (string (connectedAccountId)): Connected account nanoid
- `trigger_config` (object): Trigger configuration
  - `[key: string]` (any)
- `version` (string): DEPRECATED: This parameter will be removed in a future version. Please use toolkit_versions instead.
- `toolkit_versions` (any): Toolkit version specification. Supports "latest" string or a record mapping toolkit slugs to specific versions.

**Example:**

```json
{
  "connectedAuthId": "string",
  "triggerConfig": {
    "key": null
  },
  "connected_account_id": "string",
  "trigger_config": {
    "key": null
  },
  "version": "string",
  "toolkit_versions": null
}
```

### Responses

#### 200 - Successfully upserted trigger instance

**Response Schema:**

- `trigger_id` (string) *(required)*: ID of the updated trigger
- `deprecated` (object) *(required)*
  - `uuid` (string) *(required)*: ID of the updated trigger

**Example Response:**

```json
{
  "trigger_id": "string",
  "deprecated": {
    "uuid": "string"
  }
}
```

#### 201 - Successfully created trigger instance

**Response Schema:**

- `trigger_id` (string) *(required)*: ID of the updated trigger
- `deprecated` (object) *(required)*
  - `uuid` (string) *(required)*: ID of the updated trigger

**Example Response:**

```json
{
  "trigger_id": "string",
  "deprecated": {
    "uuid": "string"
  }
}
```

#### 204 - No content

**Response Schema:**


#### 400 - Bad request

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 401 - Unauthorized

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 404 - Trigger instance not found

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 410 - Gone

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 422 - Unprocessable entity

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 500 - Internal server error

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

#### 501 - Not implemented

**Response Schema:**

- `error` (object) *(required)*
  - `message` (string) *(required)*
  - `code` (number) *(required)*
  - `slug` (string) *(required)*
  - `status` (number) *(required)*
  - `request_id` (string)
  - `suggested_fix` (string)
  - `errors` (array<string>)

### Example cURL Request

```bash
curl -X POST "https://backend.composio.dev/api/v3/trigger_instances/string/upsert" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "connectedAuthId": "string",
    "triggerConfig": {
      "key": null
    },
    "connected_account_id": "string",
    "trigger_config": {
      "key": null
    },
    "version": "string",
    "toolkit_versions": null
  }'
```