cURL
curl --request GET \
--url https://client-api.salesfinity.co/v1/scored-calls \
--header 'x-api-key: <api-key>'import requests
url = "https://client-api.salesfinity.co/v1/scored-calls"
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/scored-calls', 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/scored-calls",
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/scored-calls"
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/scored-calls")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v1/scored-calls")
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": "<string>",
"insight": {
"total_score": 123,
"lead": {
"function": "<string>",
"tech_stack_mentioned": [
"<string>"
],
"current_vendor": "<string>",
"fit_score": 123,
"is_decision_maker": true,
"is_correct_persona": true,
"pain_point_resonated": true,
"is_qualified_meeting": true,
"is_likely_to_buy": true,
"prospect_lifecycle_stage": [
"<string>"
]
},
"messaging": {
"value_prop_resonated": [
"<string>"
],
"objection_outcome": [
"<string>"
],
"emotional_triggers": [
"<string>"
],
"recommendation_to_nail_messaging": "<string>"
},
"targeting_feedback": {
"persona_fit": "<string>",
"industry_fit": "<string>",
"persona_seniority": "<string>",
"title_relevance": "<string>",
"data_quality_issue": [
"<string>"
],
"future_follow_up_needed": true,
"follow_up_reason": [
"<string>"
]
},
"metadata": {
"duration_sec": 123,
"asr_confidence_avg": 123,
"audio_features_available": true,
"talk_listen_ratio_rep": 123,
"total_questions": 123,
"open_question_ratio": 123,
"interruptions_by_rep": 123,
"core_pitch_duration_sec": 123,
"estimated_wpm_rep": 123,
"objections_detected": [
"<string>"
]
},
"facets": {
"intro": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"discovery": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"pitch": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"tonality": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"objection_handling": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"cta": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
}
},
"gaps": {
"skill": 123,
"playbook": 123,
"rationale": "<string>"
},
"coaching": {
"top_wins": [
"<string>"
],
"top_opportunities": [
"<string>"
],
"suggested_drills": [
{
"facet": "<string>",
"assignment": "<string>"
}
]
}
},
"type": "call",
"call_log": {
"_id": "<string>",
"contact": {},
"recording_url": "<string>",
"duration": 123
},
"user": {
"_id": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"total": 123,
"page": 123,
"limit": 123,
"pages": 123
}
}Scored Calls
Retrieve Scored Calls
Retrieves a paginated list of AI-scored calls with detailed insights, scoring facets, lead qualification, and coaching recommendations.
GET
/
v1
/
scored-calls
cURL
curl --request GET \
--url https://client-api.salesfinity.co/v1/scored-calls \
--header 'x-api-key: <api-key>'import requests
url = "https://client-api.salesfinity.co/v1/scored-calls"
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/scored-calls', 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/scored-calls",
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/scored-calls"
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/scored-calls")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v1/scored-calls")
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": "<string>",
"insight": {
"total_score": 123,
"lead": {
"function": "<string>",
"tech_stack_mentioned": [
"<string>"
],
"current_vendor": "<string>",
"fit_score": 123,
"is_decision_maker": true,
"is_correct_persona": true,
"pain_point_resonated": true,
"is_qualified_meeting": true,
"is_likely_to_buy": true,
"prospect_lifecycle_stage": [
"<string>"
]
},
"messaging": {
"value_prop_resonated": [
"<string>"
],
"objection_outcome": [
"<string>"
],
"emotional_triggers": [
"<string>"
],
"recommendation_to_nail_messaging": "<string>"
},
"targeting_feedback": {
"persona_fit": "<string>",
"industry_fit": "<string>",
"persona_seniority": "<string>",
"title_relevance": "<string>",
"data_quality_issue": [
"<string>"
],
"future_follow_up_needed": true,
"follow_up_reason": [
"<string>"
]
},
"metadata": {
"duration_sec": 123,
"asr_confidence_avg": 123,
"audio_features_available": true,
"talk_listen_ratio_rep": 123,
"total_questions": 123,
"open_question_ratio": 123,
"interruptions_by_rep": 123,
"core_pitch_duration_sec": 123,
"estimated_wpm_rep": 123,
"objections_detected": [
"<string>"
]
},
"facets": {
"intro": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"discovery": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"pitch": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"tonality": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"objection_handling": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
},
"cta": {
"score": 123,
"weight_pct": 123,
"explanation": "<string>",
"insufficient_evidence": true,
"evidence": [
{
"start_sec": 123,
"end_sec": 123,
"text": "<string>"
}
]
}
},
"gaps": {
"skill": 123,
"playbook": 123,
"rationale": "<string>"
},
"coaching": {
"top_wins": [
"<string>"
],
"top_opportunities": [
"<string>"
],
"suggested_drills": [
{
"facet": "<string>",
"assignment": "<string>"
}
]
}
},
"type": "call",
"call_log": {
"_id": "<string>",
"contact": {},
"recording_url": "<string>",
"duration": 123
},
"user": {
"_id": "<string>",
"email": "<string>",
"first_name": "<string>",
"last_name": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"pagination": {
"total": 123,
"page": 123,
"limit": 123,
"pages": 123
}
}Retrieves a paginated list of AI-scored calls. Each scored call includes detailed insights across six scoring facets (intro, discovery, pitch, tonality, objection handling, CTA), lead qualification data, coaching recommendations, and an overall score.
Filter by date range:
Filter by score range:
Filter by user and date:
Query Parameters
Pagination & Sorting
- limit (optional, number): Number of items per page (default: 10, max: 100)
- page (optional, number): The current page number to retrieve (default: 1)
- sort (optional, string): Sort field with optional
-prefix for descending order (default:-createdAt)
Filters
- start_date (optional, ISO 8601 date): Start of date range
- end_date (optional, ISO 8601 date): End of date range
- min_score (optional, number): Minimum total score (0-100)
- max_score (optional, number): Maximum total score (0-100)
- user_id (optional, string): Filter by user ID
Example Requests
Basic request:GET /v1/scored-calls?page=1&limit=10
GET /v1/scored-calls?start_date=2024-01-01&end_date=2024-01-31
GET /v1/scored-calls?min_score=70&max_score=100
GET /v1/scored-calls?user_id=507f1f77bcf86cd799439033&start_date=2024-01-01&end_date=2024-01-31
Response
Returns a JSON object containing the list of scored calls with pagination metadata.{
"data": [
{
"_id": "507f1f77bcf86cd799439011",
"insight": {
"total_score": 78,
"lead": {
"function": "Sales",
"tech_stack_mentioned": ["Salesforce", "Outreach"],
"current_vendor": "Competitor Inc",
"fit_score": 85,
"is_decision_maker": true,
"is_correct_persona": true,
"pain_point_resonated": true,
"is_qualified_meeting": true,
"is_likely_to_buy": false,
"prospect_lifecycle_stage": ["solution_aware"]
},
"messaging": {
"value_prop_resonated": ["efficiency", "time_savings"],
"objection_outcome": ["handled"],
"emotional_triggers": ["frustration_with_current_tool"],
"recommendation_to_nail_messaging": "Lead with ROI data specific to their industry"
},
"targeting_feedback": {
"persona_fit": "excellent",
"industry_fit": "good",
"persona_seniority": "vp",
"title_relevance": "good",
"data_quality_issue": [],
"future_follow_up_needed": true,
"follow_up_reason": ["renewal"]
},
"metadata": {
"duration_sec": 245,
"asr_confidence_avg": 0.92,
"audio_features_available": true,
"talk_listen_ratio_rep": 0.45,
"total_questions": 8,
"open_question_ratio": 0.625,
"interruptions_by_rep": 1,
"core_pitch_duration_sec": 35,
"estimated_wpm_rep": 155,
"objections_detected": ["budget"]
},
"facets": {
"intro": {
"score": 85,
"weight_pct": 10,
"explanation": "Strong permission-based opener",
"insufficient_evidence": false,
"checks": {
"permission_opener_used": true,
"opener_length_sec": 12,
"time_to_opener_sec": 3,
"improvement_recommendation": "Consider a more personalized opener"
}
},
"discovery": {
"score": 72,
"weight_pct": 25,
"explanation": "Good question quality but missed timing topic",
"insufficient_evidence": false,
"metrics": {
"total_questions": 8,
"open_question_ratio": 0.625,
"improvement_recommendation": "Ask about timeline and decision process",
"topic_coverage": ["pain", "current_tools"]
}
},
"pitch": {
"score": 80,
"weight_pct": 20,
"explanation": "Well-tailored pitch to discovery findings",
"insufficient_evidence": false,
"metrics": {
"core_pitch_duration_sec": 35,
"tailored_to_discovery": true,
"improvement_recommendation": "Include a customer success story",
"outcome_keywords": ["efficiency", "save_time"]
}
},
"tonality": {
"score": 75,
"weight_pct": 15,
"explanation": "Good pace, minor filler word usage",
"insufficient_evidence": false,
"metrics": {
"estimated_wpm": 155,
"interruptions_by_rep": 1,
"filler_density_per_min": 2.1,
"improvement_recommendation": "Reduce filler words"
}
},
"objection_handling": {
"score": 70,
"weight_pct": 15,
"explanation": "Addressed budget objection but no follow-up probe",
"insufficient_evidence": false,
"metrics": {
"objections_detected": ["budget"],
"followup_probe_present": false,
"resolution_check_present": true,
"improvement_recommendation": "Add a follow-up question after handling objections"
}
},
"cta": {
"score": 82,
"weight_pct": 15,
"explanation": "Clear CTA with specific time offered",
"insufficient_evidence": false,
"metrics": {
"cta_attempted": true,
"cta_type": "meeting",
"specific_time_offered": true,
"improvement_recommendation": "Confirm next steps via email",
"outcome": "accepted"
}
}
},
"gaps": {
"skill": 25,
"playbook": 15,
"rationale": "Discovery needs more depth on timing and decision process"
},
"coaching": {
"top_wins": ["Strong opener", "Good pitch tailoring"],
"top_opportunities": ["Deeper discovery", "Objection follow-up probes"],
"suggested_drills": [
{
"facet": "discovery",
"assignment": "Practice SPIN questions for uncovering timeline"
}
]
}
},
"call_log": {
"_id": "507f1f77bcf86cd799439022",
"contact": {
"first_name": "John",
"last_name": "Doe",
"company": "Acme Corp"
},
"recording_url": "https://recordings.example.com/call_abc123.mp3",
"duration": 245
},
"user": {
"_id": "507f1f77bcf86cd799439033",
"first_name": "Jane",
"last_name": "Smith",
"email": "[email protected]"
},
"type": "call",
"createdAt": "2024-01-15T14:33:00.000Z",
"updatedAt": "2024-01-15T14:33:00.000Z"
}
],
"pagination": {
"total": 42,
"page": 1,
"limit": 10,
"pages": 5
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
_id | string | Unique identifier for the scored call |
insight | object | Full scoring insight (see below) |
call_log | object | Associated call log with contact, recording_url, and duration |
user | object | User who made the call |
type | string | Scoring type (call) |
createdAt | date | Record creation time |
updatedAt | date | Record last update time |
Insight Object
| Field | Type | Description |
|---|---|---|
total_score | number | Overall call score (0-100) |
lead | object | Lead qualification data (fit_score, decision_maker, lifecycle stage) |
messaging | object | Messaging effectiveness (value props, objection outcomes, emotional triggers) |
targeting_feedback | object | Persona and industry fit assessment |
metadata | object | Call characteristics (duration, talk ratio, questions, speech rate) |
facets | object | Six scoring categories with individual scores and evidence |
gaps | object | Skill and playbook gap scores with rationale |
coaching | object | Top wins, opportunities, and suggested drills |
Scoring Facets
| Facet | Weight | Description |
|---|---|---|
intro | 10% | Permission opener usage and effectiveness |
discovery | 25% | Question quality, open question ratio, topic coverage |
pitch | 20% | Pitch duration, tailoring to discovery, outcome keywords |
tonality | 15% | Speech rate, interruptions, filler word density |
objection_handling | 15% | Objection detection, follow-up probes, resolution |
cta | 15% | CTA attempt, type, specificity, and outcome |
Authorizations
Query Parameters
Page number
Required range:
x >= 1Items per page
Required range:
1 <= x <= 100Sort field(s). Prefix with - for descending. Default: -createdAt
Filter by start date (ISO 8601)
Filter by end date (ISO 8601)
Minimum total score
Required range:
0 <= x <= 100Maximum total score
Required range:
0 <= x <= 100Filter by user ID
⌘I