curl --request POST \
--url https://app.loops.so/api/v1/audience-segments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Active users",
"filter": {
"conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
]
},
"description": "<string>"
}
'import requests
url = "https://app.loops.so/api/v1/audience-segments"
payload = {
"name": "Active users",
"filter": { "conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
] },
"description": "<string>"
}
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({
name: 'Active users',
filter: {
conditions: [{type: 'property', key: 'plan', operator: 'equals', value: 'pro'}]
},
description: '<string>'
})
};
fetch('https://app.loops.so/api/v1/audience-segments', 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.loops.so/api/v1/audience-segments",
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([
'name' => 'Active users',
'filter' => [
'conditions' => [
[
'type' => 'property',
'key' => 'plan',
'operator' => 'equals',
'value' => 'pro'
]
]
],
'description' => '<string>'
]),
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://app.loops.so/api/v1/audience-segments"
payload := strings.NewReader("{\n \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\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://app.loops.so/api/v1/audience-segments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.loops.so/api/v1/audience-segments")
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 \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cls6e8g0i2k4m6o8q0s2u4w6",
"name": "Power users",
"description": "Contacts on the pro plan",
"createdAt": "2025-06-29T07:47:39.370Z",
"updatedAt": "2025-06-29T07:47:39.370Z",
"filter": {
"match": "all",
"conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
]
}
}{
"message": "Audience segment not found."
}{
"message": "Audience segment not found."
}Create an audience segment
Create a new audience segment.
curl --request POST \
--url https://app.loops.so/api/v1/audience-segments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Active users",
"filter": {
"conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
]
},
"description": "<string>"
}
'import requests
url = "https://app.loops.so/api/v1/audience-segments"
payload = {
"name": "Active users",
"filter": { "conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
] },
"description": "<string>"
}
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({
name: 'Active users',
filter: {
conditions: [{type: 'property', key: 'plan', operator: 'equals', value: 'pro'}]
},
description: '<string>'
})
};
fetch('https://app.loops.so/api/v1/audience-segments', 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.loops.so/api/v1/audience-segments",
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([
'name' => 'Active users',
'filter' => [
'conditions' => [
[
'type' => 'property',
'key' => 'plan',
'operator' => 'equals',
'value' => 'pro'
]
]
],
'description' => '<string>'
]),
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://app.loops.so/api/v1/audience-segments"
payload := strings.NewReader("{\n \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\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://app.loops.so/api/v1/audience-segments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.loops.so/api/v1/audience-segments")
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 \"name\": \"Active users\",\n \"filter\": {\n \"conditions\": [\n {\n \"type\": \"property\",\n \"key\": \"plan\",\n \"operator\": \"equals\",\n \"value\": \"pro\"\n }\n ]\n },\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "cls6e8g0i2k4m6o8q0s2u4w6",
"name": "Power users",
"description": "Contacts on the pro plan",
"createdAt": "2025-06-29T07:47:39.370Z",
"updatedAt": "2025-06-29T07:47:39.370Z",
"filter": {
"match": "all",
"conditions": [
{
"type": "property",
"key": "plan",
"operator": "equals",
"value": "pro"
}
]
}
}{
"message": "Audience segment not found."
}{
"message": "Audience segment not found."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The name of the audience segment. Must be unique within the team.
255"Active users"
A tree of audience conditions combined with match.
Show child attributes
Show child attributes
An optional description of the audience segment.
1000Response
Audience segment created.
The ID of the audience segment.
"cls6e8g0i2k4m6o8q0s2u4w6"
The name of the audience segment.
"Power users"
An optional description of the audience segment.
"Contacts on the pro plan"
ISO 8601 timestamp for when the audience segment was created.
"2025-06-29T07:47:39.370Z"
ISO 8601 timestamp for when the audience segment was last updated.
"2025-06-29T07:47:39.370Z"
A tree of audience conditions combined with match.
Show child attributes
Show child attributes
Was this page helpful?

