curl --request GET \
--url https://client-api.salesfinity.co/v1/dispositions \
--header 'x-api-key: <api-key>'import requests
url = "https://client-api.salesfinity.co/v1/dispositions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://client-api.salesfinity.co/v1/dispositions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://client-api.salesfinity.co/v1/dispositions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://client-api.salesfinity.co/v1/dispositions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://client-api.salesfinity.co/v1/dispositions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v1/dispositions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"id": 1,
"name": "Answered - Meeting Set",
"is_custom": false,
"is_required": true,
"category": "positive"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0d3",
"id": 3,
"name": "Answered - Not Interested",
"is_custom": false,
"is_required": false,
"category": "negative"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0f2",
"id": 3,
"name": "Not interested - using a competitor",
"is_custom": true,
"is_required": false,
"category": "negative"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0da",
"id": 10,
"name": "No Answer",
"is_custom": false,
"is_required": true,
"category": "not_answered"
}
]
}{
"message": [
"category must be one of the following values: positive, negative, neutral, not_answered, cancelled"
],
"error": "Bad Request",
"statusCode": 400,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Rate limit of 300 requests per minute exceeded. Retry in 12s.",
"error": "Too Many Requests",
"statusCode": 429,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}List dispositions
Returns every disposition the team can log a call with, default and custom, sorted by id. Read-only and not paginated.
The 14 defaults have fixed IDs, 1 to 14, and cannot be deleted. IDs 2 to 9 can be renamed, so match on id rather than name. A custom disposition is created as a variant of one of the defaults with IDs 2 to 9 and takes that default’s id and category, so id is not unique across the list; _id is.
Calls store the disposition’s id in disposition.internal_id. Filtering call logs by filters[disposition_ids][] or the analytics endpoints by disposition_ids therefore also matches calls logged with that default’s custom variants.
curl --request GET \
--url https://client-api.salesfinity.co/v1/dispositions \
--header 'x-api-key: <api-key>'import requests
url = "https://client-api.salesfinity.co/v1/dispositions"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://client-api.salesfinity.co/v1/dispositions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://client-api.salesfinity.co/v1/dispositions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://client-api.salesfinity.co/v1/dispositions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://client-api.salesfinity.co/v1/dispositions")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v1/dispositions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"id": 1,
"name": "Answered - Meeting Set",
"is_custom": false,
"is_required": true,
"category": "positive"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0d3",
"id": 3,
"name": "Answered - Not Interested",
"is_custom": false,
"is_required": false,
"category": "negative"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0f2",
"id": 3,
"name": "Not interested - using a competitor",
"is_custom": true,
"is_required": false,
"category": "negative"
},
{
"_id": "66f1a2b3c4d5e6f7a8b9c0da",
"id": 10,
"name": "No Answer",
"is_custom": false,
"is_required": true,
"category": "not_answered"
}
]
}{
"message": [
"category must be one of the following values: positive, negative, neutral, not_answered, cancelled"
],
"error": "Bad Request",
"statusCode": 400,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Rate limit of 300 requests per minute exceeded. Retry in 12s.",
"error": "Too Many Requests",
"statusCode": 429,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500,
"request_id": "0f6d3c52-9f3e-4c1a-a4b8-2b1f7e5d9c10"
}id of a disposition is what call logs
store in disposition.internal_id, and what the call-log and analytics filters take.
Default dispositions
Every team has these 14. Their IDs never change. IDs 2 to 9 can be renamed by the team, so match onid rather than name. The names below are the defaults.
| ID | Name | Category | is_required |
|---|---|---|---|
| 1 | Answered - Meeting Set | positive | true |
| 2 | Answered - No Longer with Company | neutral | false |
| 3 | Answered - Not Interested | negative | false |
| 4 | Answered - Referral | positive | false |
| 5 | Answered - Wrong Contact | neutral | false |
| 6 | Answered - Call back later | positive | false |
| 7 | Answered - Reach out in 6 months | positive | false |
| 8 | Answered - Send an email | positive | false |
| 9 | Answered - Do not call again | negative | false |
| 10 | No Answer | not_answered | true |
| 11 | Left Voicemail | not_answered | true |
| 12 | Gatekeeper | not_answered | true |
| 13 | Bad Number | not_answered | true |
| 14 | Cancelled | cancelled | true |
Custom dispositions share an ID
A custom disposition is created as a variant of one of the defaults with IDs 2 to 9. It takes that default’sid and category, so two entries can have the same id. Use _id when you need a
unique key.
Because calls store the shared id, filtering by an ID also returns calls logged with its custom
variants. For example, filters[disposition_ids][]=3 on
List call logs returns calls marked “Answered - Not Interested”
and calls marked with any custom disposition based on it.
Examples
# Only the custom dispositions
curl 'https://client-api.salesfinity.co/v1/dispositions?is_custom=true' \
--header 'x-api-key: YOUR_API_KEY'
# Only the positive outcomes
curl 'https://client-api.salesfinity.co/v1/dispositions?category=positive' \
--header 'x-api-key: YOUR_API_KEY'
is_custom is true only for the exact value true. Any other value, including false, returns
the defaults.Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.
Query Parameters
true returns only custom dispositions. Any other value, including false, returns only the defaults. Omit it to get both.
Only dispositions in this category. Among the defaults, positive is IDs 1, 4, 6, 7 and 8; negative is 3 and 9; neutral is 2 and 5; not_answered is 10 to 13; cancelled is 14. A custom disposition is in the category of the default it is based on.
positive, negative, neutral, not_answered, cancelled Response
The team's dispositions, sorted by id.
Show child attributes
Show child attributes