Save Call Data
curl --request POST \
--url https://api.ravan.ai/api/v1/ghl/calls/data \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"contact_id": "<string>",
"org_id": "<string>",
"transcript": "<string>",
"summary": "<string>",
"recording_url": "<string>",
"duration_sec": 123,
"tags": [
"<string>"
],
"custom_fields": {}
}
'import requests
url = "https://api.ravan.ai/api/v1/ghl/calls/data"
payload = {
"contact_id": "<string>",
"org_id": "<string>",
"transcript": "<string>",
"summary": "<string>",
"recording_url": "<string>",
"duration_sec": 123,
"tags": ["<string>"],
"custom_fields": {}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '<string>',
org_id: '<string>',
transcript: '<string>',
summary: '<string>',
recording_url: '<string>',
duration_sec: 123,
tags: ['<string>'],
custom_fields: {}
})
};
fetch('https://api.ravan.ai/api/v1/ghl/calls/data', 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.ravan.ai/api/v1/ghl/calls/data",
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([
'contact_id' => '<string>',
'org_id' => '<string>',
'transcript' => '<string>',
'summary' => '<string>',
'recording_url' => '<string>',
'duration_sec' => 123,
'tags' => [
'<string>'
],
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ravan.ai/api/v1/ghl/calls/data"
payload := strings.NewReader("{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.ravan.ai/api/v1/ghl/calls/data")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ravan.ai/api/v1/ghl/calls/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {}
}GHL Integration API
Save Call Data
Save Call Data.
POST
/
api
/
v1
/
ghl
/
calls
/
data
Save Call Data
curl --request POST \
--url https://api.ravan.ai/api/v1/ghl/calls/data \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"contact_id": "<string>",
"org_id": "<string>",
"transcript": "<string>",
"summary": "<string>",
"recording_url": "<string>",
"duration_sec": 123,
"tags": [
"<string>"
],
"custom_fields": {}
}
'import requests
url = "https://api.ravan.ai/api/v1/ghl/calls/data"
payload = {
"contact_id": "<string>",
"org_id": "<string>",
"transcript": "<string>",
"summary": "<string>",
"recording_url": "<string>",
"duration_sec": 123,
"tags": ["<string>"],
"custom_fields": {}
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '<string>',
org_id: '<string>',
transcript: '<string>',
summary: '<string>',
recording_url: '<string>',
duration_sec: 123,
tags: ['<string>'],
custom_fields: {}
})
};
fetch('https://api.ravan.ai/api/v1/ghl/calls/data', 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.ravan.ai/api/v1/ghl/calls/data",
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([
'contact_id' => '<string>',
'org_id' => '<string>',
'transcript' => '<string>',
'summary' => '<string>',
'recording_url' => '<string>',
'duration_sec' => 123,
'tags' => [
'<string>'
],
'custom_fields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ravan.ai/api/v1/ghl/calls/data"
payload := strings.NewReader("{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
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.ravan.ai/api/v1/ghl/calls/data")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ravan.ai/api/v1/ghl/calls/data")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"<string>\",\n \"org_id\": \"<string>\",\n \"transcript\": \"<string>\",\n \"summary\": \"<string>\",\n \"recording_url\": \"<string>\",\n \"duration_sec\": 123,\n \"tags\": [\n \"<string>\"\n ],\n \"custom_fields\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {}
}Authorizations
string
required
Your Agni API key used to authenticate the request. Pass it in the
X-Api-Key header. Find or rotate it from your Ravan AI account settings.Body
string
required
The unique contact ID. Use the
id returned by the Contact API.string
required
The organization ID that owns the resource. Use the organization ID from your Agni account.
string
The full call transcript text.
string
A concise summary of the call or interaction.
string
The URL of the call recording. Use a publicly accessible URL if this is supplied by an external system.
integer
The call duration in seconds.
string[]
A list of tags used to categorize or filter the contact.
object
Custom contact fields as key-value pairs. Use this for data that does not fit the standard contact fields.
Response
boolean
Whether the request succeeded.
string
Human-readable status message.
Authorizations
Body
application/json

