Zendesk-Support authentication
This page documents the authentication and configuration options for the Zendesk-Support agent connector.
Authentication
Open source execution
In open source mode, you provide API credentials directly to the connector.
OAuth
credentials fields you need:
| Field Name | Type | Required | Description |
|---|---|---|---|
access_token | str | Yes | OAuth 2.0 access token |
refresh_token | str | No | OAuth 2.0 refresh token (optional) |
Example request:
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.connectors.zendesk_support.models import ZendeskSupportOauth20AuthConfig
connector = ZendeskSupportConnector(
auth_config=ZendeskSupportOauth20AuthConfig(
access_token="<OAuth 2.0 access token>",
refresh_token="<OAuth 2.0 refresh token (optional)>"
)
)
Token
credentials fields you need:
| Field Name | Type | Required | Description |
|---|---|---|---|
email | str | Yes | Your Zendesk account email address |
api_token | str | Yes | Your Zendesk API token from Admin Center |
Example request:
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.connectors.zendesk_support.models import ZendeskSupportApiTokenAuthConfig
connector = ZendeskSupportConnector(
auth_config=ZendeskSupportApiTokenAuthConfig(
email="<Your Zendesk account email address>",
api_token="<Your Zendesk API token from Admin Center>"
)
)
Hosted execution
In hosted mode, you first create a connector via the Airbyte Agent API (providing your OAuth or Token credentials), then execute operations using either the Python SDK or API. If you need a step-by-step guide, see the developer quickstart.
OAuth
Create a connector with OAuth credentials.
credentials fields you need:
| Field Name | Type | Required | Description |
|---|---|---|---|
access_token | str | Yes | OAuth 2.0 access token |
refresh_token | str | No | OAuth 2.0 refresh token (optional) |
Example request:
curl -X POST "https://api.airbyte.ai/api/v1/integrations/connectors" \
-H "Authorization: Bearer <YOUR_BEARER_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"workspace_name": "<WORKSPACE_NAME>",
"connector_type": "Zendesk-Support",
"name": "My Zendesk-Support Connector",
"credentials": {
"access_token": "<OAuth 2.0 access token>",
"refresh_token": "<OAuth 2.0 refresh token (optional)>"
}
}'
Bring your own OAuth flow
To implement your own OAuth flow, use Airbyte's server-side OAuth API endpoints. For a complete guide, see Build your own OAuth flow.
Step 1: Initiate the OAuth flow
Request a consent URL for your user.
| Field Name | Type | Required | Description |
|---|---|---|---|
workspace_name | string | Yes | Your unique identifier for the workspace |
connector_type | string | Yes | The connector type (e.g., "Zendesk-Support") |
redirect_url | string | Yes | URL to redirect to after OAuth authorization |
Example request:
curl -X POST "https://api.airbyte.ai/api/v1/integrations/connectors/oauth/initiate" \
-H "Authorization: Bearer <YOUR_BEARER_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"workspace_name": "<WORKSPACE_NAME>",
"connector_type": "Zendesk-Support",
"redirect_url": "https://yourapp.com/oauth/callback"
}'
Redirect your user to the consent_url from the response.
Step 2: Handle the callback
After the user authorizes access, Airbyte automatically creates the connector and redirects them to your redirect_url with a connector_id query parameter. You don't need to make a separate API call to create the connector.
https://yourapp.com/oauth/callback?connector_id=<connector_id>
Extract the connector_id from the callback URL and store it for future operations. For error handling and a complete implementation example, see Build your own OAuth flow.
Token
Create a connector with Token credentials.
credentials fields you need:
| Field Name | Type | Required | Description |
|---|---|---|---|
email | str | Yes | Your Zendesk account email address |
api_token | str | Yes | Your Zendesk API token from Admin Center |
Example request:
curl -X POST "https://api.airbyte.ai/api/v1/integrations/connectors" \
-H "Authorization: Bearer <YOUR_BEARER_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"workspace_name": "<WORKSPACE_NAME>",
"connector_type": "Zendesk-Support",
"name": "My Zendesk-Support Connector",
"credentials": {
"email": "<Your Zendesk account email address>",
"api_token": "<Your Zendesk API token from Admin Center>"
}
}'
Execution
After creating the connector, execute operations using either the Python SDK or API.
If your Airbyte client can access multiple organizations, include organization_id in AirbyteAuthConfig and X-Organization-Id in raw API calls.
Python SDK
The connect() factory returns a fully typed ZendeskSupportConnector and reads AIRBYTE_CLIENT_ID / AIRBYTE_CLIENT_SECRET from the environment:
- Pydantic AI
- LangChain
- OpenAI Agents
- FastMCP
from pydantic_ai import Agent
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
connector = connect("zendesk-support", workspace_name="<your_workspace_name>")
agent = Agent("openai:gpt-4o")
@agent.tool_plain
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
return await connector.execute(entity, action, params or {})
from langchain_core.tools import tool
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
connector = connect("zendesk-support", workspace_name="<your_workspace_name>")
@tool
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
# connector.execute returns a Pydantic envelope for typed actions; fall back to raw data otherwise.
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
from agents import Agent, function_tool
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
connector = connect("zendesk-support", workspace_name="<your_workspace_name>")
# strict_mode=False because `params: dict` is permissive and the default strict
# JSON schema rejects objects with additionalProperties.
@function_tool(strict_mode=False)
@ZendeskSupportConnector.tool_utils(framework="openai_agents")
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
agent = Agent(name="Zendesk-Support Assistant", tools=[zendesk_support_execute])
from fastmcp import FastMCP
from airbyte_agent_sdk import connect
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
connector = connect("zendesk-support", workspace_name="<your_workspace_name>")
mcp = FastMCP("Zendesk-Support Agent")
@mcp.tool
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
Or pass credentials explicitly (equivalent, useful when you're not loading them from the environment): Pydantic AI
- Pydantic AI
- LangChain
- OpenAI Agents
- FastMCP
from pydantic_ai import Agent
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig
connector = ZendeskSupportConnector(
auth_config=AirbyteAuthConfig(
workspace_name="<your_workspace_name>",
organization_id="<your_organization_id>", # Optional for multi-org clients
airbyte_client_id="<your-client-id>",
airbyte_client_secret="<your-client-secret>"
)
)
agent = Agent("openai:gpt-4o")
@agent.tool_plain
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
return await connector.execute(entity, action, params or {})
from langchain_core.tools import tool
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig
connector = ZendeskSupportConnector(
auth_config=AirbyteAuthConfig(
workspace_name="<your_workspace_name>",
organization_id="<your_organization_id>", # Optional for multi-org clients
airbyte_client_id="<your-client-id>",
airbyte_client_secret="<your-client-secret>"
)
)
@tool
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
# connector.execute returns a Pydantic envelope for typed actions; fall back to raw data otherwise.
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
from agents import Agent, function_tool
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig
connector = ZendeskSupportConnector(
auth_config=AirbyteAuthConfig(
workspace_name="<your_workspace_name>",
organization_id="<your_organization_id>", # Optional for multi-org clients
airbyte_client_id="<your-client-id>",
airbyte_client_secret="<your-client-secret>"
)
)
# strict_mode=False because `params: dict` is permissive and the default strict
# JSON schema rejects objects with additionalProperties.
@function_tool(strict_mode=False)
@ZendeskSupportConnector.tool_utils(framework="openai_agents")
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
agent = Agent(name="Zendesk-Support Assistant", tools=[zendesk_support_execute])
from fastmcp import FastMCP
from airbyte_agent_sdk.connectors.zendesk_support import ZendeskSupportConnector
from airbyte_agent_sdk.types import AirbyteAuthConfig
connector = ZendeskSupportConnector(
auth_config=AirbyteAuthConfig(
workspace_name="<your_workspace_name>",
organization_id="<your_organization_id>", # Optional for multi-org clients
airbyte_client_id="<your-client-id>",
airbyte_client_secret="<your-client-secret>"
)
)
mcp = FastMCP("Zendesk-Support Agent")
@mcp.tool
@ZendeskSupportConnector.tool_utils
async def zendesk_support_execute(entity: str, action: str, params: dict | None = None):
"""Execute Zendesk-Support connector operations."""
result = await connector.execute(entity, action, params or {})
return result.model_dump(mode="json") if hasattr(result, "model_dump") else result
API
curl -X POST 'https://api.airbyte.ai/api/v1/integrations/connectors/<connector_id>/execute' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'X-Organization-Id: <YOUR_ORGANIZATION_ID>' \
-H 'Content-Type: application/json' \
-d '{"entity": "<entity>", "action": "<action>", "params": {}}'
Configuration
The Zendesk-Support connector requires the following configuration variables. These variables are used to construct the base API URL. Pass them via the config parameter when initializing the connector.
| Variable | Type | Required | Default | Description |
|---|---|---|---|---|
subdomain | string | Yes | your-subdomain | Your Zendesk subdomain |