curl --request GET \
--url https://api.vollna.com/v1/insights/reply-diagnosis \
--header 'X-API-TOKEN: <api-key>'import requests
url = "https://api.vollna.com/v1/insights/reply-diagnosis"
headers = {"X-API-TOKEN": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-TOKEN': '<api-key>'}};
fetch('https://api.vollna.com/v1/insights/reply-diagnosis', 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://api.vollna.com/v1/insights/reply-diagnosis",
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-TOKEN: <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://api.vollna.com/v1/insights/reply-diagnosis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-TOKEN", "<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://api.vollna.com/v1/insights/reply-diagnosis")
.header("X-API-TOKEN", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vollna.com/v1/insights/reply-diagnosis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-TOKEN"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"scope": {
"organizationId": 123,
"templateId": 123,
"filterId": 123,
"dateRange": "<string>",
"from": "2023-12-25",
"to": "2023-12-25"
},
"counted": "<string>",
"locked": true,
"reason": "<string>",
"funnel": {
"sent": 123,
"viewed": 123,
"replied": 123,
"hired": 123,
"viewRate": 123,
"replyRate": 123,
"replyGivenView": 123
},
"stage": "insufficient",
"reference": {
"viewRate": 123,
"replyGivenView": 123,
"source": "niche"
},
"ghost": {
"ignored": 123,
"withActivityData": 123,
"coverage": 123,
"settled": 123,
"noInterviewShare": 123
},
"competition": {
"yourMedianApplicantsDay1": 123,
"jobsWithDay1Reading": 123,
"nicheAvgApplicants": 123,
"yourAvgPosition": 123,
"marketAvgPosition": 123,
"yourAvgMinutesToBid": 123,
"marketAvgMinutesToBid": 123
},
"benchmark": {},
"levers": {
"speed": {},
"targeting": {},
"boost": {},
"letter": {}
},
"causes": [
{
"cause": "late_bids",
"label": "<string>",
"repliesLost": 123,
"evidence": {},
"fix": {
"action": "<string>",
"tool": "<string>",
"templateIds": [
123
]
}
}
],
"dataQuality": {
"sent": 123,
"withActivityData": 123,
"activityCoverage": 123,
"benchmarkSufficient": true
},
"verdict": "<string>",
"lockedProfiles": [
{}
]
}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}Diagnose reply rate
Answers “why do I get no replies?” with a verdict computed on the server. Returns the funnel, the stage where proposals get lost, how many silent clients interviewed nobody, the competition, the niche benchmark, and the causes ranked by replies lost. Counts cold proposals only: invitations and proposals sent on a trial are left out. Counts against the daily diagnose cap
curl --request GET \
--url https://api.vollna.com/v1/insights/reply-diagnosis \
--header 'X-API-TOKEN: <api-key>'import requests
url = "https://api.vollna.com/v1/insights/reply-diagnosis"
headers = {"X-API-TOKEN": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-TOKEN': '<api-key>'}};
fetch('https://api.vollna.com/v1/insights/reply-diagnosis', 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://api.vollna.com/v1/insights/reply-diagnosis",
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-TOKEN: <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://api.vollna.com/v1/insights/reply-diagnosis"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-TOKEN", "<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://api.vollna.com/v1/insights/reply-diagnosis")
.header("X-API-TOKEN", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vollna.com/v1/insights/reply-diagnosis")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-TOKEN"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"scope": {
"organizationId": 123,
"templateId": 123,
"filterId": 123,
"dateRange": "<string>",
"from": "2023-12-25",
"to": "2023-12-25"
},
"counted": "<string>",
"locked": true,
"reason": "<string>",
"funnel": {
"sent": 123,
"viewed": 123,
"replied": 123,
"hired": 123,
"viewRate": 123,
"replyRate": 123,
"replyGivenView": 123
},
"stage": "insufficient",
"reference": {
"viewRate": 123,
"replyGivenView": 123,
"source": "niche"
},
"ghost": {
"ignored": 123,
"withActivityData": 123,
"coverage": 123,
"settled": 123,
"noInterviewShare": 123
},
"competition": {
"yourMedianApplicantsDay1": 123,
"jobsWithDay1Reading": 123,
"nicheAvgApplicants": 123,
"yourAvgPosition": 123,
"marketAvgPosition": 123,
"yourAvgMinutesToBid": 123,
"marketAvgMinutesToBid": 123
},
"benchmark": {},
"levers": {
"speed": {},
"targeting": {},
"boost": {},
"letter": {}
},
"causes": [
{
"cause": "late_bids",
"label": "<string>",
"repliesLost": 123,
"evidence": {},
"fix": {
"action": "<string>",
"tool": "<string>",
"templateIds": [
123
]
}
}
],
"dataQuality": {
"sent": 123,
"withActivityData": 123,
"activityCoverage": 123,
"benchmarkSufficient": true
},
"verdict": "<string>",
"lockedProfiles": [
{}
]
}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}{
"error": "Validation failed",
"message": "<string>",
"fields": {}
}Authorizations
API token for authentication
Query Parameters
One Upwork profile. Every visible profile when left out
x >= 1A preset: today, yesterday, last_7_days, last_week, last_4_weeks, last_30_days, last_month, last_3_months, last_90_days, last_12_months, month_to_date, quarter_to_date, year_to_date or all_time. Or a custom range as YYYY-MM-DD_YYYY-MM-DD. Read in the team owner's time zone
Only proposals sent with this proposal template
x >= 1Only proposals written from this filter or sent by an auto-bidder on it
x >= 1Response
Successful operation
Show child attributes
Show child attributes
Was this page helpful?