Analyze Call with AI
curl --request POST \
--url https://app.luly.ai/api/v1/calls/{call_id}/analyze \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"goal": "<string>",
"questions": [
[
"<string>"
]
]
}
'import requests
url = "https://app.luly.ai/api/v1/calls/{call_id}/analyze"
payload = {
"goal": "<string>",
"questions": [["<string>"]]
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({goal: '<string>', questions: [['<string>']]})
};
fetch('https://app.luly.ai/api/v1/calls/{call_id}/analyze', 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://app.luly.ai/api/v1/calls/{call_id}/analyze",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'goal' => '<string>',
'questions' => [
[
'<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.luly.ai/api/v1/calls/{call_id}/analyze"
payload := strings.NewReader("{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.luly.ai/api/v1/calls/{call_id}/analyze")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.luly.ai/api/v1/calls/{call_id}/analyze")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Successfully analyzed call",
"answers": [
"human",
"Customer found the product sturdy and reliable",
"A bit heavy",
true
]
}
Calls
Analyze Call with AI
Analyzes a call of calls based using questions and goals.
POST
/
v1
/
calls
/
{call_id}
/
analyze
Analyze Call with AI
curl --request POST \
--url https://app.luly.ai/api/v1/calls/{call_id}/analyze \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"goal": "<string>",
"questions": [
[
"<string>"
]
]
}
'import requests
url = "https://app.luly.ai/api/v1/calls/{call_id}/analyze"
payload = {
"goal": "<string>",
"questions": [["<string>"]]
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({goal: '<string>', questions: [['<string>']]})
};
fetch('https://app.luly.ai/api/v1/calls/{call_id}/analyze', 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://app.luly.ai/api/v1/calls/{call_id}/analyze",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'goal' => '<string>',
'questions' => [
[
'<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.luly.ai/api/v1/calls/{call_id}/analyze"
payload := strings.NewReader("{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.luly.ai/api/v1/calls/{call_id}/analyze")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.luly.ai/api/v1/calls/{call_id}/analyze")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"goal\": \"<string>\",\n \"questions\": [\n [\n \"<string>\"\n ]\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "Successfully analyzed call",
"answers": [
"human",
"Customer found the product sturdy and reliable",
"A bit heavy",
true
]
}
Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The unique identifier for the call to be analyzed.
Request Body
string
required
This is the overall purpose of the call. Provides context for the analysis to guide how the questions/transcripts are interpreted.
string[][]
required
An array of questions to be analyzed for the call.Each question should be an array with two elements: the question text and the expected answer type (e.g., “string”, “boolean”).Fairly flexible in terms of the expected answer type, and unanswerable questions will default to
null.Examples: "questions": [
["Who answered the call?", "human or voicemail"],
["Positive feedback about the product: ", "string"],
["Negative feedback about the product: ", "string"],
["Customer confirmed they were satisfied", "boolean"]
]
Response
string
Can be
success or error.string
Confirms the request was successful, or provides an error message if the request failed.
array
Contains the analyzed answers for the call in an array.
number
Token-based price for the analysis request.As a rough estimate, the base cost is
0.003 credits with an additional 0.0015 credits per call in the call.Longer call transcripts and higher numbers of questions can increase the cost, however the cost scales very effectively with calls vs. individual calls.{
"status": "success",
"message": "Successfully analyzed call",
"answers": [
"human",
"Customer found the product sturdy and reliable",
"A bit heavy",
true
]
}