# Create a webhook endpoint

> Documentation and API reference for Vaartix, the email API for Indian developers.

Source: https://vaartix.com/docs/api/operations/createwebhook/

POST

/webhooks

```sh
curl --request POST \
  --url https://api.vaartix.com/webhooks \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{ "url": "https://api.acme.in/webhooks/vaartix", "events": [ "email.delivered", "email.bounced", "email.complained" ] }'
```

Vaartix sends a signed `POST` to the URL for each event you choose. The response includes the signing secret once; store it to verify requests. A team can have up to 10 endpoints.

## Authorizations

-   **[apiKey](https://vaartix.com/docs/api/#apikey)**

## Request Bodyrequired

Media typeapplication/json

**object**

**url**

required

A public `https://` URL.

string format: uri

### Example

```
https://api.acme.in/webhooks/vaartix
```

**events**

required

Array<string>

\>= 1 items

Allowed values: email.sent email.delivered email.delivery\_delayed email.bounced email.complained email.rejected email.rendering\_failure email.suppressed email.opened email.clicked

### Example

```json
[
  "email.delivered",
  "email.bounced",
  "email.complained"
]
```

## Responses

### 201

The new endpoint, including its signing secret.

Media typeapplication/json

**object**

**id**

string

**url**

string format: uri

**events**

Array<string>

Allowed values: email.sent email.delivered email.delivery\_delayed email.bounced email.complained email.rejected email.rendering\_failure email.suppressed email.opened email.clicked

**status**

Endpoints are turned off automatically after 5 deliveries in a row fail every attempt.

string

Allowed values: enabled disabled

**createdAt**

string format: date-time

**secret**

required

The signing secret. Shown only when created or rotated.

string

#### Example

```json
{
  "id": "wh_4n8x2k7q1m9c3v5d",
  "events": [
    "email.sent"
  ],
  "status": "enabled",
  "secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw"
}
```

### 400

`validation_error`: the request is invalid. The message says which field and why.

Media typeapplication/json

**object**

**error**

required

**object**

**type**

required

Stable, machine-readable error type.

string

Allowed values: validation\_error unauthorized forbidden not\_found conflict rate\_limited daily\_quota\_exceeded domain\_not\_verified invalid\_from\_address account\_paused domain\_needs\_review content\_rejected idempotency\_conflict bad\_request internal\_error

**message**

required

Human-readable explanation, safe to show to developers.

string

#### Example

```json
{
  "error": {
    "type": "validation_error",
    "message": "to: \"priya@\" is not a valid email address."
  }
}
```

### 401

`unauthorized`: the API key is missing, invalid or revoked.

Media typeapplication/json

**object**

**error**

required

**object**

**type**

required

Stable, machine-readable error type.

string

Allowed values: validation\_error unauthorized forbidden not\_found conflict rate\_limited daily\_quota\_exceeded domain\_not\_verified invalid\_from\_address account\_paused domain\_needs\_review content\_rejected idempotency\_conflict bad\_request internal\_error

**message**

required

Human-readable explanation, safe to show to developers.

string

#### Example

```json
{
  "error": {
    "type": "validation_error"
  }
}
```

### 403

`forbidden`: the key cannot do this, for example a send-only key on a management endpoint.

Media typeapplication/json

**object**

**error**

required

**object**

**type**

required

Stable, machine-readable error type.

string

Allowed values: validation\_error unauthorized forbidden not\_found conflict rate\_limited daily\_quota\_exceeded domain\_not\_verified invalid\_from\_address account\_paused domain\_needs\_review content\_rejected idempotency\_conflict bad\_request internal\_error

**message**

required

Human-readable explanation, safe to show to developers.

string

#### Example

```json
{
  "error": {
    "type": "validation_error"
  }
}
```

### 409

`conflict`: the request clashes with the current state, for example too many endpoints.

Media typeapplication/json

**object**

**error**

required

**object**

**type**

required

Stable, machine-readable error type.

string

Allowed values: validation\_error unauthorized forbidden not\_found conflict rate\_limited daily\_quota\_exceeded domain\_not\_verified invalid\_from\_address account\_paused domain\_needs\_review content\_rejected idempotency\_conflict bad\_request internal\_error

**message**

required

Human-readable explanation, safe to show to developers.

string

#### Example

```json
{
  "error": {
    "type": "validation_error"
  }
}
```
