cURL
curl --request GET \
--url https://api.altur.io/api/v1.0/campaigns/{id}/contacts \
--header 'Authorization: <api-key>'import requests
url = "https://api.altur.io/api/v1.0/campaigns/{id}/contacts"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.altur.io/api/v1.0/campaigns/{id}/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.altur.io/api/v1.0/campaigns/{id}/contacts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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://api.altur.io/api/v1.0/campaigns/{id}/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<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://api.altur.io/api/v1.0/campaigns/{id}/contacts")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.altur.io/api/v1.0/campaigns/{id}/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"total_count": 123,
"contacts": [
{
"f_id": "<string>",
"id": 123,
"name": "<string>",
"contact": "<string>",
"status": "<string>",
"context": "<string>",
"retries": 123,
"has_follow_up": true,
"call_count": 123,
"billed_duration": 270,
"last_call_at": "2025-10-03 19:11:39",
"extracted_data": {
"monto_prometido": "1000",
"fecha_limite": "01-01-2025"
},
"tags": [
"tag1",
"tag2"
]
}
],
"pagination": {
"has_next": true,
"has_previous": true,
"next_page": 123,
"previous_page": 123
}
}{
"field1": [
"This field is required."
],
"field2": [
"Incorrect format."
],
"non_field_errors": [
"The date range is not valid."
]
}{
"error": 123,
"message": "<string>"
}{
"error": 123,
"message": "<string>"
}Campaigns
List Campaign Contacts
Returns the Campaign Contacts corresponding to the given identifier
GET
/
campaigns
/
{id}
/
contacts
cURL
curl --request GET \
--url https://api.altur.io/api/v1.0/campaigns/{id}/contacts \
--header 'Authorization: <api-key>'import requests
url = "https://api.altur.io/api/v1.0/campaigns/{id}/contacts"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.altur.io/api/v1.0/campaigns/{id}/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.altur.io/api/v1.0/campaigns/{id}/contacts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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://api.altur.io/api/v1.0/campaigns/{id}/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<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://api.altur.io/api/v1.0/campaigns/{id}/contacts")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.altur.io/api/v1.0/campaigns/{id}/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"total_count": 123,
"contacts": [
{
"f_id": "<string>",
"id": 123,
"name": "<string>",
"contact": "<string>",
"status": "<string>",
"context": "<string>",
"retries": 123,
"has_follow_up": true,
"call_count": 123,
"billed_duration": 270,
"last_call_at": "2025-10-03 19:11:39",
"extracted_data": {
"monto_prometido": "1000",
"fecha_limite": "01-01-2025"
},
"tags": [
"tag1",
"tag2"
]
}
],
"pagination": {
"has_next": true,
"has_previous": true,
"next_page": 123,
"previous_page": 123
}
}{
"field1": [
"This field is required."
],
"field2": [
"Incorrect format."
],
"non_field_errors": [
"The date range is not valid."
]
}{
"error": 123,
"message": "<string>"
}{
"error": 123,
"message": "<string>"
}Rate Limit: 12 requests per second
Status Values by Campaign Type
- Phone Campaigns
- WhatsApp Campaigns
queue— Contact is waiting in queuesending— Call is being initiatedfailed— Call failed to connectretrying— Scheduled for retryconverted— Contact was convertedvoicemail— Reached voicemailanswered— Call was answered
queue— Message is queuedsending— Message is being sentsent— Message was sentdelivered— Message was deliveredread— Message was readaccepted— Contact acceptedrejected— Contact rejectedfailed— Message failedretrying— Scheduled for retryconverted— Contact was converted
Authorizations
Add api-key YOUR_API_SECRET_KEY as the value of the Authorization header.
Path Parameters
The identifier of the Campaign to return the Contacts
Query Parameters
Filters the Campaign Contacts by the Status of the Campaign Contact
Available options:
queue, sending, sent, delivered, voicemail, read, failed, retrying, converted, answered, accepted, rejected Number of items per page to return.
Required range:
1 <= x <= 100Page number to the next page to return.
Required range:
0 <= x <= 25000Response
Campaign Contacts response
Total number of Campaign Contacts for the given query. NOTE: Only calculated in the first page.
Show child attributes
Show child attributes
Filters are applied to each request independently. Changing filters while paginating may result in gaps or overlaps in the result set. For consistent results, maintain the same filters throughout pagination.
Show child attributes
Show child attributes