TutorialGravity Forms Zendesk Integration: Create Support Tickets Without Zapier

You can connect Gravity Forms to Zendesk without Zapier by using GravityWP API Connector and the Zendesk API. In our test, a Gravity Forms submission created a new Zendesk support ticket and saved the returned ticket ID, status, requester ID, and API URL back into the original Gravity Forms entry.

In this tutorial, you will build that same Gravity Forms Zendesk integration step by step. You will create a customer support form, connect your Zendesk account with OAuth 2.0, map Gravity Forms fields to Zendesk ticket fields, create a ticket automatically after form submission, and store selected response data from Zendesk.

By the end, your workflow will look like this:

Gravity Forms submission → GravityWP API Connector → Zendesk ticket → Zendesk ticket data saved back to Gravity Forms

We will also cover an issue we found during testing. Our first tickets were created successfully, but the Zendesk Type field remained empty. We fixed this by using separate choice values in Gravity Forms and the :value merge tag modifier.

This tutorial uses the exact configuration we tested rather than an example that exists only on paper.

What do you need for this Gravity Forms and Zendesk integration?

You need:

API Connector can send Gravity Forms data to external APIs and map values from an API response back into form fields. It also supports OAuth 2.0 Authorization Code connections, which is the authentication method we use here.

You do not need to create a Zap or write custom PHP for the workflow in this tutorial.

Step 1: Create the Gravity Forms support request form

Start by creating a new Gravity Forms form.

We named ours:

Zendesk Support Request Form

Add these customer-facing fields:

FieldGravity Forms field typePurpose
Customer NameNameZendesk requester name
Customer EmailEmailZendesk requester email
Ticket SubjectSingle Line TextTicket subject
ProductDrop DownRecords the GravityWP product
Issue TypeDrop DownSets the Zendesk ticket type
PriorityDrop DownSets ticket priority
Issue DescriptionParagraph TextCreates the ticket comment

We also created these fields for information returned by Zendesk:

FieldField type
Zendesk Ticket IDSingle Line Text
Zendesk Ticket StatusSingle Line Text
Zendesk Requester IDSingle Line Text
Zendesk Ticket API URLSingle Line Text
Zendesk Ticket ResponseParagraph Text

Set these five response fields to Administrative visibility. Visitors do not need to see them on the public support form.

The Product field is stored in the Gravity Forms entry in our tested workflow, but we did not map it to a Zendesk ticket field. This keeps the tutorial limited to the fields we actually tested.

How should you configure Issue Type?

Open the Issue Type Drop Down and enable Show Values.

Use:

Label shown to visitorValue
Questionquestion
Incidentincident
Problemproblem
Tasktask

Gravity Forms lets a choice have a user-facing label and a separate stored value. This is useful when an external integration needs a specific value while the visitor should see a friendlier label.

Zendesk accepts question, incident, problem, and task as ticket type values.

Gravity Forms Zendesk support request form with customer, ticket type, priority, and issue fields
The completed Zendesk Support Request Form used in our Gravity Forms and Zendesk integration test.

How should you configure Priority?

Enable Show Values for Priority as well:

LabelValue
Lowlow
Normalnormal
Highhigh
Urgenturgent

We used Normal as the default choice.

Zendesk’s ticket API uses these values for ticket priority.

You can leave Show Values disabled for Product because we are not sending that field to Zendesk in this workflow.

Gravity Forms Issue Type and Priority dropdowns with Zendesk-compatible stored values enabled
Enable Show Values so Gravity Forms can send Zendesk-compatible values such as question, normal, and urgent.

Step 2: Create a Zendesk OAuth client

Next, we need to let API Connector authenticate with Zendesk.

In the Zendesk interface we tested, we opened:

Support dropdown → Admin Center → Apps and integrations → APIs → OAuth clients

Then select Add OAuth client.

Zendesk uses OAuth clients to grant applications controlled access to an account. Redirect URLs must be absolute and normally use HTTPS.

We used settings similar to these:

Zendesk settingValue
NameGravityWP API Connector Test
DescriptionCreates Zendesk support tickets from Gravity Forms submissions using GravityWP API Connector
CompanyGravityWP
Identifiergravitywp_api_connector_test
Client kindConfidential
Redirect URLCopy from API Connector

Use Confidential for this server-side connection because API Connector can securely use the OAuth client secret. Zendesk supports confidential OAuth clients for integrations where credentials can be kept securely.

Zendesk OAuth client configured for GravityWP API Connector with confidential client and redirect URL
The Zendesk OAuth client uses a Confidential client type and the redirect URL supplied by GravityWP API Connector.

Where do you get the Redirect URL?

Do not guess it.

In WordPress, go to:

Forms → Settings → API Connector → Add New API Connection

Choose:

OAuth 2.0 (Authorization Code)

API Connector displays the Redirect URL for your WordPress installation. Copy that exact URL into Zendesk.

GravityWP requires the callback registered with the provider to match the API Connector Redirect URL.

It follows this pattern:

https://YOUR-DOMAIN.com/wp-json/gwpapiconnector/v1/oauth/callback

Save the OAuth client in Zendesk and copy the generated client secret somewhere secure.

Step 3: Connect Zendesk to GravityWP API Connector

Return to:

WordPress → Forms → Settings → API Connector

Select Add New API Connection.

We used:

SettingValue
API NameZendesk Support API
Slugzendesk-support-api
Base URLhttps://YOUR-SUBDOMAIN.zendesk.com/
Authentication methodOAuth 2.0 (Authorization Code)
Client IDYour Zendesk OAuth Identifier
Client SecretYour Zendesk OAuth Secret
Authorization URLhttps://YOUR-SUBDOMAIN.zendesk.com/oauth/authorizations/new
Token URLhttps://YOUR-SUBDOMAIN.zendesk.com/oauth/tokens
Scopetickets:write
PKCEDisabled in our test
GravityWP API Connector Zendesk OAuth 2.0 connection settings with authorization and token URLs
The Zendesk Support API connection configured in GravityWP API Connector with OAuth 2.0 Authorization Code.

Zendesk documents the authorization and token endpoints used by its OAuth authorization-code flow.

We used:

tickets:write

The Zendesk OAuth scope system allows access to be restricted by resource and action. A write scope permits operations such as POST requests, which we need to create a new ticket.

Save the API connection.

You should now see Zendesk Support API in your API Connections list with an Authorize button.

Click Authorize.

Zendesk opens a consent screen that shows what the application wants to access. In our test, it showed permission to:

Write all ticket data

Click Allow.

After Zendesk redirects you to WordPress, API Connector should show:

✓ Authorized

Your Gravity Forms site can now make authenticated Zendesk API requests.

Zendesk Support API authorized in GravityWP API Connector
The Zendesk Support API connection shows as Authorized after completing the OAuth consent flow.

Step 4: Create the Zendesk ticket feed

Open:

Forms → Zendesk Support Request Form → Settings → API Connector

Create a new feed named:

Create Zendesk Support Ticket

Configure:

SettingValue
API ConfigurationZendesk Support API
Request MethodPOST
Body formatJSON body
Endpoint URLapi/v2/tickets.json
Input typeRegular Field input
Gravity Forms Zendesk API Connector feed configured with POST request and JSON body
The Create Zendesk Support Ticket feed uses a POST request and JSON body through the authorized Zendesk API connection.

Zendesk provides a Tickets API for agents and administrators to create and manage tickets.

A POST request sends data to an API to create a new resource. In this case, the resource is a Zendesk ticket.

API Connector’s JSON body option lets you create nested JSON structures from field mappings rather than writing the complete request manually.

Leave the Headers section empty for this setup. The saved OAuth connection handles authentication.

Step 5: Map Gravity Forms data to Zendesk fields

Under Query String (GET) / Body Parameters (POST), add these mappings:

KeyGravity Forms value
ticket.subject{Ticket Subject:4}
ticket.comment.body{Issue Description:8}
ticket.requester.name{Customer Name (First):1.3} {Customer Name (Last):1.6}
ticket.requester.email{Customer Email:3}
ticket.type{Issue Type:6:value}
ticket.priority{Priority:7:value}
Gravity Forms fields mapped to Zendesk ticket JSON properties in GravityWP API Connector
Gravity Forms values are mapped to the Zendesk ticket subject, comment, requester, type, and priority properties.

Your field IDs may be different. Use the merge tags generated by your own Gravity Forms form.

These mappings produce a request with a structure similar to:

{
  "ticket": {
    "subject": "API Connector setup question",
    "comment": {
      "body": "I need help configuring an API Connector feed for my Gravity Forms website."
    },
    "requester": {
      "name": "Alex Morgan",
      "email": "customer@example.com"
    },
    "type": "question",
    "priority": "normal"
  }
}

The actual values change with every form submission.

Why do Issue Type and Priority use :value?

This detail came directly from our testing.

Our first Gravity Forms submissions created Zendesk tickets, but the Type field was empty.

The Zendesk API response showed:

"type": null

We first confirmed that the JSON path itself worked by sending the static value:

question

Zendesk then displayed Type: Question.

For the final dynamic setup, we changed the merge tag to:

{Issue Type:6:value}

We also used:

{Priority:7:value}

Our next test returned:

"type":"question"

and:

"priority":"normal"

Zendesk then showed both Question and Normal correctly in the ticket.

Gravity Forms documents the :value modifier for Drop Down fields specifically as a way to output the stored choice value instead of its label.

This is why we recommend using the value modifier for these Zendesk mappings.

Step 6: Save Zendesk response data in Gravity Forms

Creating the ticket is only part of this workflow.

API Connector can also map information returned by Zendesk into the original Gravity Forms entry.

Under Target Fields, use:

Gravity Forms target fieldResponse key
Zendesk Ticket IDticket/id
Zendesk Ticket Statusticket/status
Zendesk Requester IDticket/requester_id
Zendesk Ticket API URLticket/url
Zendesk ticket response fields mapped back to Gravity Forms with full API response storage enabled
API Connector maps the returned Zendesk ticket ID, status, requester ID, and API URL back to the Gravity Forms entry.

Set the API request trigger to:

On form submission

Then enable:

Store full response

Map it to:

Zendesk Ticket Response

GravityWP’s API Connector documentation confirms that Store Full Response can save the complete API response into a text field when the request runs on form submission. This is useful during testing and troubleshooting because you can inspect the actual JSON returned by the external API.

Save the feed.

Step 7: Submit a test support request

Now test the Gravity Forms Zendesk integration from the front end.

Our final test used:

FieldValue
Customer NameAlex Morgan
Ticket SubjectAPI Connector setup question
ProductAPI Connector
Issue TypeQuestion
PriorityNormal
Issue DescriptionI need help configuring an API Connector feed for my Gravity Forms website.

We used a test email address that we controlled.

Submit the form.

There is no separate Zap or manual ticket creation step. The API Connector feed runs after the Gravity Forms submission.

Step 8: Check the new Zendesk ticket

Open Zendesk and go to your ticket list.

Our final test created a new support ticket successfully.

Zendesk support ticket created from Gravity Forms via API with Question type and Normal priority
The Zendesk ticket created through the API includes the submitted requester, message, Question type, and Normal priority.

The Zendesk ticket showed:

  • Requester: Alex Morgan
  • Subject: API Connector setup question
  • Type: Question
  • Priority: Normal
  • Comment: I need help configuring an API Connector feed for my Gravity Forms website.

Zendesk also showed that the ticket arrived Via API.

This confirms that the submitted Gravity Forms data reached Zendesk through the authenticated API connection.

Step 9: Check the Gravity Forms entry

Return to:

Forms → Entries

Open the submission you just created.

In our final test, API Connector stored:

  • Zendesk Ticket ID
  • Zendesk Ticket Status
  • Zendesk Requester ID
  • Zendesk Ticket API URL
  • Full Zendesk Ticket Response

Our test ticket returned:

Status: open
Type: question
Priority: normal

The full response also contained the new Zendesk ticket URL and requester information.

This is not continuous two-way synchronization between Gravity Forms and Zendesk. The tested workflow sends data to Zendesk and then stores selected values from that API response back in the Gravity Forms entry.

If someone later changes the ticket inside Zendesk, this tutorial does not automatically sync that later change back to Gravity Forms.

Gravity Forms entry showing Zendesk ticket ID status requester ID API URL and response data
The original Gravity Forms entry stores the Zendesk ticket ID, status, requester ID, API URL, and returned response data.

What happened in our final test?

Here is the full tested workflow:

1. A customer submitted the Gravity Forms support request.

2. GravityWP API Connector sent an authenticated JSON POST request to Zendesk.

3. Zendesk created a new support ticket for the requester.

4. Zendesk received the ticket subject, description, requester details, Question type, and Normal priority.

5. Zendesk returned information about the new ticket.

6. API Connector saved the ticket ID, status, requester ID, API URL, and full JSON response in the original Gravity Forms entry.

Our Zendesk test account also sent email notifications to the requester after ticket creation. Those emails came from the triggers and notification behavior configured in our Zendesk account, so your own email behavior may differ.

Zendesk requester email notification sent after Gravity Forms support ticket creation
In our test account, Zendesk also emailed the requester after the support ticket was created.

How do you troubleshoot a Gravity Forms Zendesk integration?

The Zendesk ticket is created, but Type is empty

This happened during our own testing.

Make sure Show Values is enabled for the Gravity Forms Issue Type field and use values Zendesk accepts:

question
incident
problem
task

Then map the field using:

{Issue Type:FIELD_ID:value}

In our test, using :value made Zendesk correctly receive question.

Gravity Forms documents that the :value modifier outputs the choice value rather than the visible choice label.

API Connector says the Zendesk connection is not authorized

Check:

  • Zendesk subdomain
  • Client ID
  • Client Secret
  • Authorization URL
  • Token URL
  • Redirect URL
  • OAuth scope

The Redirect URL registered in Zendesk should match the URL displayed by API Connector.

Zendesk does not create a ticket

Check that your feed uses:

POST

and:

api/v2/tickets.json

Also check that the Zendesk OAuth connection still shows Authorized.

How can you see what Zendesk returned?

Enable Store full response and map it to a Paragraph Text or other suitable text field.

After submitting the form, open the Gravity Forms entry and inspect the stored JSON response.

GravityWP also provides a JSON response path parser that can help identify paths you can use for Target Field mappings.

The OAuth redirect fails

Copy the Redirect URL directly from your API Connector connection settings.

Do not manually change:

  • HTTP to HTTPS
  • The hostname
  • The callback path

OAuth providers require the registered callback to match the expected redirect URL.

Can you connect Gravity Forms to Zendesk without Zapier?

Yes.

The method in this tutorial connects Gravity Forms to Zendesk directly through the Zendesk API using GravityWP API Connector.

You do not need to build a Zap for this workflow.

API Connector is useful when you need more control over the request itself or when you want to map selected API response data back into Gravity Forms. If you are deciding between native add-ons, Webhooks, and API-based integrations, see our guide to Gravity Forms integration methods.

The best integration method still depends on the workflow you need. This tutorial focuses only on the API Connector setup we tested.

Proudly powered by WordPress