Log a call
Logs a call outcome for a contact, optionally associating a disposition, sentiment, call script, duration, and the task it was made from.
curl --request POST \
--url https://api.seamless.ai/api/client/v2/calls/log \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contactId": 123456,
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"callScript": "Introductory outreach script",
"durationMs": 120000,
"calledAt": "2026-06-24T15:30:00.000Z",
"taskId": 9876
}
'import requests
url = "https://api.seamless.ai/api/client/v2/calls/log"
payload = {
"contactId": 123456,
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"callScript": "Introductory outreach script",
"durationMs": 120000,
"calledAt": "2026-06-24T15:30:00.000Z",
"taskId": 9876
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contactId: 123456,
toNumber: '+15551234567',
fromNumber: '+15557654321',
callDispositionId: 10,
callSentimentId: 5,
callScript: 'Introductory outreach script',
durationMs: 120000,
calledAt: '2026-06-24T15:30:00.000Z',
taskId: 9876
})
};
fetch('https://api.seamless.ai/api/client/v2/calls/log', 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.seamless.ai/api/client/v2/calls/log",
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([
'contactId' => 123456,
'toNumber' => '+15551234567',
'fromNumber' => '+15557654321',
'callDispositionId' => 10,
'callSentimentId' => 5,
'callScript' => 'Introductory outreach script',
'durationMs' => 120000,
'calledAt' => '2026-06-24T15:30:00.000Z',
'taskId' => 9876
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.seamless.ai/api/client/v2/calls/log"
payload := strings.NewReader("{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.seamless.ai/api/client/v2/calls/log")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.seamless.ai/api/client/v2/calls/log")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"callLogId": "55501",
"contactId": "123456",
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"durationMs": "120000",
"calledAt": "2026-06-24T15:30:00.000Z",
"createdAt": "2026-06-24T15:30:01.000Z"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
The ID of the contact the call was made to.
123456
The phone number that was called.
"+15551234567"
The phone number the call was placed from.
"+15557654321"
The ID of the call disposition to associate with this call. See GET /calls/dispositions.
10
The ID of the call sentiment to associate with this call. See GET /calls/sentiments.
5
The call script used or notes recorded for the call.
"Introductory outreach script"
The duration of the call in milliseconds.
120000
The timestamp the call was made. Optional; if omitted, no explicit call timestamp is recorded.
"2026-06-24T15:30:00.000Z"
The ID of the task this call was made from, if any.
9876
Was this page helpful?
curl --request POST \
--url https://api.seamless.ai/api/client/v2/calls/log \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contactId": 123456,
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"callScript": "Introductory outreach script",
"durationMs": 120000,
"calledAt": "2026-06-24T15:30:00.000Z",
"taskId": 9876
}
'import requests
url = "https://api.seamless.ai/api/client/v2/calls/log"
payload = {
"contactId": 123456,
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"callScript": "Introductory outreach script",
"durationMs": 120000,
"calledAt": "2026-06-24T15:30:00.000Z",
"taskId": 9876
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contactId: 123456,
toNumber: '+15551234567',
fromNumber: '+15557654321',
callDispositionId: 10,
callSentimentId: 5,
callScript: 'Introductory outreach script',
durationMs: 120000,
calledAt: '2026-06-24T15:30:00.000Z',
taskId: 9876
})
};
fetch('https://api.seamless.ai/api/client/v2/calls/log', 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.seamless.ai/api/client/v2/calls/log",
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([
'contactId' => 123456,
'toNumber' => '+15551234567',
'fromNumber' => '+15557654321',
'callDispositionId' => 10,
'callSentimentId' => 5,
'callScript' => 'Introductory outreach script',
'durationMs' => 120000,
'calledAt' => '2026-06-24T15:30:00.000Z',
'taskId' => 9876
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.seamless.ai/api/client/v2/calls/log"
payload := strings.NewReader("{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.seamless.ai/api/client/v2/calls/log")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.seamless.ai/api/client/v2/calls/log")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contactId\": 123456,\n \"toNumber\": \"+15551234567\",\n \"fromNumber\": \"+15557654321\",\n \"callDispositionId\": 10,\n \"callSentimentId\": 5,\n \"callScript\": \"Introductory outreach script\",\n \"durationMs\": 120000,\n \"calledAt\": \"2026-06-24T15:30:00.000Z\",\n \"taskId\": 9876\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"callLogId": "55501",
"contactId": "123456",
"toNumber": "+15551234567",
"fromNumber": "+15557654321",
"callDispositionId": 10,
"callSentimentId": 5,
"durationMs": "120000",
"calledAt": "2026-06-24T15:30:00.000Z",
"createdAt": "2026-06-24T15:30:01.000Z"
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>"
}