# Zendesk

Zendesk is a customer service platform offering tools designed to improve customer engagement and support. It allows businesses to manage customer interactions across multiple channels, including email, social media, and chat.

Through this integration, you will configure an Apono webhook that creates new tickets in Zendesk when user access requests are created, approved, granted, and revoked, or when requests fail.

***

### Prerequisites

<table><thead><tr><th width="195">Item</th><th>Description</th></tr></thead><tbody><tr><td><strong>Zendesk API Token</strong></td><td><p><a href="https://developer.zendesk.com/api-reference/introduction/security-and-auth/#api-token">Authentication credential</a> used when making requests to the Zendesk API<br><br>Follow the steps to generate an API token:</p><ol><li>Log in to Zendesk Admin Center.</li><li>Click <strong>Apps and Integrations > Zendesk API > Add API Token</strong>.</li></ol></td></tr><tr><td><strong>Zendesk API URL</strong></td><td>Route for creating a ticket in your Zendesk instance<br><br><strong>Example</strong>: <code>https://&#x3C;YOURDOMAIN>.zendesk.com/api/v2/tickets</code></td></tr></tbody></table>

***

### Configure a webhook

Follow these steps to configure an Apono webhook:

1. On the [**Webhooks**](https://app.apono.io/webhooks) page, click **Add Webhook**. The **Add Webhook** page appears.
2. Click **Request Webhook**.
3. Enter a unique, alphanumeric, user-friendly **Request Webhook Name** for identifying this webhook.
4. Click the **Status** toggle to **Active**.
5. From the **Method** dropdown menu, select a REST method.
6. In the **URL** field, enter *https\://\<SUBDOMAIN.zendesk.com/api/v2/tickets*.\
   \
   Be sure to replace `<SUBDOMAIN>` with the Zendesk subdomain for your account.

{% hint style="warning" %}
The webhook URL **must adhere** to the following requirements:

* Uses the HTTPS protocol
* Does **not** specify any custom ports
  {% endhint %}

7. In the **Body Template** field, construct a JSON body for the webhook payload.

```json
{
  "ticket": {
    "comment": {
      "body": "{ "event_type": "{{ event_type }}", "id": "{{ data.id }}", "friendly_id": "{{ data.friendly_id }}", "requester_id": "{{ data.requester.id }}", "requester_name": "{{ data.requester.name }}", "requester_email": "{{ data.requester.email }}", "justification": "{{ data.justification }}", "creation_date": "{{ data.creation_date }}", "access_flow_id": "{{ data.access_flow.id }}", "access_flow_name": "{{ data.access_flow.name }}", "access_bundle_id": "{{ data.access_bundle.id }}", "access_bundle_name": "{{ data.access_bundle.id }}", "access_groups_integration_name": "{{ data.access_groups.[0].integration.name }}", "access_groups_integration_type": "{{ data.access_groups.[0].integration.type }}" }"
    },
    "priority": "normal",
    "description": "{{ data.justification }}",
    "subject": "apono app - {{ event_type }} - {{ data.friendly_id }}"
  }
}
```

{% hint style="success" %}
Click **View event's payload schema** to reveal the payload schema and available data fields. You can also refer to the [Webhook Payload Schema Reference](/docs/webhook-integrations/webhook-payload-references/webhook-payload-schema-reference.md) to read the descriptions of each data field.
{% endhint %}

8. Under **Headers**, use the following **Key** and **Value** to set the header. Be sure to replace `<ZENDESK_TOKEN>` with a [base64-encoded authentication string](https://developer.zendesk.com/api-reference/introduction/security-and-auth/#api-token).

| Key             | Value                      |
| --------------- | -------------------------- |
| *Authorization* | *Bearer \<ZENDESK\_TOKEN>* |

9. From the **Triggers** dropdown menu, select **RequestCreated**.
10. Under **Filters**, define one or several filter from the listed dropdown menus.

{% hint style="info" %}
Filters empower admins to control the data transmitted via webhooks, minimizing the amount of data third-party tools receive and reducing unnecessary clutter.

**Examples**:

* Send only production requests to your admins' Slack channel.
* Trigger Okta workflows for events from specific integrations or resource types.
* Open a ticket in Jira or ServiceNow for manually approved requests.
  {% endhint %}

11. (Optional) In the **Timeout in seconds** field, enter the duration in seconds to wait before marking the request as failed.
12. (Optional) Define **Response Validators** to verify that the response from the webhook meets specified criteria:
    1. Click **+ Add**. A row of settings appears.
    2. Starting with *$.data.*, enter the **Json Path** of the JSON parameter.
    3. In the **Expected Values** field, enter a value and press the Enter key on your keyboard.
    4. Repeat step **c** to add several expected values.
    5. Repeat steps **a-d** to add multiple response validators.
13. Click **Test** to generate a test event to trigger your webhook. A **Test successful** or **Test failed** response status will appear at the bottom of the page. A successful test will send mock data to the target system.

{% hint style="success" %}
For more information about the test, click **View Invocation Data**. A panel opens revealing the request, response, and other relevant details.

Should your test fail, view these tips to [troubleshoot your webhook](/docs/webhook-integrations/troubleshoot-a-webhook.md).
{% endhint %}

14. Click **Save Webhook**.

The new webhook appears in the Webhooks table. Active webhooks are preceded by a green dot. Inactive webhooks are preceded by a white dot.

Apono will send a call to Zendesk to create a new ticket when the `RequestCreated` event is triggered.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.apono.io/docs/webhook-integrations/request-webhook/itsm/zendesk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
