# Webhooks

## Create Webhook

`print_mail.webhooks.create(WebhookCreateParams**kwargs)  -> Webhook`

**post** `/print-mail/v1/webhooks`

Create a Webhook.

### Parameters

- `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

  The list of event types this webhook listens for.

  - `"letter.created"`

  - `"letter.updated"`

  - `"postcard.created"`

  - `"postcard.updated"`

  - `"self_mailer.created"`

  - `"self_mailer.updated"`

  - `"cheque.created"`

  - `"cheque.updated"`

  - `"box.created"`

  - `"box.updated"`

  - `"snap_pack.created"`

  - `"snap_pack.updated"`

  - `"return_envelope_order.created"`

  - `"return_envelope_order.updated"`

  - `"tracker.visited"`

  - `"campaign.created"`

  - `"campaign.updated"`

  - `"virtual_mailbox_item.created"`

  - `"postal_statement.created"`

  - `"document.created"`

  - `"document.updated"`

- `url: str`

  An HTTPS URL that PostGrid can invoke for webhook deliveries.

- `description: Optional[str]`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `metadata: Optional[Dict[str, object]]`

  See the section on Metadata.

- `payload_format: Optional[Literal["jwt", "json"]]`

  The format in which a Webhook's event payload is delivered.

  - `"jwt"`

  - `"json"`

- `secret: Optional[str]`

  A webhook signing secret with at least 20 non-whitespace characters.

### Returns

- `class Webhook: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `created_at: datetime`

    The UTC time at which this resource was created.

  - `enabled: bool`

    Whether this webhook is enabled. Disabled webhooks are not triggered.

  - `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

    The list of event types this webhook listens for.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `live: bool`

    `true` if this is a live mode resource else `false`.

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

  - `updated_at: datetime`

    The UTC time at which this resource was last updated.

  - `url: str`

    An HTTPS URL that PostGrid can invoke for webhook deliveries.

  - `description: Optional[str]`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: Optional[Dict[str, object]]`

    See the section on Metadata.

  - `payload_format: Optional[Literal["jwt", "json"]]`

    The format in which a Webhook's event payload is delivered.

    - `"jwt"`

    - `"json"`

  - `secret: Optional[str]`

    A webhook signing secret with at least 20 non-whitespace characters.

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
webhook = client.print_mail.webhooks.create(
    enabled_events=["letter.created"],
    url="https://example.com/postgrid-webhook",
    description="Letter Created",
)
print(webhook.id)
```

#### Response

```json
{
  "id": "webhook_skN2ZTvFwS62oc5tJY1gzw",
  "object": "webhook",
  "live": false,
  "description": "Letter Created",
  "url": "https://example.com/postgrid-webhook",
  "enabledEvents": [
    "letter.created"
  ],
  "payloadFormat": "jwt",
  "enabled": true,
  "secret": "webhook_secret_xkNXtQ4jHevFdkTG3mSf1Q",
  "createdAt": "2022-02-16T18:37:02.048Z",
  "updatedAt": "2022-02-16T18:37:02.048Z"
}
```

## List Webhooks

`print_mail.webhooks.list(WebhookListParams**kwargs)  -> SyncSkipLimit[Webhook]`

**get** `/print-mail/v1/webhooks`

Retrieve a paginated list of Webhooks.

### Parameters

- `limit: Optional[int]`

- `search: Optional[str]`

  You can supply any string to help narrow down the list of resources. For example, if you pass `"New York"` (quoted), it will return resources that have that string present somewhere in their response. Alternatively, you can supply a structured search query. See the documentation on `StructuredSearchQuery` for more details.

- `skip: Optional[int]`

### Returns

- `class Webhook: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `created_at: datetime`

    The UTC time at which this resource was created.

  - `enabled: bool`

    Whether this webhook is enabled. Disabled webhooks are not triggered.

  - `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

    The list of event types this webhook listens for.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `live: bool`

    `true` if this is a live mode resource else `false`.

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

  - `updated_at: datetime`

    The UTC time at which this resource was last updated.

  - `url: str`

    An HTTPS URL that PostGrid can invoke for webhook deliveries.

  - `description: Optional[str]`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: Optional[Dict[str, object]]`

    See the section on Metadata.

  - `payload_format: Optional[Literal["jwt", "json"]]`

    The format in which a Webhook's event payload is delivered.

    - `"jwt"`

    - `"json"`

  - `secret: Optional[str]`

    A webhook signing secret with at least 20 non-whitespace characters.

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
page = client.print_mail.webhooks.list()
page = page.data[0]
print(page.id)
```

#### Response

```json
{
  "object": "list",
  "limit": 10,
  "skip": 0,
  "totalCount": 1,
  "data": [
    {
      "id": "webhook_skN2ZTvFwS62oc5tJY1gzw",
      "object": "webhook",
      "live": false,
      "description": "Letter Created",
      "url": "https://example.com/postgrid-webhook",
      "enabledEvents": [
        "letter.created"
      ],
      "payloadFormat": "jwt",
      "enabled": true,
      "secret": "webhook_secret_xkNXtQ4jHevFdkTG3mSf1Q",
      "createdAt": "2022-02-16T18:37:02.048Z",
      "updatedAt": "2022-02-16T18:37:02.048Z"
    }
  ]
}
```

## Update Webhook

`print_mail.webhooks.update(strid, WebhookUpdateParams**kwargs)  -> Webhook`

**post** `/print-mail/v1/webhooks/{id}`

Update a Webhook by ID.

### Parameters

- `id: str`

- `description: Optional[str]`

  An optional string describing this resource. Will be visible in the API and the dashboard.

- `enabled: Optional[bool]`

  Whether this webhook is enabled. Disabled webhooks are not triggered.

- `enabled_events: Optional[List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]]`

  The list of event types this webhook listens for.

  - `"letter.created"`

  - `"letter.updated"`

  - `"postcard.created"`

  - `"postcard.updated"`

  - `"self_mailer.created"`

  - `"self_mailer.updated"`

  - `"cheque.created"`

  - `"cheque.updated"`

  - `"box.created"`

  - `"box.updated"`

  - `"snap_pack.created"`

  - `"snap_pack.updated"`

  - `"return_envelope_order.created"`

  - `"return_envelope_order.updated"`

  - `"tracker.visited"`

  - `"campaign.created"`

  - `"campaign.updated"`

  - `"virtual_mailbox_item.created"`

  - `"postal_statement.created"`

  - `"document.created"`

  - `"document.updated"`

- `metadata: Optional[Dict[str, object]]`

  See the section on Metadata.

- `payload_format: Optional[Literal["jwt", "json"]]`

  The format in which a Webhook's event payload is delivered.

  - `"jwt"`

  - `"json"`

- `secret: Optional[str]`

  A webhook signing secret with at least 20 non-whitespace characters.

- `url: Optional[str]`

  An HTTPS URL that PostGrid can invoke for webhook deliveries.

### Returns

- `class Webhook: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `created_at: datetime`

    The UTC time at which this resource was created.

  - `enabled: bool`

    Whether this webhook is enabled. Disabled webhooks are not triggered.

  - `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

    The list of event types this webhook listens for.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `live: bool`

    `true` if this is a live mode resource else `false`.

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

  - `updated_at: datetime`

    The UTC time at which this resource was last updated.

  - `url: str`

    An HTTPS URL that PostGrid can invoke for webhook deliveries.

  - `description: Optional[str]`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: Optional[Dict[str, object]]`

    See the section on Metadata.

  - `payload_format: Optional[Literal["jwt", "json"]]`

    The format in which a Webhook's event payload is delivered.

    - `"jwt"`

    - `"json"`

  - `secret: Optional[str]`

    A webhook signing secret with at least 20 non-whitespace characters.

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
webhook = client.print_mail.webhooks.update(
    id="id",
    description="Letter creates and updates",
    enabled=True,
    enabled_events=["letter.created", "letter.updated"],
    url="https://example.com/postgrid-webhook",
)
print(webhook.id)
```

#### Response

```json
{
  "id": "webhook_skN2ZTvFwS62oc5tJY1gzw",
  "object": "webhook",
  "live": false,
  "description": "Letter creates and updates",
  "url": "https://example.com/postgrid-webhook",
  "enabledEvents": [
    "letter.created",
    "letter.updated"
  ],
  "payloadFormat": "jwt",
  "enabled": true,
  "secret": "webhook_secret_xkNXtQ4jHevFdkTG3mSf1Q",
  "createdAt": "2022-02-16T18:37:02.048Z",
  "updatedAt": "2022-02-16T18:37:14.021Z"
}
```

## Get Webhook

`print_mail.webhooks.retrieve(strid)  -> Webhook`

**get** `/print-mail/v1/webhooks/{id}`

Retrieve a Webhook by ID.

### Parameters

- `id: str`

### Returns

- `class Webhook: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `created_at: datetime`

    The UTC time at which this resource was created.

  - `enabled: bool`

    Whether this webhook is enabled. Disabled webhooks are not triggered.

  - `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

    The list of event types this webhook listens for.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `live: bool`

    `true` if this is a live mode resource else `false`.

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

  - `updated_at: datetime`

    The UTC time at which this resource was last updated.

  - `url: str`

    An HTTPS URL that PostGrid can invoke for webhook deliveries.

  - `description: Optional[str]`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: Optional[Dict[str, object]]`

    See the section on Metadata.

  - `payload_format: Optional[Literal["jwt", "json"]]`

    The format in which a Webhook's event payload is delivered.

    - `"jwt"`

    - `"json"`

  - `secret: Optional[str]`

    A webhook signing secret with at least 20 non-whitespace characters.

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
webhook = client.print_mail.webhooks.retrieve(
    "id",
)
print(webhook.id)
```

#### Response

```json
{
  "id": "webhook_skN2ZTvFwS62oc5tJY1gzw",
  "object": "webhook",
  "live": false,
  "description": "Letter Created",
  "url": "https://example.com/postgrid-webhook",
  "enabledEvents": [
    "letter.created"
  ],
  "payloadFormat": "jwt",
  "enabled": true,
  "secret": "webhook_secret_xkNXtQ4jHevFdkTG3mSf1Q",
  "createdAt": "2022-02-16T18:37:02.048Z",
  "updatedAt": "2022-02-16T18:37:02.048Z"
}
```

## Delete Webhook

`print_mail.webhooks.delete(strid)  -> WebhookDeleteResponse`

**delete** `/print-mail/v1/webhooks/{id}`

Delete a Webhook by ID. Note that this operation cannot be undone.

### Parameters

- `id: str`

### Returns

- `class WebhookDeleteResponse: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `deleted: Literal[true]`

    - `true`

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
webhook = client.print_mail.webhooks.delete(
    "id",
)
print(webhook.id)
```

#### Response

```json
{
  "id": "webhook_skN2ZTvFwS62oc5tJY1gzw",
  "object": "webhook",
  "deleted": true
}
```

## List Webhook Invocations

`print_mail.webhooks.list_invocations(strid, WebhookListInvocationsParams**kwargs)  -> SyncSkipLimit[WebhookInvocation]`

**get** `/print-mail/v1/webhooks/{id}/invocations`

Retrieve a paginated list of invocations for a Webhook.

### Parameters

- `id: str`

- `limit: Optional[int]`

- `search: Optional[str]`

  You can supply any string to help narrow down the list of resources. For example, if you pass `"New York"` (quoted), it will return resources that have that string present somewhere in their response. Alternatively, you can supply a structured search query. See the documentation on `StructuredSearchQuery` for more details.

- `skip: Optional[int]`

### Returns

- `class WebhookInvocation: …`

  - `id: str`

    A unique ID prefixed with `webhook_invocation_`.

  - `created_at: datetime`

    The UTC time at which this invocation was created.

  - `event: str`

    The ID of the event that was delivered in this invocation.

  - `object: Literal["webhook_invocation"]`

    Always `webhook_invocation`.

    - `"webhook_invocation"`

  - `status_code: int`

    The HTTP status code returned by your endpoint for this invocation.

  - `type: Literal["letter.created", "letter.updated", "postcard.created", 18 more]`

    The type of event that a Webhook can listen for and that an Event represents.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `updated_at: datetime`

    The UTC time at which this invocation was last updated.

  - `webhook: str`

    The ID of the webhook that was invoked.

  - `order_id: Optional[str]`

    The ID of the order associated with this invocation, if the event was order-related.

### Example

```python
import os
from postgrid import PostGrid

client = PostGrid(
    print_mail_api_key=os.environ.get("POSTGRID_PRINT_MAIL_API_KEY"),  # This is the default and can be omitted
)
page = client.print_mail.webhooks.list_invocations(
    id="id",
)
page = page.data[0]
print(page.id)
```

#### Response

```json
{
  "object": "list",
  "limit": 10,
  "skip": 0,
  "totalCount": 1,
  "data": [
    {
      "id": "webhook_invocation_6TAGtJezjUyGFnznTRdX37",
      "object": "webhook_invocation",
      "webhook": "webhook_skN2ZTvFwS62oc5tJY1gzw",
      "event": "event_r1nfP4xAacyqMYtt7PeyFD",
      "orderID": "letter_rqfnwvzq5TUsYR2r6L9V8X",
      "type": "letter.created",
      "statusCode": 200,
      "createdAt": "2021-04-02T02:09:32.066Z",
      "updatedAt": "2021-04-02T02:09:32.066Z"
    }
  ]
}
```

## Domain Types

### Webhook

- `class Webhook: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `created_at: datetime`

    The UTC time at which this resource was created.

  - `enabled: bool`

    Whether this webhook is enabled. Disabled webhooks are not triggered.

  - `enabled_events: List[Literal["letter.created", "letter.updated", "postcard.created", 18 more]]`

    The list of event types this webhook listens for.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `live: bool`

    `true` if this is a live mode resource else `false`.

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`

  - `updated_at: datetime`

    The UTC time at which this resource was last updated.

  - `url: str`

    An HTTPS URL that PostGrid can invoke for webhook deliveries.

  - `description: Optional[str]`

    An optional string describing this resource. Will be visible in the API and the dashboard.

  - `metadata: Optional[Dict[str, object]]`

    See the section on Metadata.

  - `payload_format: Optional[Literal["jwt", "json"]]`

    The format in which a Webhook's event payload is delivered.

    - `"jwt"`

    - `"json"`

  - `secret: Optional[str]`

    A webhook signing secret with at least 20 non-whitespace characters.

### Webhook Invocation

- `class WebhookInvocation: …`

  - `id: str`

    A unique ID prefixed with `webhook_invocation_`.

  - `created_at: datetime`

    The UTC time at which this invocation was created.

  - `event: str`

    The ID of the event that was delivered in this invocation.

  - `object: Literal["webhook_invocation"]`

    Always `webhook_invocation`.

    - `"webhook_invocation"`

  - `status_code: int`

    The HTTP status code returned by your endpoint for this invocation.

  - `type: Literal["letter.created", "letter.updated", "postcard.created", 18 more]`

    The type of event that a Webhook can listen for and that an Event represents.

    - `"letter.created"`

    - `"letter.updated"`

    - `"postcard.created"`

    - `"postcard.updated"`

    - `"self_mailer.created"`

    - `"self_mailer.updated"`

    - `"cheque.created"`

    - `"cheque.updated"`

    - `"box.created"`

    - `"box.updated"`

    - `"snap_pack.created"`

    - `"snap_pack.updated"`

    - `"return_envelope_order.created"`

    - `"return_envelope_order.updated"`

    - `"tracker.visited"`

    - `"campaign.created"`

    - `"campaign.updated"`

    - `"virtual_mailbox_item.created"`

    - `"postal_statement.created"`

    - `"document.created"`

    - `"document.updated"`

  - `updated_at: datetime`

    The UTC time at which this invocation was last updated.

  - `webhook: str`

    The ID of the webhook that was invoked.

  - `order_id: Optional[str]`

    The ID of the order associated with this invocation, if the event was order-related.

### Webhook Delete Response

- `class WebhookDeleteResponse: …`

  - `id: str`

    A unique ID prefixed with webhook_

  - `deleted: Literal[true]`

    - `true`

  - `object: Literal["webhook"]`

    Always `webhook`.

    - `"webhook"`
