Integrating Zendesk with Bubble connects your app to professional customer support infrastructure. This tutorial covers setting up the Zendesk API via the API Connector, creating support tickets from Bubble workflows, syncing ticket status back to your app, and embedding the Zendesk Web Widget for live chat and help center access directly within your Bubble pages.
Overview: Integrating Zendesk in Bubble
This tutorial shows you how to connect your Bubble app to Zendesk for professional customer support. You will create tickets via API, sync status updates, and embed the Zendesk widget for live chat.
Prerequisites
- A Bubble app with the API Connector plugin
- A Zendesk account with API access enabled
- Your Zendesk subdomain and API token
- Basic understanding of the API Connector in Bubble
Step-by-step guide
Configure the Zendesk API in the API Connector
Configure the Zendesk API in the API Connector
Go to Plugins → API Connector → Add another API. Name it 'Zendesk'. Set Authentication to HTTP Basic Auth. The username is your Zendesk email with /token appended (e.g., admin@yourcompany.com/token) and the password is your API token from Zendesk Admin → Channels → API. Set the base URL to https://yoursubdomain.zendesk.com/api/v2. Add a shared header: Content-Type = application/json.
Expected result: The Zendesk API is configured with authentication in your API Connector.
Create tickets from Bubble workflows
Create tickets from Bubble workflows
Add a new call in the API Connector: 'Create Ticket', POST method, URL: /tickets.json. Set Use as to Action. Add the request body with ticket subject, description, requester email, and priority. In your Bubble app, add a Contact Support button or form. The workflow calls the Zendesk Create Ticket API with the user's input, then shows a confirmation message with the ticket number from the response.
1{2 "ticket": {3 "subject": "<subject_param>",4 "description": "<description_param>",5 "requester": {6 "email": "<requester_email>"7 },8 "priority": "normal"9 }10}Expected result: Support tickets are created in Zendesk when users submit support requests from your Bubble app.
Sync ticket status between Zendesk and Bubble
Sync ticket status between Zendesk and Bubble
Create a SupportTicket Data Type in Bubble with fields: zendesk_ticket_id (text), user (User), subject (text), status (text), last_synced (date). After creating a Zendesk ticket, store the ticket ID in your Bubble database. Create a scheduled backend workflow that runs every 15 minutes, fetches ticket updates from Zendesk using a GET call to /tickets/[ticket_id].json, and updates the local status. Display ticket status on the user's support page.
Expected result: Ticket status syncs from Zendesk to your Bubble app automatically.
Embed the Zendesk Web Widget
Embed the Zendesk Web Widget
The Zendesk Web Widget adds a chat button, help center search, and ticket submission directly in your app. Go to Zendesk Admin → Channels → Widget. Copy the embed script. In Bubble, add an HTML element to your reusable header (so it loads on every page) and paste the Zendesk widget script. The widget appears as a floating button in the corner of your app. Customize its appearance and behavior in the Zendesk Widget settings.
1<script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=YOUR_ZENDESK_KEY"></script>Expected result: The Zendesk chat widget appears on all pages of your Bubble app.
Complete working example
1{2 "API Name": "Zendesk",3 "Authentication": "HTTP Basic Auth",4 "Username": "admin@company.com/token (Private)",5 "Password": "[api_token] (Private)",6 "Base URL": "https://yoursubdomain.zendesk.com/api/v2",7 "Calls": [8 {9 "Name": "Create Ticket",10 "Method": "POST",11 "URL": "/tickets.json",12 "Body": {"ticket": {"subject": "<subj>", "description": "<desc>", "requester": {"email": "<email>"}, "priority": "normal"}},13 "Use as": "Action"14 },15 {16 "Name": "Get Ticket",17 "Method": "GET",18 "URL": "/tickets/[ticket_id].json",19 "Use as": "Data"20 },21 {22 "Name": "List User Tickets",23 "Method": "GET",24 "URL": "/users/[user_id]/tickets/requested.json",25 "Use as": "Data"26 }27 ]28}Common mistakes when integrating Zendesk in Bubble.io: Step-by-Step Guide
Why it's a problem: Using the plain email as username instead of email/token format
How to avoid: Use the format: youremail@company.com/token as the username, with the API token as the password
Why it's a problem: Not storing Zendesk ticket IDs in Bubble
How to avoid: Save the Zendesk ticket ID from the creation response in a Bubble SupportTicket Data Type
Why it's a problem: Calling Zendesk API on every page load to check ticket status
How to avoid: Use a scheduled backend workflow to sync ticket status every 15-30 minutes instead
Best practices
- Store Zendesk ticket IDs in your Bubble database for status tracking
- Use scheduled backend workflows for status syncing instead of real-time API calls
- Embed the Zendesk Widget for quick access to chat and help center
- Include user context (email, account info) when creating tickets
- Mark Zendesk API credentials as Private in the API Connector
- Test with Zendesk sandbox environment before connecting production
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to integrate Zendesk with my Bubble.io app so users can submit support tickets from within the app and see their ticket status. I also want the Zendesk chat widget embedded. How do I set this up?
Set up the Zendesk API in the API Connector with basic auth. Create a support form that creates Zendesk tickets with the user's email and description. Store the ticket ID and display ticket status on a My Tickets page. Embed the Zendesk widget in the header.
Frequently asked questions
Do I need a paid Zendesk plan for API access?
Yes. API access requires a Zendesk plan that includes the API. Most paid plans (Suite Team and above) include API access. Check your plan features in Zendesk Admin.
Can I use Zendesk webhooks to push updates to Bubble?
Yes. Set up a Zendesk trigger that sends a webhook to a Bubble backend workflow endpoint whenever a ticket status changes. This provides real-time sync instead of polling.
Can the Zendesk Widget pre-fill user information?
Yes. Add JavaScript to the widget embed that sets the user's name and email from Bubble's Current User data, so they do not have to re-enter it.
What are Zendesk's API rate limits?
Zendesk allows 400-700 requests per minute depending on your plan. For most Bubble integrations, this is more than sufficient with scheduled syncing.
Can RapidDev help integrate Zendesk with Bubble?
Yes. RapidDev can set up the full Zendesk integration including ticket creation, status syncing, widget embedding, and webhook-based real-time updates for your Bubble app.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation