curl --request POST \
--url https://api.usewave.co/api/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "September Inbound Outbound",
"account_id": "<string>",
"sequence_id": "<string>",
"list_ids": [
"<string>"
],
"messagesPerDay": 20,
"workingDays": [
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
],
"workingHours": [
"09:00",
"18:00"
],
"increase_limit_gracefully": true,
"timezone": "UTC"
}
'import requests
url = "https://api.usewave.co/api/v1/campaigns"
payload = {
"title": "September Inbound Outbound",
"account_id": "<string>",
"sequence_id": "<string>",
"list_ids": ["<string>"],
"messagesPerDay": 20,
"workingDays": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"],
"workingHours": ["09:00", "18:00"],
"increase_limit_gracefully": True,
"timezone": "UTC"
}
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({
title: 'September Inbound Outbound',
account_id: '<string>',
sequence_id: '<string>',
list_ids: ['<string>'],
messagesPerDay: 20,
workingDays: ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'],
workingHours: ['09:00', '18:00'],
increase_limit_gracefully: true,
timezone: 'UTC'
})
};
fetch('https://api.usewave.co/api/v1/campaigns', 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.usewave.co/api/v1/campaigns",
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([
'title' => 'September Inbound Outbound',
'account_id' => '<string>',
'sequence_id' => '<string>',
'list_ids' => [
'<string>'
],
'messagesPerDay' => 20,
'workingDays' => [
'MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY',
'SATURDAY',
'SUNDAY'
],
'workingHours' => [
'09:00',
'18:00'
],
'increase_limit_gracefully' => true,
'timezone' => 'UTC'
]),
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.usewave.co/api/v1/campaigns"
payload := strings.NewReader("{\n \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\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.usewave.co/api/v1/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usewave.co/api/v1/campaigns")
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 \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "LAUNCHED",
"active": true,
"messagesPerDay": 123,
"workingDays": [
"MONDAY"
],
"workingHours": [
"<string>"
],
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"increase_limit_gracefully": true,
"timezone": "<string>",
"lists": [],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"total_leads": 0,
"dms_sent": 0,
"followups_sent": 0,
"replies_received": 0,
"reply_rate": 0
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}Create Campaign
Create a new outreach campaign that binds an Instagram account, sequence, and audience lists, then initialises messaging schedules.
curl --request POST \
--url https://api.usewave.co/api/v1/campaigns \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "September Inbound Outbound",
"account_id": "<string>",
"sequence_id": "<string>",
"list_ids": [
"<string>"
],
"messagesPerDay": 20,
"workingDays": [
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY",
"SUNDAY"
],
"workingHours": [
"09:00",
"18:00"
],
"increase_limit_gracefully": true,
"timezone": "UTC"
}
'import requests
url = "https://api.usewave.co/api/v1/campaigns"
payload = {
"title": "September Inbound Outbound",
"account_id": "<string>",
"sequence_id": "<string>",
"list_ids": ["<string>"],
"messagesPerDay": 20,
"workingDays": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"],
"workingHours": ["09:00", "18:00"],
"increase_limit_gracefully": True,
"timezone": "UTC"
}
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({
title: 'September Inbound Outbound',
account_id: '<string>',
sequence_id: '<string>',
list_ids: ['<string>'],
messagesPerDay: 20,
workingDays: ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'],
workingHours: ['09:00', '18:00'],
increase_limit_gracefully: true,
timezone: 'UTC'
})
};
fetch('https://api.usewave.co/api/v1/campaigns', 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.usewave.co/api/v1/campaigns",
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([
'title' => 'September Inbound Outbound',
'account_id' => '<string>',
'sequence_id' => '<string>',
'list_ids' => [
'<string>'
],
'messagesPerDay' => 20,
'workingDays' => [
'MONDAY',
'TUESDAY',
'WEDNESDAY',
'THURSDAY',
'FRIDAY',
'SATURDAY',
'SUNDAY'
],
'workingHours' => [
'09:00',
'18:00'
],
'increase_limit_gracefully' => true,
'timezone' => 'UTC'
]),
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.usewave.co/api/v1/campaigns"
payload := strings.NewReader("{\n \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\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.usewave.co/api/v1/campaigns")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.usewave.co/api/v1/campaigns")
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 \"title\": \"September Inbound Outbound\",\n \"account_id\": \"<string>\",\n \"sequence_id\": \"<string>\",\n \"list_ids\": [\n \"<string>\"\n ],\n \"messagesPerDay\": 20,\n \"workingDays\": [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n \"SATURDAY\",\n \"SUNDAY\"\n ],\n \"workingHours\": [\n \"09:00\",\n \"18:00\"\n ],\n \"increase_limit_gracefully\": true,\n \"timezone\": \"UTC\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"status": "LAUNCHED",
"active": true,
"messagesPerDay": 123,
"workingDays": [
"MONDAY"
],
"workingHours": [
"<string>"
],
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"increase_limit_gracefully": true,
"timezone": "<string>",
"lists": [],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"total_leads": 0,
"dms_sent": 0,
"followups_sent": 0,
"replies_received": 0,
"reply_rate": 0
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid request parameters.",
"details": "<unknown>"
}Authorizations
Enter your API key: wave_live_<token>
Body
Campaign title
1 - 150"September Inbound Outbound"
Connected Instagram account UUID to send from
Outreach sequence UUID to use
Target audience list UUIDs to process
1Maximum outbound messages per day (maximum limit is 60)
1 <= x <= 60Days of the week to run outreach (defaults to all 7 days)
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY Operating hours window [start, end] in 24-hour UTC format (e.g. ['09:00', '18:00'])
Gradually ramp up daily messaging limits for account safety
Operating timezone in standard IANA format (e.g. 'Asia/Kolkata', 'America/New_York'). Working hours run according to 24-hour UTC format.
Response
Successful Response
Campaign ID
Campaign title
CREATED, LAUNCHED, PENDING, COMPLETED, MESSAGING_COMPLETED MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY Attached audience lists with id, name, and lead count
Show child attributes
Show child attributes
Total leads across all attached audience lists
Lifetime initial DMs sent
Lifetime follow-up messages sent
Lifetime replies received
Reply percentage (0-100)