To track the effect that Chat agents have on improving sales or completing website based goals, you can set a URL-based goal (such as page views of a pricing page) that matches the URL exactly or contains a certain parameter in the URL.

Goals can be set up to capture conversions based on agent first-touch or last-touch attribution. The attribution period can be between 1 to 30 days.

Note: Accounts have a maximum limit of 5 active Goals. An error message "Goals limit exceeded" will appear if you exceed the active Goal limit.

JSON format

Goals are represented as JSON objects with the following properties:

Name Type Read-only Mandatory Description
attribution_model string false false Describes the attribution model associated with the goal. One of "first_touch", "last_touch"
attribution_period integer false false Describes the attribution period in days for this goal. Range between "1" to "30"
description string false false The description of the goal
enabled integer false false Describes whether the goal is enabled
id integer true false The ID of the goal
name string false false The name of the goal
settings object false false The settings for the goal. Contains the conditions array. See Conditions

Conditions

The settings attribute contains a conditions array. The conditions array contains objects which represent individual conditions to be matched. If any single condition is met, the goal is considered to be fulfilled. Each object has the following attributes.

Name Type Read-only Description
type string no Describes the type of condition. Currently supports only "url"
operator string no Describes the operator used to compare if a goal is fulfilled. One of "equals", "contains"
value string no Describes the actual value to compare if a goal is fulfilled. If operator is specified as "equals", value should start with "http://" or "https://"

Example

{  "attribution_model": "first_touch",  "attribution_period": 30,  "description": "A sample goal",  "enabled": 1,  "id": 1,  "name": "Goal 1",  "settings": {    "conditions": [      {        "operator": "equals",        "type": "url",        "value": "http://cart.com/"      },      {        "operator": "contains",        "type": "url",        "value": "cart"      }    ]  }}

List Goals

  • GET /api/v2/goals

This lists all the goals for your account.

Allowed for

  • Administrator

Code Samples

curl
curl https://www.zopim.com/api/v2/goals \  -v -u {email_address}:{password}
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/goals"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/goals")		.newBuilder();
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/api/v2/goals',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/api/v2/goals"headers = {	"Content-Type": "application/json",}
response = requests.request(	"GET",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/api/v2/goals")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
[  {    "attribution_model": "first_touch",    "attribution_period": 30,    "description": "A sample goal",    "enabled": 1,    "id": 1,    "name": "Goal 1",    "settings": {      "conditions": [        {          "operator": "equals",          "type": "url",          "value": "http://cart.com/"        },        {          "operator": "contains",          "type": "url",          "value": "cart"        }      ]    }  },  {    "attribution_model": "last_touch",    "attribution_period": 15,    "description": "A sample goal",    "id": 2,    "name": "Goal 2",    "settings": {      "conditions": [        {          "operator": "equals",          "type": "url",          "value": "http://zopim.com/"        },        {          "operator": "contains",          "type": "url",          "value": "zopim"        }      ]    }  }]

Show Goal

  • GET /api/v2/goals/{goal_id}

Allowed for

  • Administrator

Parameters

Name Type In Required Description
goal_id integer Path true The ID of the goal

Code Samples

curl
curl https://www.zopim.com/api/v2/goals/{goal_id} \  -v -u {email_address}:{password}
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/goals/1"	method := "GET"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/goals/1")		.newBuilder();
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("GET", null)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'GET',  url: 'https://support.zendesk.com/api/v2/goals/1',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/api/v2/goals/1"headers = {	"Content-Type": "application/json",}
response = requests.request(	"GET",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/api/v2/goals/1")request = Net::HTTP::Get.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "attribution_model": "first_touch",  "attribution_period": 30,  "description": "A sample goal",  "enabled": 1,  "id": 1,  "name": "Goal 1",  "settings": {    "conditions": [      {        "operator": "equals",        "type": "url",        "value": "http://cart.com/"      },      {        "operator": "contains",        "type": "url",        "value": "cart"      }    ]  }}

Create Goal

  • POST /api/v2/goals

Allowed for

  • Administrator

Code Samples

curl
curl https://www.zopim.com/api/v2/goals \  -d '{        "name" : "Goal 3",        "description" : "A new goal",        "enabled" : 1,        "attribution_model" : "first_touch",        "attribution_period": 15,        "settings" : {          "conditions": [            {              "operator": "equals",              "type": "url",              "value": "http://mysite.com/"            }          ]        }      }' \  -v -u {email_address}:{password} \  -X POST -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/goals"	method := "POST"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/goals")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""""");
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("POST", body)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'POST',  url: 'https://support.zendesk.com/api/v2/goals',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/api/v2/goals"headers = {	"Content-Type": "application/json",}
response = requests.request(	"POST",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/api/v2/goals")request = Net::HTTP::Post.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

201 Created
// Status 201 Created
{  "attribution_model": "first_touch",  "attribution_period": 30,  "description": "A sample goal",  "enabled": 1,  "id": 1,  "name": "Goal 1",  "settings": {    "conditions": [      {        "operator": "equals",        "type": "url",        "value": "http://cart.com/"      },      {        "operator": "contains",        "type": "url",        "value": "cart"      }    ]  }}

Update Goal

  • PUT /api/v2/goals/{goal_id}

Allowed for

  • Administrator

Parameters

Name Type In Required Description
goal_id integer Path true The ID of the goal

Code Samples

curl
curl https://www.zopim.com/api/v2/goals/3 \  -d '{"name": "Good goal"}' \  -v -u {email_address}:{password}  -X PUT -H "Content-Type: application/json"
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/goals/1"	method := "PUT"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/goals/1")		.newBuilder();RequestBody body = RequestBody.create(MediaType.parse("application/json"),		"""""");
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("PUT", body)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'PUT',  url: 'https://support.zendesk.com/api/v2/goals/1',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/api/v2/goals/1"headers = {	"Content-Type": "application/json",}
response = requests.request(	"PUT",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/api/v2/goals/1")request = Net::HTTP::Put.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

200 OK
// Status 200 OK
{  "attribution_model": "first_touch",  "attribution_period": 15,  "description": "A mew goal",  "enabled": 1,  "id": 3,  "name": "Good goal",  "settings": {    "conditions": [      {        "operator": "equals",        "type": "url",        "value": "http://mysite.com/"      }    ]  }}

Delete Goal

  • DELETE /api/v2/goals/{goal_id}

Allowed for

  • Administrator

Parameters

Name Type In Required Description
goal_id integer Path true The ID of the goal

Code Samples

curl
curl https://www.zopim.com/api/v2/goals/3 \  -v -u {email_address}:{password} -X DELETE
Go
import (	"fmt"	"io"	"net/http")
func main() {	url := "https://support.zendesk.com/api/v2/goals/1"	method := "DELETE"	req, err := http.NewRequest(method, url, nil)
	if err != nil {		fmt.Println(err)		return	}	req.Header.Add("Content-Type", "application/json")
	client := &http.Client {}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return	}	defer res.Body.Close()
	body, err := io.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return	}	fmt.Println(string(body))}
Java
import com.squareup.okhttp.*;OkHttpClient client = new OkHttpClient();HttpUrl.Builder urlBuilder = HttpUrl.parse("https://support.zendesk.com/api/v2/goals/1")		.newBuilder();
Request request = new Request.Builder()		.url(urlBuilder.build())		.method("DELETE", null)		.addHeader("Content-Type", "application/json")		.build();Response response = client.newCall(request).execute();
Nodejs
var axios = require('axios');
var config = {  method: 'DELETE',  url: 'https://support.zendesk.com/api/v2/goals/1',  headers: {	'Content-Type': 'application/json',  },};
axios(config).then(function (response) {  console.log(JSON.stringify(response.data));}).catch(function (error) {  console.log(error);});
Python
import requests
url = "https://support.zendesk.com/api/v2/goals/1"headers = {	"Content-Type": "application/json",}
response = requests.request(	"DELETE",	url,	headers=headers)
print(response.text)
Ruby
require "net/http"uri = URI("https://support.zendesk.com/api/v2/goals/1")request = Net::HTTP::Delete.new(uri, "Content-Type": "application/json")response = Net::HTTP.start uri.hostname, uri.port, use_ssl: true do |http|	http.request(request)end

Example response(s)

204 No Content
// Status 204 No Content
null