This documentation describes an old release, version 2024.5.30. Documentation for the latest release, 2025.4.24, can be found here.

Zendesk Input

Overview

Inputter is an HTTP input which uses Python zenpy library. Because of that the configuration uses collections that zenpy library exposes in form of API.

For example: we want to access Tickets API and pull tickets using incremental. The inputter configuration will look like this:

{
  "use": "zendesk.io.ZendeskInput",
  "collection_path": ["tickets", "incremental"]
}

We use a collection_path parameter to allow access to nested collections. For example:

{
  "use": "zendesk.io.ZendeskInput",
  "collection_path": ["tickets", "incremental"],
  "includes": ["user"]  // where 'user' is additianally requested to the 'tickets'
}

Specific logic

CHATS

All Chat related Endpoints require another type of authorization credentials. We have to replace creds with auth2 token.

You must register your application to generate OAuth credentials that your application can use to authenticate API calls to Zendesk. Docs: https://support.zendesk.com/hc/en-us/articles/4408845965210-Using-OAuth-authentication-with-your-application#topic_pbc_cdl_1l

Example:

{
  "subdomain": "test_subdomain",
  "auth2_token": "tyuinmf56789knbgf/knkjvjh"
}

SEARCH

In Search endpoint there is an extra field “search_query” where you can provide your search request: Example:

{
    "input": {
        "credentials": {},
        "use": "zendesk.io#ZendeskInput",
        "collection_path": [
            "search"
        ],
        "include": [],
        "search_query": "Please provide search query"
    }

ATTACHMENTS

In Attachment endpoint there is an extra field “id” where you can provide your attachment_id: Example:

{
    "input": {
        "credentials": {},
        "use": "zendesk.io#ZendeskInput",
        "collection_path": [
            "attachments"
        ],
        "id": ""
    }

Site loading

Several Endpoints support extra parameter to get additional info during one job call. List of supported: https://developer.zendesk.com/documentation/ticketing/using-the-zendesk-api/side_loading/#supported-endpoints

Example: ["talk", "calls", "incremental"].

Upsert

Upsert can be used only for endpoints that support start_time parameter. Usually it’s used only with incremental endpoint.

Tickets and Ticket Fields

For Tickets API the input will include ticket_fields and add every field to a ticket row (root row). The field has the following format:"cr_" + field["id"]). And the ticket row will look like this:

{
  ...,
  "cr_description": "field_value",
  "cr_status": false,
  "cr_subject": null,
  "cr...": "..."
}

Extend Resources

It is possible to extend root record with result of another API resource using extend_resources configuration field.

Having the following inputter configuration

{
  "use": "zendesk.io.ZendeskInput",
  "collection_path": ["tickets", "incremental"],
  "extend_resources": [
    {
      "collection_path": ["tickets", "metrics"]
    }
  ]
}

extend_resources will be applied for each root record. In this example the input will make one additional HTTP requests per ticket record. The call list would look like this:

GET /tickets

GET tickets/1/metrics
GET tickets/2/metrics
GET tickets/.../metrics

The resulting inputter records will look like this:

[
  {
    "id": 1111,
    "title": "Ticket 1",
    "tickets_metrics": [
      {"id": 1, "ticket_id": 1111, "solved_at": "2020-07-20T06:21:26Z", ...},
      {"id": 2, "ticket_id": 1111, "solved_at": "2020-07-20T06:21:26Z", ...},
      ...
    ]
  },
  {
    "id": 1222,
    "title": "Ticket 2",
    "tickets_metrics": [
      {"id": 11, "ticket_id": 1222, "solved_at": "2020-07-20T06:21:26Z", ...},
      {"id": 12, "ticket_id": 1222, "solved_at": "2020-07-20T06:21:26Z", ...},
      ...
    ]
  },
  ...
]

Configuration Errors

Invalid ‘collection_path’:

{
  "use": "zendesk.io.ZendeskInput",
  "collection_path": ["tickets", "invalid_collection"]
}

‘collection_path’ is not callable;

{
  "use": "zendesk.io.ZendeskInput",
  "collection_path": ["tickets", "non_callable_attribute"]
}

Input reference: