Get or Create Contact
curl --request POST \
--url https://api.ravan.ai/api/v1/ghl/contacts \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"org_id": "<string>",
"location_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>"
}
'import requests
url = "https://api.ravan.ai/api/v1/ghl/contacts"
payload = {
"org_id": "<string>",
"location_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>"
}
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({
org_id: '<string>',
location_id: '<string>',
name: '<string>',
email: '<string>',
phone: '<string>'
})
};
fetch('https://api.ravan.ai/api/v1/ghl/contacts', 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/contacts",
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([
'org_id' => '<string>',
'location_id' => '<string>',
'name' => '<string>',
'email' => '<string>',
'phone' => '<string>'
]),
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/contacts"
payload := strings.NewReader("{\n \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\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/contacts")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ravan.ai/api/v1/ghl/contacts")
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 \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>",
"location_id": "<string>"
}
}GHL Integration API
Get or Create Contact
Get or Create Contact.
POST
/
api
/
v1
/
ghl
/
contacts
Get or Create Contact
curl --request POST \
--url https://api.ravan.ai/api/v1/ghl/contacts \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"org_id": "<string>",
"location_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>"
}
'import requests
url = "https://api.ravan.ai/api/v1/ghl/contacts"
payload = {
"org_id": "<string>",
"location_id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>"
}
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({
org_id: '<string>',
location_id: '<string>',
name: '<string>',
email: '<string>',
phone: '<string>'
})
};
fetch('https://api.ravan.ai/api/v1/ghl/contacts', 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/contacts",
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([
'org_id' => '<string>',
'location_id' => '<string>',
'name' => '<string>',
'email' => '<string>',
'phone' => '<string>'
]),
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/contacts"
payload := strings.NewReader("{\n \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\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/contacts")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ravan.ai/api/v1/ghl/contacts")
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 \"org_id\": \"<string>\",\n \"location_id\": \"<string>\",\n \"name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": {
"id": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>",
"location_id": "<string>"
}
}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 organization ID that owns the resource. Use the organization ID from your Agni account.
string
The connected provider location ID, usually from GoHighLevel.
string
The contact’s full name in GoHighLevel.
string
The contact email address. Use a valid email format such as
alex@example.com.string
The contact phone number in E.164 format. Example:
+14157774444.Response
boolean
Whether the request succeeded.
string
Human-readable status message.
object
Authorizations
Body
application/json
⌘I

